I recently installed Fedora 16 on my laptop and it was the first time I had installed a Linux distribution as my primary operating system on any of my personal computers. I have a few years of experience working with Linux, however, up until recently, all my interactions with Linux have been with either: remote web servers, through command-line SSH tunnels; virtual machines hosted on Windows-based computers; or work/school PC's that I didn't personally manage.
After installing Fedora 16 on my ASUS N61JQ laptop, I noticed that my mouse would frequently freeze up for a second or so at seemingly-random intervals - it was very frustrating to say the least. To troubleshoot, I opened up the System Monitor utility, clicked on the Processes tab, and configured the application to show All Processes. While I would go about my normal activities on my computer, I had the System Monitor opened up and off to the side of my screen so I could identify which processes were taking up the highest percentage of CPU resources. I soon found a direct association between my mouse freezing up and a few "kworker" processes spiking CPU usage. After spending many hours troubleshooting this issue, I found that the following hack fixes the issue:
# cd /etc/init.d # echo -e '#!/bin/bash\n\necho N> /sys/module/drm_kms_helper/parameters/poll' > drm-kms-helper-poll-n # chmod +x drm-kms-helper-poll-n # ln -s /etc/init.d/drm-kms-helper-poll-n /etc/rc.d/rc5.d/S50drm-kms-helper-poll-n
The above series of commands need to be executed as root (denoted by the starting # symbol). These commands create a start up script that changes the value of the /sys/module/drm_kms_helper/parameters/poll file from Y to N. The drm_kms_helper has something to do with the open source ATI graphics card driver that is packaged with Fedora as an alternative to the poorly supported and maintained official ATI driver provided by AMD. To note, my laptop has an ATI HD 5730 graphics card. I have not yet looked into why this fixes the kworker high CPU usage problem I was experiencing, however, after many hours of troubleshooting and searching Google, I found similar solutions to mine to be the de-facto solution that is working for others too.
Here is a list of some useful links that helped me in discovering this solution:
I hope others find this hack to work for them as well. Feel free to leave a comment if this worked for you as well, or if you know of an alternative solution to address the problem.