Also do not sort directory entries in listCurrent and listNew in key cache:
QDir sorts the list of directory entries unless specified otherwise. The last commit already disabled the sorting in maildir.cpp. This commit completes the work and makes the remaining sorting calls in the callgrind dumps at https://bugs.kde.org/show_bug.cgi?id=334218#c7 go away completely as demonstrated in the callgrind dumps at: https://bugs.kde.org/show_bug.cgi?id=334218#c12 Subjectively this has a huge impact on the performance of KMail with huge maildir. KMail hardly blocks anymore on folder changes and feels much more responsive now. Akonadi maildir resource went from hogging a Sandy Bridge core for minutes to not appearing using 100% of one core in even one averaged 10 second interval in atop. I hardly see it in atop at all anymore, except when accessing very large folders such as one with Linux Kernel mailing list and more than 245000 unread mails. Thanks to Sergio for pointing out the remaining sorting calls in the second callgrind dump and for help. Now the bottleneck appears to be MaildirResource::listRecursive but I do not know whether further optimization is necessary at this point. Both changes tested with kdepimlibs master as of today and KMail 4.12.4 from Debian unstable packages with an enormous maildir including a folder for Linux Kernel mailing list with more than 245000 unread mails. CCBUG: 334218 REVIEW: 117975 DIGEST: Huge performance improvement for POP3 users with large maildirs.
parent
1af2704a
Please register or sign in to comment