At 02:24 PM 2/1/2007, Timo Sirainen wrote:
The reason why the messages are read in the first place is because the message sizes need to be returned so that linefeeds are counted in CR+LF format, while they're typically stored in LF-only format. So if Dovecot just stat()ed the file and returned that as the message's size, it would be violating the POP3 spec. tpop3d seems to be doing that.
It sounds like dovecot.index.cache file doesn't contain all the messages' sizes for some reason, and Dovecot goes and re-reads those files again to get the sizes. I'm not sure why it wouldn't contain the sizes though, so it sounds like a bug somewhere.
I think this fixes it: http://dovecot.org/list/dovecot-cvs/2007- February/007582.html
When I tried the 2 indexing patches against the 1/31/07 snapshot I had the same problems as reported with the rc20 release, so I installed the rc21 release and confirmed the re-reading of the cur/ directory was eliminated! VERY cool!
Now installed on production pop3 server, and large mailboxes (10000+ messages) load in fractions of seconds now rather than taking minutes! I/O load on the server is also shrinking back to normal. Previous load averages hovered around 6.00. After updating from rc19 to rc21 load averages dropped and remain below 1.00, and with significantly better performance than tpop3d.
I would say for medium to large capacity sites this is a major performance increase and should be listed as such in Changelog.
Thank you!
- Nate