sftp performance problem, cured by TCP_NODELAY
Rick Jones
rick.jones2 at hp.com
Fri Jan 27 04:37:28 EST 2006
I ran a version (likely somewhat old) of what ships with HP-UX under a system
call trace tool. I'm not exactly sure what I was seeing, but I did see several
instances of call flow like:
write four bytes to the socket
write lots of bytes to the socket (<= 8KB IIRC)
which smells (an awful lot) like something writing a message length to a socket
and then writing the rest of the message.
I also saw a pattern of
read four bytes from a socket (a different one)
read lots of bytes from a socket
Which seemed to support the header, data hypothesis
Now, the latter (read four read lots) is really just a question of CPU
overheads, it does not affect what goes-out onto the network.
However, the former looks like a classic case of an "unfortuneate" (if being
dimplomatic, "buggy" if not) coding practice that quite easily runs afoul of
Nagle - writing "logically associated data" to the connection in separate calls.
Assuming my brief syscall trace analysis is correct and if that behaviour is the
same in the contemporary versions of sftp, it might be better to fix that before
asking to do TCP_NODELAY. Writing the logically associated data to the
transport will allow a smaller number of segments to be sent, saving CPU util,
and still not run afoul of Nagle. Setting TCP_NODELAY will only optimize (if we
can even call it that) for time, and still send more segments than warranted.
rick jones
More information about the openssh-unix-dev
mailing list