カーネルスケジューリングで高速化。ブラウザもフリーズしなくなる

高速化パッチの開発

2010年11月に発表されたパッチがLinux界で話題になりました。
一言で言えばLinuxが非常に高速になる画期的な方法、ということでした。
通常、次のカーネル更新を待つのですが、簡単な設定変更で同じ効果を得られる、というのが特徴です。

高速化紹介の動画では、ウィンドウ移動による再描画などの評価されています。 http://gihyo.jp/admin/clip/01/linux_dt/201011/18?skip

いずれこの修正はカーネルに取り込まれるので、それ以前のバージョンのカーネルで効果を発揮するでしょう。
とりあえず2.6.36以前では効果を発揮します。

ちょっと世間を検索すればRedhat、Ubuntu向けの情報がありますが、openSUSE向けの情報は多くありません。
でもちらほら見られるようになりました。

実際に設定してみると、確かに変わりました。
速くなったというより、遅れにくくなったといったところでしょうか。
デスクトップアプリケーションの起動について大きな違いは感じられませんが、やはりブラウザですね。
どうしても遅れがちだった動画の再生、タブの切り替えも速くなったようです。
それまではFirefoxでもGoogleChromeでも、youtubeを複数見ると反応が悪くなったりフリーズするといった症状がありましたが、そちらも解消されています。
快適ですね、フリーズしない生活は。

設定

カレントユーザの.bashrcファイルの末尾に下記のコマンドを追加します。

>cd ~
>vi .bashrc

入力コマンド
if [ "$PS1" ] ; then
 mkdir -p -m 0700 /dev/cgroup/cpu/user/$$ > /dev/null 2>&1
 echo $$ > /dev/cgroup/cpu/user/$$/tasks
 echo "1" > /dev/cgroup/cpu/user/$$/notify_on_release
fi



注意点は "$PS1" の前後にスペースを入れること。
スペースが足らないと、コンソールを起動するたびに「[$(ppwd \|)\u@\h:\w> ]:command not found」といったエラーが表示されます。

エラー画面


ちなみに$PS1は、コマンドプロンプトの環境変数です。

次はルートで/etc/init.d/boot.localを編集し、以下の行を末尾に追加します。
(他のディストリビューションではrc.localを編集してます)

>su
#cd /etc/init.d/
#vi boot.local

入力コマンド
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




次にルートで/usr/local/sbin/cgroup_cleanというファイルを作成し、以下のコマンドを入力します。

>su
#cd /usr/local/sbin/
#vi cgroup_clean

入力コマンド
#!/bin/sh

rmdir /dev/cgroup/cpu/$*

作成したファイルに実行権を与えます。
#chmod 755 /usr/local/sbin/cgroup_clean

そして自動実行のため、起動パラメータを設定します。
[YaST]-[システム]-[ブートローダ]を起動し、デフォルトの起動メニューを編集します。


そして起動パラメータに「cgroup_enable=memory」を記述します。



GUIを使うのは煩わしい、という人はもちろん直接/boot/grub/menu.lstを編集しても構いません。



最後に再起動します。これで高速化パッチを当てたのと同じ状態になるそうです。
操作感は定量的測定ができないので、デスクトップ撮影でもして比較するしかないですね。
 




prev.gif