3

Apparently, there is a comparable alternative to the 200-line kernel patch that involves no kernel upgrade.

It is presented here and discussed here.

However, I am not sure if webupd8's solution (under the section "Use it in Ubuntu") on Ubuntu actually works or not. In particular, one commenter on ./ is saying he's getting an error message. Could anyone post the "correct" method that actually works?

Suggested solution:

Based on the comments I've read so far, the following seems to work.

(1) In /etc/rc.local, add the following lines to above exit 0:

mkdir -p /dev/cgroup/cpu
mount -t cgroup cgroup /dev/cgroup/cpu -o cpu
mkdir -m 0777 /dev/cgroup/cpu/user
echo "/usr/local/sbin/cgroup_clean" > /dev/cgroup/cpu/release_agent

(2) Create a file named /usr/local/sbin/cgroup_clean with the following content:

#!/bin/sh
rmdir /dev/cgroup/cpu/$1

(3) In your ~/.bashrc, add:

if [ "$PS1" ] ; then 
    mkdir -m 0700 /dev/cgroup/cpu/user/$$
    echo $$ > /dev/cgroup/cpu/user/$$/tasks
    echo "1" > /dev/cgroup/cpu/user/$$/notify_on_release
fi

(4) (To make sure the execution bit is on) execute

sudo chmod +x /usr/local/sbin/cgroup_clean /etc/rc.local

(5) Reboot.

Gödel
  • 1,711
  • 2
  • 16
  • 30
  • Can you split this off into an answer and accept it? I started reading the accepted answer and got totally confused. – Jorge Castro Jan 09 '11 at 00:57

3 Answers3

2

The answer above should indeed fix the terminal error message. Gödel, I'm not sure that I understood your point. I'll try to explain the change:

Since the default value of notify_on_release at creation of other cgroups is the current value of their parents notify_on_release setting, setting the value of /dev/cgroup/cpu/user/notify_on_release to 1 would make sure that every child cgroup had notify_on_release enabled and thus the release_agent would be ran. Unfortunately, when the last child cgroup of "user" was removed (by the release_agent), that folder would also be removed, leading to the error messages reported. A simple workaround is to enable notify_on_release for each cgroup individually at creation, keeping the parents setting disabled.

Hope that was easy to follow!

Edit: I'd have posted this as a comment to the actual answer, though it's seems I don't have enough reputation to do so (yet).

Stefano Palazzo
  • 85,787
  • 45
  • 210
  • 227
ricardofcf
  • 256
  • 1
  • 4
  • Thanks for the clarification. On my system (Ubuntu Lucid with Kernel 2.6.32-25), the error message upon opening a gnome-terminal doesn't even appear, which led me to wonder if the proposed fix was necessary at all. – Gödel Nov 19 '10 at 05:17
1

I applied this patch using the automated script on Web UPD8 to an Asus eee 1000H. I noticed a considerable performance increase in Google chrome with Flash applications running. Videos were smoother and less frame dropping.Gnome UI also is snappier and windows redraw faster. Very cool. link text

0

Updated instructions from Ricardo Ferreira

Start by editing your rc.local file, running sudo -H gedit /etc/rc.local and add the following lines above exit 0:

mkdir -p /dev/cgroup/cpu
mount -t cgroup cgroup /dev/cgroup/cpu -o cpu
mkdir -m 0777 /dev/cgroup/cpu/user
echo "/usr/local/sbin/cgroup_clean" > /dev/cgroup/cpu/release_agent

Save and exit gedit. Now, make it executable:

sudo chmod +x /etc/rc.local

After doing this, edit the .bashrc file found in your home directory (gedit ~/.bashrc) and, at the end of this file, add:

 if [ "$PS1" ] ; then  
    mkdir -m 0700 /dev/cgroup/cpu/user/$$
    echo $$ > /dev/cgroup/cpu/user/$$/tasks
    echo "1" > /dev/cgroup/cpu/user/$$/notify_on_release 
 fi

One last thing. To make sure that cgroups are deleted whenever the last task leaves, run:

sudo -H gedit /usr/local/sbin/cgroup_clean

And copy-paste this:

#!/bin/sh
rmdir /dev/cgroup/cpu/$*

Once again, save the file, exit gedit and make it executable:

sudo chmod +x /usr/local/sbin/cgroup_clean

Done! Restart your computer to apply the changes.

Eliah Kagan
  • 116,445
  • 54
  • 318
  • 493
robin0800
  • 1,082
  • 8
  • 12
  • But this only takes out the `echo "1" > /dev/cgroup/cpu/user/$$/notify_on_release` line and puts it into .bashrc. Isn't this necessary only when you get an error when executing `bash .bashrc`? Depending on the kernel version you are using, you may or may not get the error. – Gödel Nov 19 '10 at 01:42