Watching streaming video in Linux can be frustrating. The Flash web browser process (npviewer.bin) consumes a lot of processor time and it significantly raises the cpu temperature.
I could live with Flash’s piggishness if it delivered good video. Unfortunately, Flash seems to stutter when you use CPU “on demand” frequency scaling to cut power consumption. On my desktop PC with an AMD BE-2400 dual core, I couldn’t get Firefox in Ubuntu 9.04 (64-bit) to stream an ESPN3 sports broadcast without missing half the action.
I found a good solution in this blog article. The default ondemand scaling threshold in Ubuntu is 95. This means that if your CPU is running at less than full power, it won’t jump to the next speed until it’s 95% busy. By setting a lower threshold than 95, you can force the CPU to scale up under moderate usage. Changing the threshold to a lower value like 40 completely fixed my problem.
I took the commands documented in the article and made the
cputhresh script shown below. It pokes the proper values into the processor settings. I run it selectively when I need to watch a Flash broadcast. For example:
cputhresh setsets threshold to 40
cputhresh set NNsets threshold to NN, where NN is any number between 20 and 95
cputhresh resetresets threshold back to 95
!/bin/sh # cputhresh utility, adapted from: # http://allredb.wordpress.com/2009/05/07/speed-up-flash-and-firefox-in-ubuntu-jaunty-904 # Sets ondemand cpu threshold lower than default # in order to scale up CPU to fater speeds when running Flash under Firefox case "$1" in set) if [ "$2" ] && [ "$2" -ge 20 ] && [ "$2" -le 95 ]; then INDEX="$2" else INDEX=40 fi for CPU_THRESHOLD in /sys/devices/system/cpu/cpu*/cpufreq/ondemand/up_threshold do [ -f $CPU_THRESHOLD ] || continue echo -n $INDEX > $CPU_THRESHOLD cat $CPU_THRESHOLD done ;; reset) for CPU_THRESHOLD in /sys/devices/system/cpu/cpu*/cpufreq/ondemand/up_threshold do [ -f $CPU_THRESHOLD ] || continue echo -n 95 > $CPU_THRESHOLD cat $CPU_THRESHOLD done ;; show) for CPU_THRESHOLD in /sys/devices/system/cpu/cpu*/cpufreq/ondemand/up_threshold do [ -f $CPU_THRESHOLD ] || continue cat $CPU_THRESHOLD done ;; *) echo "Usage: $0 set|reset|show" >&2 exit 3 ;; esac
Instead of this script, you could also just switch to using the “performance” frequency scaling setting. However, the advantage of bumping the threshold is that you’re retaining the power saving advantages of ondemand frequency scaling.