mTCP DOS Logo

Performance Notes


mTCP comes with a program called SpdTest.exe that can be used to measure TCP/IP performance on your machine. The program is simple; it sends or receives a few megabytes of data and times it. The program tries to send and receive data as quickly as it can; no effort is made to manipulate the data because we want to measure the speed of the TCP/IP code and the hardware, nothing else. No shortcuts are taken in the TCP/IP stack - all of the checksums and other things still happen.  This type of benchmark is useful because it gives you an upper bound for what to expect for TCP/IP performance.

SpdTest needs to be used against another system that can send and receive data on a socket. I use a much faster Linux system and the netcat command. Command line parameters are:

spdtest <mode> -target <ipaddr> <port> [send options]
spdtest <mode> -listen <port> [send options]

<mode> either -receive (for a receive test) or -send (for a send test). Use -target to have spdtest open the socket connection to a waiting machine or -listen to have spdtest wait for an incoming connection. Port is the port on the target machine when using -target or the local port to listen on when using -listen. The only send option is -mb <n>, where n is the number of megabytes to send.

For example, to execute a send test:
Run the DOS command first so that SpdTest is sitting and waiting for the incoming connection. On the Linux side I use time to measure the wall-time of the entire command and I redirect the output to a file that can be used with the receive test. (On a fast system the cost of doing that is negligible and won't affect your test.) Substitute in the correct IP address for the DOS machine and adjust the port number if you need to. You can also adjust the amount of data to send with the -mb option.

Note: There are at least two versions of netcat out there. I am using the one in the netcat-openbsd package. The other version is found in netcat-traditional and requires you to specify -q 0 to work correctly. Without that option netcat will stay open after reading an EOF from stdin for longer than it should, affecting the test timing. Always specifying -q 0 is safe regardless of which version you have.

To execute a receive test:
Remember bogus.bin? If everything went well during the send test then bogus.bin has 8MB (or whatever you chose), but you can use any or source of data. The idea is to just know how much was sent so that you can do the math.

Tips for running good tests:
Here are the raw TCP/IP socket performance numbers for my personal machines:

Personally measured results
Machine Adapter Send Rate
(KB/sec)
Recv Rate
(KB/sec)
Code Date OS Notes
IBM Convertible 5140 (8088@4.77Mhz)
Xircom PE3-10BT 42.9 22.8 2020-03-07 PC DOS 3.3 4MB transfer, standard parallel port, no hardware IRQ used
IBM PCjr (NEC V20@4.77Mhz) Xircom PE3-10BT 43.4 40.5 2020-03-07 PC DOS 3.3 4MB transfer, bi-directional parallel port, hardware IRQ
IBM PCjr (NEC V20@4.77Mhz) 3Com 3C503 76.7 77.0 2020-03-07 PC DOS 3.3 8MB transfer, 8 bit ISA card on a bus adapter
IBM PCjr (4.77 NEC V20) WD8003WT 115.3 117.6 2020-03-07 PC DOS 3.3 8MB transfer, 8 bit ISA card on a bus adapter
IBM PS/2 Model 25 (8086@8Mhz) 3Com 3C503 190.3 191.9 2020-03-07 PC DOS 6.1 32MB transfer, 8 bit ISA card
Clone 80386DX@40Mhz, 128K L2 cache Davicom DM9008 702.0 1001.8 2020-03-07 PC DOS 5.02 32MB transfer, 16 bit ISA card UM9008 chipset (NE2000 compat)
Compaq 4/33i (80486DX2@66Mhz) Xircom PE3 208.5 202.7
2020-03-07 PC DOS 6.3 8MB transfer, hardware IRQ 7
Compaq 4/33i (80486DX2@66Mhz) 3Com 3C590B 911.8 1005.8 2020-03-07 PC DOS 6.3 32MB transfer, 16 bit ISA card
Pentium 133 LinkSys LNE100 10638.4 10590.3 2020-03-07 PC DOS 5.02 64MB transfer, 100MB/s PCI card
Aptiva E3N (AMD K6-2@300Mhz) IBM 47G7170 452.7 601.5 2020-03-07 Win 98 DOS 32MB transfer, 10MB/s 16 bit ISA card, slower than it should be
IBM NetVista (Pentium 4) RealTek 8139 9831.9 11458.7 2020-03-07 Win 98 DOS 64MB transfer, 100MB/s PCI card

Other reported results
IBM PC 5150 (8088@4.77Mhz) Intel EtherExpress 8/16 67 73 2020-03-07
Reported by Trixter: 8MB transfer, wired Ethernet to wireless network
AT&T PC 6300 (8086@8Mhz) SMC Elite16 (8013 EWC) 163 165 2020-03-07
Reported by Trixter; 8MB transfer, 8KB RAM window on the card
Clone 80386DX@33Mhz, 128K cache 3Com 3C509 1086 886 2020-03-07
Reported by Trixter
Clone 80386DX@33Mhz, 128K cache SMC Elite16 Combo (8013 EWC) 798 1003 2020-03-07
Reported by Trixter; EMC8013 chipset; SMC_WD packet driver which indicates SMC/WD/IBM Ethernet Adapters
Clone 80386DX@33Mhz, 128K cache Intel EtherExpress 8/16 509 616 2020-03-07
Reported by Trixter; 16 bit mode, 32K memory window
Clone 80386DX@33Mhz, 128K cache Intel EtherExpress 8/16 510 577 2020-03-07
Reported by Trixter; 16 bit mode, no memory window
Clone 80386DX@33Mhz, 128K cache Intel EtherExpress 16TP 509 654 2020-03-07
Reported by Trixter
Clone 80386DX@33Mhz, 128K cache Linksys Ether16 642 891 2020-03-07
Reported by Trixter; possibly an NE2000 clone
Clone 80386DX@33Mhz, 128K cache Xircom PE3-10BT 189 104 2020-03-07
Reported by Trixter; standard parallel port, no IRQ (not bi-directional, EPP or ECP







Want to submit a result? If so, take a good set of measurements and forward me the details. I'll post them here!

Some observations:



Created August 29th, 2009, Last updated March 19th, 2020

(C)opyright Michael B. Brutman, mbbrutman at gmail.com