Sunday 3 January 2010

Fix: Firefox 3 runs slowly keeps pausing and not responding on Ubuntu 9.10 Dual core

When I installed Ubuntu 9.10 "Karmic" on my new HP Dual-core computer, I found that Firefox was having a lot of issues. It would startup alright, and load pages pretty fast. But mainly whenever I tried to open a new tab, or had a lot of tabs open, it would randomly stop responding for a few seconds at a time. Since I have compiz enabled, Firefox would "grey out" and stop responding to mouse clicks. CPU usage never exceeded 50% of both cores though.

I trued using the CPU Frequency Scaler applet on the panel to increase the CPU speed with no effect. Also, reducing the threshold at which the CPU frequency is raised had no effect either. It turns out that Firefox just doesn't like running across multiple CPUs for some reason. The solution was to restrict Firefox to run on a single core.

This can be accomplished using the linux utility "taskset". The command I used is shown below (run as root):

taskset -c -p 1 `pidof firefox`

An explanation:
  • The -c says to use a zero-based number to identify cores (Core 1 is "0", Core 2 is "1", etc). The default is to use a bitmask (more advanced).
  • The -p says to reuse the existing pid, and not start a new task.
  • Then we specify the core (Core 2 in this case, we could separate them with commas such as "0,1" if we wanted both cores to be used). 
  • Then we have another command, between backticks (` not ') that finds us the pid (Process ID) of the running Firefox.

This command has to be run every time Firefox starts. I'm looking for a way to change this automatically when Firefox is run - perhaps by changing the menu entry? Any suggestions are welcome!

No comments: