Bug 364061 - plasmashell using 100% CPU time
Summary: plasmashell using 100% CPU time
Status: RESOLVED DUPLICATE of bug 356479
Alias: None
Product: plasmashell
Classification: Plasma
Component: general (show other bugs)
Version: 5.5.5
Platform: Fedora RPMs Linux
: NOR normal
Target Milestone: 1.0
Assignee: David Edmundson
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2016-06-07 14:17 UTC by crog
Modified: 2016-11-22 13:10 UTC (History)
5 users (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description crog 2016-06-07 14:17:32 UTC
Randomly plasmashell will start using 100% CPU time, causing noticeable performance and usability issues (such as the mouse skipping around). Restarting plasmashell tends to fix the issue until it happens again.

I don't use any "3rd-party" widgets, only those that come with plasma-workstation, on the default panel. I do, however, have two extra panels, which provide a simple task manager for my 2nd and 3rd displays.

Reproducible: Sometimes

Steps to Reproduce:
Issue seems to occur randomly

Actual Results:  
Plasmashell hordes CPU time

Expected Results:  
Plasmashell shouldn't be hording CPU time

Backtrace taken while it was happening:

(gdb) thread apply all bt

Thread 8 (Thread 0x7f00e8596700 (LWP 3412)):
#0  0x00000037952f757d in poll () at ../sysdeps/unix/syscall-template.S:81
#1  0x0000003798e0a182 in _xcb_conn_wait (__timeout=-1, __nfds=1, __fds=0x7f00e8595bc0) at /usr/include/bits/poll2.h:46
#2  0x0000003798e0a182 in _xcb_conn_wait (c=c@entry=0x1444760, cond=cond@entry=0x14447a0, vector=vector@entry=0x0, count=count@entry=0x0) at xcb_conn.c:459
#3  0x0000003798e0bc77 in xcb_wait_for_event (c=0x1444760) at xcb_in.c:648
#4  0x00007f00e9493da9 in QXcbEventReader::run() (this=0x1452cb0) at qxcbconnection.cpp:1255
#5  0x0000003a65ea33de in QThreadPrivate::start(void*) (arg=0x1452cb0) at thread/qthread_unix.cpp:331
#6  0x0000003795a07555 in start_thread (arg=0x7f00e8596700) at pthread_create.c:333
#7  0x0000003795302ded in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

Thread 7 (Thread 0x7f00e602f700 (LWP 3539)):
#0  0x00000037952f757d in poll () at ../sysdeps/unix/syscall-template.S:81
#1  0x0000003797649dbc in g_main_context_iterate (priority=2147483647, n_fds=1, fds=0x7f00d8003070, timeout=<optimized out>, context=0x7f00d8000990) at gmain.c:4103
#2  0x0000003797649dbc in g_main_context_iterate (context=context@entry=0x7f00d8000990, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at gmain.c:3803
#3  0x0000003797649ecc in g_main_context_iteration (context=0x7f00d8000990, may_block=may_block@entry=1) at gmain.c:3869
#4  0x0000003a660daeaf in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x7f00d80008c0, flags=...) at kernel/qeventdispatcher_glib.cpp:418
#5  0x0000003a66081eca in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (this=this@entry=0x7f00e602eca0, flags=..., flags@entry=...) at kernel/qeventloop.cpp:204
#6  0x0000003a65e9e434 in QThread::exec() (this=this@entry=0x1534b60) at thread/qthread.cpp:503
#7  0x0000003a730d99b5 in QQmlThreadPrivate::run() (this=0x1534b60) at /usr/src/debug/qtdeclarative-opensource-src-5.5.1/src/qml/qml/ftw/qqmlthread.cpp:141
#8  0x0000003a65ea33de in QThreadPrivate::start(void*) (arg=0x1534b60) at thread/qthread_unix.cpp:331
#9  0x0000003795a07555 in start_thread (arg=0x7f00e602f700) at pthread_create.c:333
#10 0x0000003795302ded in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

Thread 6 (Thread 0x7f00dcc9c700 (LWP 3556)):
#0  0x0000003795a0c540 in pthread_cond_wait@@GLIBC_2.3.2 () at ../sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
#1  0x00007f00dfa066da in radeon_drm_cs_emit_ioctl (mtx=0x1661120, cond=0x1661148) at ../../../../../include/c11/threads_posix.h:154
#2  0x00007f00dfa066da in radeon_drm_cs_emit_ioctl (sema=0x1661120) at ../../../../../src/gallium/auxiliary/os/os_thread.h:259
#3  0x00007f00dfa066da in radeon_drm_cs_emit_ioctl (param=param@entry=0x1660df0) at radeon_drm_winsys.c:636
#4  0x00007f00dfa05e37 in impl_thrd_routine (p=<optimized out>) at ../../../../../include/c11/threads_posix.h:87
#5  0x0000003795a07555 in start_thread (arg=0x7f00dcc9c700) at pthread_create.c:333
#6  0x0000003795302ded in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

Thread 5 (Thread 0x7f00d4a2c700 (LWP 3563)):
#0  0x00000037952f757d in poll () at ../sysdeps/unix/syscall-template.S:81
#1  0x0000003797649dbc in g_main_context_iterate (priority=2147483647, n_fds=1, fds=0x7f00d0002e70, timeout=<optimized out>, context=0x7f00d0000990) at gmain.c:4103
#2  0x0000003797649dbc in g_main_context_iterate (context=context@entry=0x7f00d0000990, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at gmain.c:3803
#3  0x0000003797649ecc in g_main_context_iteration (context=0x7f00d0000990, may_block=may_block@entry=1) at gmain.c:3869
#4  0x0000003a660daeaf in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x7f00d00008c0, flags=...) at kernel/qeventdispatcher_glib.cpp:418
#5  0x0000003a66081eca in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (this=this@entry=0x7f00d4a2bca0, flags=..., flags@entry=...) at kernel/qeventloop.cpp:204
#6  0x0000003a65e9e434 in QThread::exec() (this=this@entry=0x172a110) at thread/qthread.cpp:503
#7  0x0000003a730d99b5 in QQmlThreadPrivate::run() (this=0x172a110) at /usr/src/debug/qtdeclarative-opensource-src-5.5.1/src/qml/qml/ftw/qqmlthread.cpp:141
#8  0x0000003a65ea33de in QThreadPrivate::start(void*) (arg=0x172a110) at thread/qthread_unix.cpp:331
#9  0x0000003795a07555 in start_thread (arg=0x7f00d4a2c700) at pthread_create.c:333
#10 0x0000003795302ded in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

Thread 4 (Thread 0x7f00cf059700 (LWP 3573)):
#0  0x00000037952f757d in poll () at ../sysdeps/unix/syscall-template.S:81
#1  0x0000003797649dbc in g_main_context_iterate (priority=2147483647, n_fds=1, fds=0x7f00c8003070, timeout=<optimized out>, context=0x7f00c8000990) at gmain.c:4103
#2  0x0000003797649dbc in g_main_context_iterate (context=context@entry=0x7f00c8000990, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at gmain.c:3803
#3  0x0000003797649ecc in g_main_context_iteration (context=0x7f00c8000990, may_block=may_block@entry=1) at gmain.c:3869
#4  0x0000003a660daeaf in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x7f00c80008c0, flags=...) at kernel/qeventdispatcher_glib.cpp:418
#5  0x0000003a66081eca in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (this=this@entry=0x7f00cf058ca0, flags=..., flags@entry=...) at kernel/qeventloop.cpp:204
#6  0x0000003a65e9e434 in QThread::exec() (this=this@entry=0x17c83f0) at thread/qthread.cpp:503
#7  0x0000003a730d99b5 in QQmlThreadPrivate::run() (this=0x17c83f0) at /usr/src/debug/qtdeclarative-opensource-src-5.5.1/src/qml/qml/ftw/qqmlthread.cpp:141
#8  0x0000003a65ea33de in QThreadPrivate::start(void*) (arg=0x17c83f0) at thread/qthread_unix.cpp:331
#9  0x0000003795a07555 in start_thread (arg=0x7f00cf059700) at pthread_create.c:333
#10 0x0000003795302ded in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

Thread 3 (Thread 0x7f00cd6f4700 (LWP 3582)):
#0  0x0000003795a0c540 in pthread_cond_wait@@GLIBC_2.3.2 () at ../sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
#1  0x0000003a75f85514 in QTWTF::TCMalloc_PageHeap::scavengerThread() (this=0x3a7626de80) at /usr/src/debug/qtscript-opensource-src-5.5.1/src/3rdparty/javascriptcore/JavaScriptCore/wtf/FastMalloc.cpp:2359
#2  0x0000003a75f85559 in QTWTF::TCMalloc_PageHeap::runScavengerThread(void*) (context=<optimized out>) at /usr/src/debug/qtscript-opensource-src-5.5.1/src/3rdparty/javascriptcore/JavaScriptCore/wtf/FastMalloc.cpp:1464
#3  0x0000003795a07555 in start_thread (arg=0x7f00cd6f4700) at pthread_create.c:333
#4  0x0000003795302ded in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

Thread 2 (Thread 0x7f0046fbb700 (LWP 3748)):
#0  0x00000037952f757d in poll () at ../sysdeps/unix/syscall-template.S:81
#1  0x0000003797649dbc in g_main_context_iterate (priority=2147483647, n_fds=1, fds=0x7f0040003120, timeout=<optimized out>, context=0x7f0040000990) at gmain.c:4103
#2  0x0000003797649dbc in g_main_context_iterate (context=context@entry=0x7f0040000990, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at gmain.c:3803
#3  0x0000003797649ecc in g_main_context_iteration (context=0x7f0040000990, may_block=may_block@entry=1) at gmain.c:3869
#4  0x0000003a660daecb in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x7f00400008c0, flags=...) at kernel/qeventdispatcher_glib.cpp:420
#5  0x0000003a66081eca in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (this=this@entry=0x7f0046fbac50, flags=..., flags@entry=...) at kernel/qeventloop.cpp:204
#6  0x0000003a65e9e434 in QThread::exec() (this=this@entry=0x1af20d0) at thread/qthread.cpp:503
#7  0x0000003a73ef68d6 in QQuickPixmapReader::run() (this=0x1af20d0) at /usr/src/debug/qtdeclarative-opensource-src-5.5.1/src/quick/util/qquickpixmapcache.cpp:760
#8  0x0000003a65ea33de in QThreadPrivate::start(void*) (arg=0x1af20d0) at thread/qthread_unix.cpp:331
#9  0x0000003795a07555 in start_thread (arg=0x7f0046fbb700) at pthread_create.c:333
#10 0x0000003795302ded in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

Thread 1 (Thread 0x7f00f0173900 (LWP 3410)):
#0  0x00000037952f757d in poll () at ../sysdeps/unix/syscall-template.S:81
#1  0x0000003797649dbc in g_main_context_iterate (priority=2147483647, n_fds=9, fds=0x28758c0, timeout=<optimized out>, context=0x7f00e00016f0) at gmain.c:4103
#2  0x0000003797649dbc in g_main_context_iterate (context=context@entry=0x7f00e00016f0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at gmain.c:3803
#3  0x0000003797649ecc in g_main_context_iteration (context=0x7f00e00016f0, may_block=may_block@entry=1) at gmain.c:3869

#4  0x0000003a660daeaf in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x149a000, flags=...) at kernel/qeventdispatcher_glib.cpp:418
#5  0x0000003a66081eca in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (this=this@entry=0x7ffe9e02d2d0, flags=..., flags@entry=...) at kernel/qeventloop.cpp:204
#6  0x0000003a66089fac in QCoreApplication::exec() () at kernel/qcoreapplication.cpp:1229
#7  0x0000003a674e756c in QGuiApplication::exec() () at kernel/qguiapplication.cpp:1527
#8  0x0000003a68d50855 in QApplication::exec() () at kernel/qapplication.cpp:2976
#9  0x00000000004314da in main(int, char**) (argc=2, argv=<optimized out>) at ../../shell/main.cpp:181
Comment 1 DimanNe 2016-06-17 07:54:17 UTC
Same for me.
Bug report - https://bugs.launchpad.net/ubuntu/+source/plasma-workspace/+bug/1592668

Plasmashell thread
http://pastebin.com/CZtfCq7m

Xorg thread
http://pastebin.com/eAi9Ua9N
Comment 2 David Edmundson 2016-06-20 23:20:21 UTC
Was anything animating at the time of CPU spike?

A busy logo spinning for example.
Comment 3 DimanNe 2016-06-21 06:53:37 UTC
No. No animations, no blinking icons at the time of CPU spike.

By the way, I found workaround - I just cleared all kde settings (~/.kde, ~/.config/<many files>, ~/.local/share/<something else>) and the problem has gone. All is working perfectly now.
Comment 4 DimanNe 2016-07-29 09:09:32 UTC
I have recently encountered this problem again at my notebook.

System info:
plasmashell 5.5.5
OS: Kubuntu 16.04
Also, I have two (physical) monitors, and I noticed this problem began to arise after I detached/attached notebook from dock station or after hibernation

Backtraces, perf top:
I ran "top -H" and it said there are two threads on my system, which are eating CPU - plasmashell and Xorg, so here is "hottest" backtraces of these threads collected with
perf top -t 3136   -d 5 --call-graph dwarf (where 3136 is thread Id from top output)
Thread of plasmashell - http://pastebin.com/GPMkrWz8 (see text after RAW Paste Data)
Thread of Xorg - http://pastebin.com/ZH0x7F7i (see text after RAW Paste Data)
Comment 5 David Edmundson 2016-08-16 12:41:19 UTC
Backtrace shows it literally idling.

Thread 1 (Thread 0x7f00f0173900 (LWP 3410)):
#0 0x00000037952f757d in poll () at ../sysdeps/unix/syscall-template.S:81

At the point in that snap it is not using any CPU.

As for perf.top, it's the same as the rendering one, that I'm marking this as a dupe of. 

Sometimes between X, Mesa and Qt on some drivers it just starts drawing at infinite frames per second. It requires someone with the problem to spend some time putting in debug into all 3 parts at once to identify why. No log is going to help.

Apparently running with "QSG_RENDER_LOOP=threaded plasmashell" doesn't hit this issue, and is ultimately much faster and where we're heading towards anyway.

*** This bug has been marked as a duplicate of bug 356479 ***
Comment 6 DimanNe 2016-08-16 14:05:40 UTC
One more observation. 
I have encountered this bug twice recently, and I managed to workaround this bug by erasing all user-specific config files of KDE