Update: After running the patched thinkpad-keys for >24 hours, CPU time
is a meagre 1 sec, just a tad better than the >25 minutes it used to
spend a day...
This just seemed to good to be true. So, to verify the correctness of
the patch, here's some background:
The tpb source (from which thinkpad-keys is inspired) says the following:
/* Read only the interesting bytes from nvram to reduce the CPU consupmtion
of tpb */
/* The kernel nvram driver reads byte-by-byte from nvram,
so just reading interesting bytes reduces the amount of inb() calls */
...So I went to the kernel and checked drivers/char/nvram.c, and found:
* Each lseek() calls lock/unlock_kernel()
* Each read() calls spin_lock/unlock_irq (which is expensive)
* Each read() calls nvram_check_checksum (!).
To check the nvram checksum on a PC platform means to inb 30+2 times...
So, instead of saving 6 inb operations as intended, the current grok_nvram
function does (32+1)*4=132 instead of (32+10)=42, spending 90 more than it
should (in addition to any other overhead in calling lseek+read 6 times too
many).
--
thinkpad-keys on ThinkPad X60* uses a large amount of CPU
https://bugs.launchpad.net/bugs/45404
You received this bug notification because you are a member of Ubuntu
Bugs, which is a direct subscriber.
--
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs