[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-pim
Subject:    Re: [Kde-pim] Review Request: Optimize file access in maildir
From:       "Andras Mantia" <amantia () kde ! org>
Date:       2012-02-18 20:08:05
Message-ID: 20120218200805.29170.2060 () vidsolbach ! de
[Download RAW message or body]


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://git.reviewboard.kde.org/r/103947/
-----------------------------------------------------------

(Updated Feb. 18, 2012, 8:08 p.m.)


Review request for KDEPIM and Kevin Krammer.


Changes
-------

Fix coding style (noticed and unnoticed bits), simplify addKeys. Removal of a "const" \
in maildirresource.cpp is the result of the removal of const for refreshKeyCache.


Description
-------

This patch reduces the number of file stats (QFile::exist) in the maildir library by \
caching the content of the cur/new directory listing and using QMap lookup to search \
for file existance. The patch also optimizes the mapping between collections and \
Maildir objects in the resource.


Diffs (updated)
-----

  resources/maildir/libmaildir/CMakeLists.txt b8cfb92 
  resources/maildir/libmaildir/keycache.h PRE-CREATION 
  resources/maildir/libmaildir/keycache.cpp PRE-CREATION 
  resources/maildir/libmaildir/maildir.h b038f02 
  resources/maildir/libmaildir/maildir.cpp d61ac0b 
  resources/maildir/maildirresource.h 233732c 
  resources/maildir/maildirresource.cpp b5aa3e2 
  resources/maildir/retrieveitemsjob.h dfc7095 
  resources/maildir/retrieveitemsjob.cpp 97f22b3 

Diff: http://git.reviewboard.kde.org/r/103947/diff/


Testing
-------

1) make test in libmaildir passes
2) I run a variant of the patch for quite some time (~2 months) without problem. The \
only difference was using a QStringList instead of QMap for caching, which make the \
code even slower. :) 3) You can see the poor man's profiling with the QTime: with a \
18K folder subsequent synching (when nothing changes, just click on the folder in \
KMail that triggers a sync), is around 1100ms. With the patch it is around 670ms. \
With a 30K folder it was above 2000ms, now it is below 1200ms. This is the time for \
"ENTRIESPROCESSED", the actual amount of time needed to compare the items in the \
database with the files on the disk.

Here are the full numbers (3 runs for each folder, numbers in ms):

18K folder, original code:
LOCALLISTDONE AT 1856 
ENTRIESPROCESSED AT 1101 

LOCALLISTDONE AT 1879 
ENTRIESPROCESSED AT 1098 

LOCALLISTDONE AT 1809 
ENTRIESPROCESSED AT 1097 


18K - with patch:
LOCALLISTDONE AT 1923 
ENTRIESPROCESSED AT 675 

LOCALLISTDONE AT 2002 
ENTRIESPROCESSED AT 674 

LOCALLISTDONE AT 2045 
ENTRIESPROCESSED AT 669 

Net gain is 300-400ms.

32K-original:
LOCALLISTDONE AT 3627 
ENTRIESPROCESSED AT 2041 

LOCALLISTDONE AT 3826 
ENTRIESPROCESSED AT 2009 

LOCALLISTDONE AT 3698 
ENTRIESPROCESSED AT 2024 


32K -with patch:
LOCALLISTDONE AT 3447 
ENTRIESPROCESSED AT 1304 

LOCALLISTDONE AT 3728 
ENTRIESPROCESSED AT 1216 


LOCALLISTDONE AT 3723 
ENTRIESPROCESSED AT 1207 

Net gain is 900-1000ms.


Thanks,

Andras Mantia

_______________________________________________
KDE PIM mailing list kde-pim@kde.org
https://mail.kde.org/mailman/listinfo/kde-pim
KDE PIM home page at http://pim.kde.org/


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic