Sergey Senozhatsky
2012-02-12 12:42:56 UTC
Hello Arjan,
I've merged my branch with fenrus75/powertop.git and my powertop build
began to periodically hang with high CPU usage.
The consuming function turned out to be timer::is_deferred().
15078 root 20 0 198m 152m 12m R 94 (%CPU) 4.0 1:11.25 powertop
...
0x00007fa12b5e9600 in __read_nocancel () from /lib/libc.so.6
(gdb) bt
#0 0x00007fa12b5e9600 in __read_nocancel () from /lib/libc.so.6
#1 0x00007fa12b5869c8 in _IO_new_file_underflow () from /lib/libc.so.6
#2 0x00007fa12b587a1e in _IO_default_uflow_internal () from /lib/libc.so.6
#3 0x00007fa12b57c42a in _IO_getline_info_internal () from /lib/libc.so.6
#4 0x00007fa12b57b27b in fgets () from /lib/libc.so.6
#5 0x0000000000423a74 in fgets (__stream=0xc29da20, __n=4096, __s=0x7fff8847eb30 "196609D, 11372 kworker/3:1 schedule_delayed_work_on
+(delayed_work_timer_fn)\n") at /usr/include/bits/stdio2.h:255
#6 timer::is_deferred (this=0xc296b70) at process/timer.cpp:155
#7 0x000000000041fc5c in perf_process_bundle::handle_trace_point (this=<optimized out>, type=<optimized out>, trace=0xbe38ff8, cpu=1,
+time=22986802201894, flags=20 '\024') at process/do_process.cpp:379
#8 0x000000000041c60e in perf_bundle::process (this=0x83c4a70) at perf/perf_bundle.cpp:245
#9 0x0000000000420016 in process_process_data () at process/do_process.cpp:997
#10 0x000000000040a4aa in one_measurement (seconds=<optimized out>) at main.cpp:205
#11 0x0000000000405cab in main (argc=1, argv=0x7fff88481dd8) at main.cpp:422
Below are 3 patches to make powertop much more responsive just as it's used to be.
Of course, is_deferred() affects performance, however, its impact is minimized.
-ss
I've merged my branch with fenrus75/powertop.git and my powertop build
began to periodically hang with high CPU usage.
The consuming function turned out to be timer::is_deferred().
15078 root 20 0 198m 152m 12m R 94 (%CPU) 4.0 1:11.25 powertop
...
0x00007fa12b5e9600 in __read_nocancel () from /lib/libc.so.6
(gdb) bt
#0 0x00007fa12b5e9600 in __read_nocancel () from /lib/libc.so.6
#1 0x00007fa12b5869c8 in _IO_new_file_underflow () from /lib/libc.so.6
#2 0x00007fa12b587a1e in _IO_default_uflow_internal () from /lib/libc.so.6
#3 0x00007fa12b57c42a in _IO_getline_info_internal () from /lib/libc.so.6
#4 0x00007fa12b57b27b in fgets () from /lib/libc.so.6
#5 0x0000000000423a74 in fgets (__stream=0xc29da20, __n=4096, __s=0x7fff8847eb30 "196609D, 11372 kworker/3:1 schedule_delayed_work_on
+(delayed_work_timer_fn)\n") at /usr/include/bits/stdio2.h:255
#6 timer::is_deferred (this=0xc296b70) at process/timer.cpp:155
#7 0x000000000041fc5c in perf_process_bundle::handle_trace_point (this=<optimized out>, type=<optimized out>, trace=0xbe38ff8, cpu=1,
+time=22986802201894, flags=20 '\024') at process/do_process.cpp:379
#8 0x000000000041c60e in perf_bundle::process (this=0x83c4a70) at perf/perf_bundle.cpp:245
#9 0x0000000000420016 in process_process_data () at process/do_process.cpp:997
#10 0x000000000040a4aa in one_measurement (seconds=<optimized out>) at main.cpp:205
#11 0x0000000000405cab in main (argc=1, argv=0x7fff88481dd8) at main.cpp:422
Below are 3 patches to make powertop much more responsive just as it's used to be.
Of course, is_deferred() affects performance, however, its impact is minimized.
-ss