Date: Sun, 30 Sep 2001 20:12:01 -0500 (CDT)
   From: [EMAIL PROTECTED]

   I'm testing a perl script that runs on a Solaris 8 mail server to read
   Unix mailbox files and append the messages to Cyrus mailboxes.  I need
   to do this for 17000 mailboxes, and it's way too slow.  The server is
   pretty much idle.  Neither the perl script nor the imapd process are
   CPU or I/O bound.  When I truss the two processes, both have long
   delays were nothing is happening.

   In the case of the perl script, there is about a tenth of a second
   delay between the time it sends a command to the IMAP server and
   gets a response back:

    1.5735 write(6, " 1 1 7   a p p e n d   u".., 39)      = 39
    1.5738 write(6, "\r\n", 2)                             = 2
    1.6709 read(6, " +   g o   a h e a d\r\n", 8192)       = 12

This is the classic Nagle-algorithm problem.  Nagle's algorithm
attempts to coalesce short TCP packets into a single one by delaying
small writes for a short amount of time.  It works well for telnet,
which sends out each keystroke as an individual packet.

If you change your script to write the \r\n at the same time as the
append you'll probably notice drastically better performance.
(Generally, you don't want to do a write unless you're about to read
OR you're writing a large amount of data.)

Larry

Reply via email to