After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 778276 - EmailFlagWatcher using CPU usage every ~3 min
EmailFlagWatcher using CPU usage every ~3 min
Status: RESOLVED FIXED
Product: geary
Classification: Other
Component: engine
master
Other Linux
: Normal normal
: 0.13.0
Assigned To: Geary Maintainers
Geary Maintainers
: 714693 (view as bug list)
Depends on:
Blocks: 713117 713525 775730 783025
 
 
Reported: 2017-02-07 11:39 UTC by Gautier Pelloux-Prayer
Modified: 2018-02-07 22:12 UTC
See Also:
GNOME target: ---
GNOME version: ---



Description Gautier Pelloux-Prayer 2017-02-07 11:39:51 UTC
Might be related to Bug 766547 (or not) and/or Bug 713134, but I still have CPU bursts issue. 

Here is what I gathered:

- Geary hits from 5% to 60% CPU usage on a bursts basis: approx 2min idle (0%), 4min busy like it:

10:42:42
<-- BUSY -->
10:47:06
<-- IDLE -->
10:49:11
<-- BUSY -->
10:53:44
<-- IDLE -->
10:55:35
<-- BUSY -->
10:58:49
<-- IDLE -->
11:00:43
<-- BUSY -->
11:04:12
<-- IDLE -->

- This happens if I have only a gmail account, only my personnal account, or both accounts at the same time. However, in the case of gmail only account, bursts are only in 5% to 15% CPU range!

- Both my accounts are perfectly synced (all emails grabbed) so Geary is not syncing anything

- I don't see anything in standard logs (eg if I enable only --debug)

- I disabled IPV6 so I am not having the issue from Bug 776042 anyway

- I am running geary with --hidden option, so no UI is present/doing anything

Any idea what should I do? I tried using --log-X options, but for a single burst period it leads to 2M lines of output!


It stranges that I am the only one to see that, though.
Comment 1 Gautier Pelloux-Prayer 2017-03-03 14:35:53 UTC
I finally found the culprit with is EmailFlagWatcher which forces full  synchronization of currently open folders every 3 minutes (https://github.com/GNOME/geary/blob/master/src/engine/imap-engine/imap-engine-email-flag-watcher.vala#L18).

But since my inbox contains ~10K, it takes several minutes to fetch them. Maybe we should reconsider the refresh frequency (30m? 24h?). 
I am not sure it really makes sense to synchronize every 3 minutes, because users won't use 2 different mails clients simultaneously most of the time - and even if so, does it matter if geary keeps some emails unsynced for, say, 24h?
Comment 2 Michael Gratton 2017-03-05 12:36:34 UTC
The correct fix would be to implement CONDSTORE/QRESYNC (Bug 713117).

In the mean time (and for servers that don't support CONDSTORE), I'm thinking that maybe it would be good to do a two-tier sync:

 - Full sync less often (once every hour or two?)
 - Partial sync of n most recent messages (n = 100? n = "count(internal_date >= (now - 7d))"?)

People use multiple clients maybe a bit more often then you might expect, it's not uncommon for me to switching between my mail on my phone and desktop several times an hour for example.

As an aside, I wonder why this only runs on open folders and not others?
Comment 3 Michael Gratton 2017-11-20 15:23:52 UTC
Looking into this some more, it only runs on open folders since it hooks into folders opening and closing. This is weird since open folders always have a mailbox selected, and hence any changes made to messages in that folder should get reported by an via IDLE or an unsolicited FETCH. Geary is currently ignoring those however, and hence instead needs the EmailFlagWatcher.

So it seems like the right fix for this is to get Geary to pay attention to these unsolicited FETCH responses, then we can either remove EmailFlagWatcher altogether, or just run it once when the folder is opened of the background sync isn't updating flags.

I've been investigating this a bit, will report back when I make some useful progress.
Comment 4 Michael Gratton 2017-12-08 00:26:54 UTC
WIP branch for this in git as: wip/778276-better-flag-updates

Currently it's a large-ish rework of GenericAccount that adds yet another operations queue but for account-wide operations, and has converted local folder load, remote folder refresh and folder unseen updates to operations in this queue. It also ensures that when Geary changes a folder locally we signal it has happened, so background sync can fire up only when needed, and not periodically. This also lets increase the remote folder refresh period right up from every 3 minutes to every 10 minutes since we don't need it to find changes to folders that Geary has caused any more. Finally, it's now taking notice of unsolicited FETCH responses, so the flag watcher doesn't need to run when a folder is open.

Still to do: Convert background sync into an account operation, maybe integrate the flag watcher into that, and maybe do something about Bug 713117.
Comment 5 Michael Gratton 2017-12-08 00:28:57 UTC
One last note, we still need to check for flags having changed when first opening a folder, so need to look at the best solution for that, hence integrating flag watcher into the background sync, and/or Bug 713117.
Comment 6 Michael Gratton 2018-01-12 01:00:33 UTC
Fix pushed for this as commit 6c5a7d5.
Comment 7 Michael Gratton 2018-02-07 22:12:13 UTC
*** Bug 714693 has been marked as a duplicate of this bug. ***