IntroductionDuring the big time of Microchannel-based PS/2 systems, Token Ring was the network technology of choice. It was heavily pushed by IBM and the performance was notably better than with a 10MBps Ethernet. As a result, almost every used PS/2 machine you get from a big installation that was taken down comes with a Token Ring Adapter. This is fine if you have enough other equipment to build up your own home network, but sooner or later, you may see the need to get an Ethernet card for your PS/2. But which one is the best? Basically I would say: the best one is the one you can get hold of, since there is no new Microchannel hardware made these days and Ethernet Microchannel boards may be a rare item where you live. Of course, there are differences in performance between the available boards, but I am not aware of anyone having quantified these differences up to now. This small article is intended to fill this gap. Of course, your mileage might vary significantly: the performance of an Ethernet board not only depends on the board's hardware, but also on the host CPU's performance and the quality of the driver implementation. The netio tool I used for performance evaluation is however available for various platforms, so you might want to make your own comparisons.
Test SetupAs I mentioned, I use netio to measure the performance of an Ethernet card. Netio's way of operation is simple: you start it on one machine in server mode, and on another machine with the server's IP address as argument. The client instance then builds a TCP connection to the server and sends packets of various sizes at maximum possible speed, which is printed after the runs. The results netio gets are very near to the theoretical maximum of the network link, since no disk accesses are involved in the tests, opposed e.g. to FTP transfers that are also very popular for performance tests. During a single run, the netio client transmits about 32 MBytes to the client and in turn receives about one Megabyte (mostly TCP ACKs). You may download netio here for your own measurements.
The server I used on all runs is an AMD K6-3/400-based machine with 128 MBytes of RAM and a DEC Tulip-based PCI network card. Running against e.g. a DEC Alpha AXP/150 with an EISA Etherlink III, this machine easily reaches data rates up to 1100..1200 KBytes/s on a 10MBps Ethernet, very close to the theoretical maximum. So when we vary the client side, we may be sure that the server is not limiting the performance.
For all tests, both the server and the clients run Linux with a 2.2 kernel. Since netio also runs on other platforms, you might want to make your own tests if Linux is not your favourite OS (bah ;-) )
When comparing Ethernet boards, the maximum data rate possible might not be the only interesting result. Except for some high-end server models, all Ethernet interface boards place the burden of transferring data between the card's buffers and memory on the CPU. Depending on the card's design, this may hog the CPU more or less and steal more or less of your CPU's time. I therefore made all measurements on three different machines:
Measurement ResultsOK, let's go for it. First the results in the PS/2 56SX:
As one can see from the CPU load results, the slow CPU is the limiting factor in all cases and the values are far away from the theoretical maximum throughput. Older (read: ISA-derived) designs like the SKnet and NE/2 perform significantly worse than the others, an indication that transferring data from/to these cards is loaded with more wait states than on designs that exploit the higher speed of the MCA bus compared to ISA. The winner in this scenario is the 3C529, closely followed by the 3C523, 3C527, DE-320 and LAN/A. Though not dramatically slower, the old, 386-only 3C523 measurably lags behind the newer revision. The performance of the EtherExpress is similar to the old 3C523. One reason might be the usage of the same Ethernet controller chip, an Intel 82586, however the Intel card uses programmed I/O instead of shared memory for data transfer - an example that PIO needs not to be slower than direct access to the card's packet buffer memory. Furthermore, there is no noticable difference between the 8013 and 8003 - if there are differences between an 8- and 16-bit-card, they don't show up on this platform...
Given that the i386SX-20 was the limiting factor in the first setup, we may expect substantially better results from an i486SX-33, which is proven by the tests on the 77:
Now we're starting to talk at last! The CPU load for the SKnet board shows that this board already has reached its maximum performance of about ~800 KBytes/s. In contrast, the NE/2 is capable of more, however it is still able to completely hog the CPU - not very nice in a server! The DE-320 however demonstrates that this is not an inherent property of the NE2000 design: its performance and CPU load are similar to the 3C523. Similar to the SKnet board, the 3C529 has reached its limit. With 950 KBytes/s, this is not bad, however other boards can do better. Interestingly enough, its predecessor 3C523 performs better (with a substantial CPU overhead however). The clear winner is the LAN/A: The data rate is the highest, and the CPU load is even lower than for the slower 3C529. The EtherExpress also performs well, however with a measurably higher CPU load than the 3C523 or LAN/A, plus a lower performance for small frames.
WD8003 and 8013 do not differ significantly in their performance, the 8003's CPU load is however higher - a sign that the cards have reachrd their maximum internal transfer rate, but it takes the CPU more to stuff the dat through the 8003's slower bus interface.
What does this somehow surprising result tell us? Everybody's darling 3C529 is not the fastest card (at least for Linux), cards that use shared memory or a good PIO interface for transfer are the faster choice. The 3C529 however is still not a bad choice, the difference is mainly for people who want to drive it to the peak.
Another result is that the busmastering 3C527 produces significantly more load than other, non-busmastering boards! One explanation could be that controlling this board is more complex (not probable). Another reason might be that the driver does not exploit the board's bus mastering capabilities, i.e. the received frames are written to buffers kept by the driver, and the driver then copies the data into the operating system's buffers. This might sound awkward (and is is in fact, since it voids the advantages of busmaster operation), but it is sometimes unavoidable, either due to the way the kernel interface works or buffer alignment constraints... this shouldn't cover the fact that the 3C527 delivers good performance and deserves the designation 'High Performance Adapter'.
So let's see if a P90 can crank even more out of the cards:
Only the NE/2 shows a significant gain and now exhibits performances comparable to the LAN/A, yet with a substantially higher CPU load, while the 3C523 finally has reached the ceiling. The same is true for the EtherExpress, but its limit is a few Kbytes/second higher. The 3C529's limit around 950 KByte/s is underlined by these values. Once again, the LAN/A shows the best performance paired with the lowest CPU overhead. Except for the NE/2 (and the DE210!), overhead is not an issue for any card. Frustatingly, the 3C527 that should have the lowest CPU load delivers one of the worst results - busmastering alone is no guarantee for a low CPU load, everything else (including the software implementation) has to cooperate! It remains to be seen if IBM's EtherStreamer MC/32, another busmaster Ethernet adapter, could do better. I also have such an MC/32, however there is no Linux driver for it and IBM isn't very cooperative in releasing programming information :-(
Beyond 10 MBbits Per SecondFast Ethernet boards for the Microchannel bus are extremely rare. In fact, the only board that is halfway widespread is the Olicom 2335. This board is based on the National Semiconductor DP83800 controller chip, a chip originally developed for the ISA bus. It therefore does not benefit from the MCA bus's higher transfer rates - the speed difference is 'adapted' via wait states. Additionally, the board does not allow busmaster operation, something rather disturbing for an interface that has potentially to transfer more than 10 MBytes per second:
The 'counterpart' in this case is a VIA Rhine-based PCI board, again in a 400 MHz AMD K6 machine. Of course the rates are higher than for any other 10 MBit board, but somewhat disappointing. Judging from the CPU load measurements with 10 MBit boards, one can conclude that a Pentium 90 CPU is capable of saturating a 100 MBit line. The bad results are entirely due to the bad bus interface of the DP83800: An ISA-style interface maxes out at 3 MBytes/s, and any additional CPU performance is wasted in wait states :-(
ConclusionsAnd the winner is...? From the numbers above, I would give the performance crown to the LAN/A : Performance is always with the best adapters, and the CPU load is the lowest of all adapters tested. Believe me, I would say this also if I hadn't written the Linux LAN/A driver myself ;-)
Place 2 goes to the 3COM boards: While the 3C523 offers a slightly better performance, the 3C529 attracts with onboard 10baseT and a smaller form factor (handy e.g. in the P70 portable PS/2!). I wouldn't overrate the 3C529's lower performance too much: The rate is still more than you will ever get on a loaded 10 Mbps wire.
It's difficult to say whether the SKnet, DE210 or the NE/2 is the worst board: Only 800 KBytes/s is already a notable loss, but at least it doesn't put that much load on the CPU as the NE/2 or DE210. The NE/2 is like a lemon: if you squeeze it just enough, you will get what you want ;-) I wouldn't advise to use either in a server...
The 3C529 and even more the DE-320/EtherExpress/8013 are good cards where the length of the card is an issue, like in the P70/75 portables: They fit into the 'half length' slots and still offer good performance.
© Alfred Arnold,