We are writing data to an Epson TM-T88II printer via an Ethernet connection running at 10/Mbit over a TCP/IP socket (jetdirect) using a 2.4.20 Kernel and experience very poor performance. The Epson is advertising a 16 byte window which is very small. We have used both netcat and Richard Stevens sock program to test data transfers to the Epson. The data being sent is simply cat'ed to either program as standard input via a pipe. We have set TCP_NODELAY on the socket but this does not appear to improve performance. I have attached a binary tcpdump capture showing a connection from 10.10.29.94 (client PC running netcat) to the Epson printer at 10.10.29.220. There are several delays that are confusing to us: 1st: After the 3-way connection handshake is done there is almost a 3 second delay before any data is appearing on the wire. There is no delay in the application which is writing the data on the socket; it is writing as fast as possible. 2nd: There is a pattern of 0.2 sec delays alternating every 1 or 2 writes. Again the application is sending data as fast as possible to the socket. Our thoughts are that there is some problem in the Kernel that is triggered by these small 16 byte writes. Perhaps a buffer is attempting to be filled in order to be more efficient and a timer is causing the 0.2 sec. delays. We have tested this same procedure on both Solaris, HPUX, and OpenBSD and all those systems write the data across the network without any delays. A pointers on what to look for in the applications or in the Kernel are appreciated. Thanks, -ab
Attachment:
linux-to-printer.gz
Description: GNU Zip compressed data