Bug 351377 - Switching activities is slow
Summary: Switching activities is slow
Status: RESOLVED WORKSFORME
Alias: None
Product: plasmashell
Classification: Plasma
Component: Containment (show other bugs)
Version: master
Platform: Debian testing Linux
: NOR normal
Target Milestone: 1.0
Assignee: Plasma Bugs List
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2015-08-16 22:13 UTC by Stefanos Harhalakis
Modified: 2020-02-21 04:33 UTC (History)
4 users (show)

See Also:
Latest Commit:
Version Fixed In:
Sentry Crash Report:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Stefanos Harhalakis 2015-08-16 22:13:55 UTC
Hi,

Since upgrading to plasma5, switching activities is painfully slow (but frameworks 5 rock). I *guess* this happens when there are too many open windows/processes; see bellow. As I'm writing this it takes 25 seconds to complete. The windows from the old activity disappear immediately and so do the windows of the new activity. However, Plasma takes forever to switch, which is signified by the change of the wallpaper.

Running an strace on plasmashell I see that it examines all processes under/proc, reading their stat, status, statm and cmdline files. This is a small snippet of the whole story:

[pid  5926] 22:54:33.646879 open("/proc/14041/status", O_RDONLY|O_CLOEXEC) = 62 <0.000008>
[pid  5926] 22:54:33.716689 open("/proc/23789/status", O_RDONLY|O_CLOEXEC) = 62 <0.000021>
[pid  5926] 22:54:33.803270 open("/proc/3654/status", O_RDONLY|O_CLOEXEC) = 62 <0.000010>
[pid  5926] 22:54:33.875398 open("/proc/3649/status", O_RDONLY|O_CLOEXEC) = 62 <0.000016>
[pid  5926] 22:54:33.947983 open("/proc/9567/status", O_RDONLY|O_CLOEXEC) = 62 <0.000015>
[pid  5926] 22:54:34.039924 open("/proc/3769/status", O_RDONLY|O_CLOEXEC) = 62 <0.000018>
[pid  5926] 22:54:34.112517 open("/proc/26526/status", O_RDONLY|O_CLOEXEC) = 62 <0.000016>
[pid  5926] 22:54:34.185146 open("/proc/9292/status", O_RDONLY|O_CLOEXEC) = 62 <0.000019>
[pid  5926] 22:54:34.277633 open("/proc/915/status", O_RDONLY|O_CLOEXEC) = 62 <0.000019>
[pid  5926] 22:54:34.351597 open("/proc/14016/status", O_RDONLY|O_CLOEXEC) = 62 <0.000010>
[pid  5926] 22:54:34.427960 open("/proc/3648/status", O_RDONLY|O_CLOEXEC) = 62 <0.000009>
[pid  5926] 22:54:34.505433 open("/proc/5366/status", O_RDONLY|O_CLOEXEC) = 62 <0.000049>
[pid  5926] 22:54:34.578242 open("/proc/1259/status", O_RDONLY|O_CLOEXEC) = 62 <0.000038>
[pid  5926] 22:54:34.649194 open("/proc/25550/status", O_RDONLY|O_CLOEXEC) = 62 <0.000010>
[pid  5926] 22:54:34.721935 open("/proc/5232/status", O_RDONLY|O_CLOEXEC) = 62 <0.000008>
[pid  5926] 22:54:34.791276 open("/proc/9627/status", O_RDONLY|O_CLOEXEC) = 62 <0.000018>
[pid  5926] 22:54:34.865870 open("/proc/4889/status", O_RDONLY|O_CLOEXEC) = 62 <0.000010>
[pid  5926] 22:54:34.928660 open("/proc/13014/status", O_RDONLY|O_CLOEXEC) = 62 <0.000007>
[pid  5926] 22:54:34.988213 open("/proc/24040/status", O_RDONLY|O_CLOEXEC) = 62 <0.000008>
[pid  5926] 22:54:35.050505 open("/proc/23942/status", O_RDONLY|O_CLOEXEC) = 62 <0.000011>
[pid  5926] 22:54:35.123089 open("/proc/5326/status", O_RDONLY|O_CLOEXEC) = 62 <0.000020>
[pid  5926] 22:54:35.193520 open("/proc/1119/status", O_RDONLY|O_CLOEXEC) = 62 <0.000009>
[pid  5926] 22:54:35.263565 open("/proc/14195/status", O_RDONLY|O_CLOEXEC) = 62 <0.000017>
[pid  5926] 22:54:35.336297 open("/proc/27160/status", O_RDONLY|O_CLOEXEC) = 62 <0.000009>
[pid  5926] 22:54:35.406865 open("/proc/3655/status", O_RDONLY|O_CLOEXEC) = 62 <0.000022>
[pid  5926] 22:54:35.477662 open("/proc/8918/status", O_RDONLY|O_CLOEXEC) = 62 <0.000039>
[pid  5926] 22:54:35.552086 open("/proc/4657/status", O_RDONLY|O_CLOEXEC) = 62 <0.000010>
[pid  5926] 22:54:35.659828 open("/proc/12979/status", O_RDONLY|O_CLOEXEC) = 62 <0.000010>
[pid  5926] 22:54:35.750543 open("/proc/3651/status", O_RDONLY|O_CLOEXEC) = 62 <0.000009>
[pid  5926] 22:54:35.822661 open("/proc/9924/status", O_RDONLY|O_CLOEXEC) = 62 <0.000009>
[pid  5926] 22:54:35.897813 open("/proc/5252/status", O_RDONLY|O_CLOEXEC) = 62 <0.000024>
[pid  5926] 22:54:35.972790 open("/proc/14147/status", O_RDONLY|O_CLOEXEC) = 62 <0.000032>
[pid  5926] 22:54:36.064394 open("/proc/3652/status", O_RDONLY|O_CLOEXEC) = 62 <0.000032>
[pid  5926] 22:54:36.141466 open("/proc/5113/status", O_RDONLY|O_CLOEXEC) = 62 <0.000009>
[pid  5926] 22:54:36.206532 open("/proc/8873/status", O_RDONLY|O_CLOEXEC) = 62 <0.000008>
[pid  5926] 22:54:36.294604 open("/proc/25031/status", O_RDONLY|O_CLOEXEC) = 62 <0.000011>
[pid  5926] 22:54:36.375235 open("/proc/9716/status", O_RDONLY|O_CLOEXEC) = 62 <0.000020>
[pid  5926] 22:54:36.447880 open("/proc/1233/status", O_RDONLY|O_CLOEXEC) = 62 <0.000015>
[pid  5926] 22:54:36.517645 open("/proc/14041/status", O_RDONLY|O_CLOEXEC) = 62 <0.000052>
[pid  5926] 22:54:36.593497 open("/proc/23789/status", O_RDONLY|O_CLOEXEC) = 62 <0.000012>
[pid  5926] 22:54:36.683332 open("/proc/3654/status", O_RDONLY|O_CLOEXEC) = 62 <0.000020>
[pid  5926] 22:54:36.760110 open("/proc/3649/status", O_RDONLY|O_CLOEXEC) = 62 <0.000010>
[pid  5926] 22:54:36.833528 open("/proc/9567/status", O_RDONLY|O_CLOEXEC) = 62 <0.000013>
[pid  5926] 22:54:36.921905 open("/proc/3769/status", O_RDONLY|O_CLOEXEC) = 62 <0.000047>
[pid  5926] 22:54:36.996137 open("/proc/26526/status", O_RDONLY|O_CLOEXEC) = 62 <0.000009>
[pid  5926] 22:54:37.071122 open("/proc/9292/status", O_RDONLY|O_CLOEXEC) = 62 <0.000009>
[pid  5926] 22:54:37.164535 open("/proc/915/status", O_RDONLY|O_CLOEXEC) = 62 <0.000016>
[pid  5926] 22:54:37.240013 open("/proc/14016/status", O_RDONLY|O_CLOEXEC) = 62 <0.000009>
[pid  5926] 22:54:37.315996 open("/proc/3648/status", O_RDONLY|O_CLOEXEC) = 62 <0.000020>
[pid  5926] 22:54:37.391032 open("/proc/5366/status", O_RDONLY|O_CLOEXEC) = 62 <0.000020>
[pid  5926] 22:54:37.463660 open("/proc/1259/status", O_RDONLY|O_CLOEXEC) = 62 <0.000024>
[pid  5926] 22:54:37.538621 open("/proc/25550/status", O_RDONLY|O_CLOEXEC) = 62 <0.000019>
[pid  5926] 22:54:37.608231 open("/proc/5232/status", O_RDONLY|O_CLOEXEC) = 62 <0.000018>
[pid  5926] 22:54:37.671862 open("/proc/9627/status", O_RDONLY|O_CLOEXEC) = 62 <0.000008>
[pid  5926] 22:54:37.750708 open("/proc/4889/status", O_RDONLY|O_CLOEXEC) = 62 <0.000015>
[pid  5926] 22:54:37.825185 open("/proc/13014/status", O_RDONLY|O_CLOEXEC) = 62 <0.000015>

Notice that it took about 4 seconds to examine 56 processes and my system currently runs over 600, not counting threads.

It also scans for and re-reads taskmanagerrulsrc and kdeglobals on each iteration:

[pid  5926] 22:54:37.607701 openat(AT_FDCWD, "/proc", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 61 <0.000012>
[pid  5926] 22:54:37.608033 open("/proc/5232/stat", O_RDONLY|O_CLOEXEC) = 62 <0.000012>
[pid  5926] 22:54:37.608231 open("/proc/5232/status", O_RDONLY|O_CLOEXEC) = 62 <0.000018>
[pid  5926] 22:54:37.608474 open("/proc/5232/statm", O_RDONLY|O_CLOEXEC) = 62 <0.000018>
[pid  5926] 22:54:37.608659 open("/proc/5232/cmdline", O_RDONLY|O_CLOEXEC) = 62 <0.000007>
[pid  5926] 22:54:37.634069 open("/home/v13/.config/kdeglobals", O_RDONLY|O_CLOEXEC) = 61 <0.000013>
[pid  5926] 22:54:37.634852 open("/etc/xdg/taskmanagerrulesrc", O_RDONLY|O_CLOEXEC) = 61 <0.000009>
[pid  5926] 22:54:37.670834 openat(AT_FDCWD, "/proc", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 61 <0.000323>
[pid  5926] 22:54:37.671683 open("/proc/9627/stat", O_RDONLY|O_CLOEXEC) = 62 <0.000011>
[pid  5926] 22:54:37.671862 open("/proc/9627/status", O_RDONLY|O_CLOEXEC) = 62 <0.000008>
[pid  5926] 22:54:37.672041 open("/proc/9627/statm", O_RDONLY|O_CLOEXEC) = 62 <0.000011>
[pid  5926] 22:54:37.673241 open("/proc/9627/cmdline", O_RDONLY|O_CLOEXEC) = 62 <0.000010>
[pid  5926] 22:54:37.698673 open("/home/v13/.config/kdeglobals", O_RDONLY|O_CLOEXEC) = 61 <0.000020>
[pid  5926] 22:54:37.699544 open("/etc/xdg/taskmanagerrulesrc", O_RDONLY|O_CLOEXEC) = 61 <0.000010>
 
Any ideas?

Thanks,
Stefanos


Reproducible: Always

Steps to Reproduce:
1. Open many windows
2. Switch activities

Actual Results:  
Takes over 25 seconds

Expected Results:  
Should be blazing fast. Preferably complete before the hand loses touch from the mouse button
Comment 1 Stefanos Harhalakis 2015-08-16 22:16:36 UTC
Forgot to mention that the installed version is from debian testing, kactivities 5.12.0-2
Comment 2 Ivan Čukić 2015-08-17 05:54:04 UTC
Plasma became really slow to react to activity changes, I've noticed that recently. Will have to see where the problem is.

The manager itself changes activity in a matter of milliseconds (it does not really do much when switching activities), and kwin is almost as fast.
Comment 3 David Edmundson 2015-08-23 22:06:12 UTC
>Plasma became really slow to react to activity changes, I've noticed that recently. Will have to see where the problem is.

Then mark it as confirmed please. Otherwise we have to triage things twice.
Comment 4 Nate Graham 2020-01-22 18:56:29 UTC
I cannot reproduce this. Is it still happening for you in Plasma 5.17 or the 5.18 beta?
Comment 5 Bug Janitor Service 2020-02-06 04:33:15 UTC
Dear Bug Submitter,

This bug has been in NEEDSINFO status with no change for at least
15 days. Please provide the requested information as soon as
possible and set the bug status as REPORTED. Due to regular bug
tracker maintenance, if the bug is still in NEEDSINFO status with
no change in 30 days the bug will be closed as RESOLVED > WORKSFORME
due to lack of needed information.

For more information about our bug triaging procedures please read the
wiki located here:
https://community.kde.org/Guidelines_and_HOWTOs/Bug_triaging

If you have already provided the requested information, please
mark the bug as REPORTED so that the KDE team knows that the bug is
ready to be confirmed.

Thank you for helping us make KDE software even better for everyone!
Comment 6 Bug Janitor Service 2020-02-21 04:33:16 UTC
This bug has been in NEEDSINFO status with no change for at least
30 days. The bug is now closed as RESOLVED > WORKSFORME
due to lack of needed information.

For more information about our bug triaging procedures please read the
wiki located here:
https://community.kde.org/Guidelines_and_HOWTOs/Bug_triaging

Thank you for helping us make KDE software even better for everyone!