2012/04/28

Ubuntu 12.04 LTSでlowlatencyカーネルを導入してみる

Ubuntu 12.04 LTSにアップグレード必要があるかどうかは、おそらく多くの人にとって様子をみるべきかなと感じている今日このごろです。

とはいえ、新規にインストールするなら、2013年04月までサポートされるDesktop版Ubuntu 10.04 LTSをインストールする理由はもはやないでしょう。

WindowsというよりもMacのように、バージョンの違いは劇的な変化はもたらしませんが、確実にいくつかの気がつきにくい利点はあると思います。

今回はlowlatencyカーネルを導入してみることにしました。 NVIDIAのGPU用にnvidia-currentを導入しているため、それとの組み合せでおこった問題についてまとめています。

apt-getからのカーネルの導入

lowlatancyカーネルの導入自体は、簡単に終ります。 $ apt-cache search lowlatencyで導入するべきパッケージの候補がいくつか出てきますが、 バージョンアップを適宜行なうためには具体的なバージョンが書かれていないパッケージを導入しましょう。

バージョン番号を現す3.2.0-23等の数字付きパッケージを省くと、導入する候補は次のようになりました。

  • linux-image-lowlatency - lowlatency Linux kernel image
  • linux-lowlatency - Complete lowlatency Linux kernel
  • linux-image-lowlatency-pae - lowlatency Linux kernel image
  • linux-lowlatency-pae - Complete lowlatency Linux kernel

PAEパッケージはx86_64環境では使えないので、実質的にlinux-image-lowlatencyかlinux-lowlatencyかのいずれかです。

カーネルモジュールなどをコンパイルするために/usr/src以下にヘッダーファイルも必要なので、linux-image-lowlatencyとlinux-headers-lowlatencyの両方を導入するのかと思いきや、linux-lowlatencyパッケージがあるので、これを導入しましょう。

 $ sudo apt-get install linux-lowlatency 

導入自体は、これで終りですが、手元の環境ではリブートしてもlowlatencyカーネルでは起動してくれませんでした。

GRUBのカーネル起動順序の変更

リブートの起動時に10秒ほど待ち時間があるはずなので、GRUBの画面を表示させてlowlatencyカーネルを選択して問題なく起動することを確認しましょう。

ここでNVIDIAのGPUカード周りで問題があったのですが、それは後で説明する事にして、先にGRUBの設定変更についてまとめておきます。

GRUB2が導入されている場合には、/etc/default/grubを変更した後に $ sudo update-grub コマンドで、/boot/grub以下の設定ファイル(grub.cfg)に反映させます。

ここで変更したのは、GRUB_DEFAULTの行です。

/etc/default/grubファイルの先頭部分

GRUB_DEFAULT=2
GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="rootfstype=ext4 rootflags=data=writeback,relatime quiet splash"
GRUB_CMDLINE_LINUX=""

手元の環境では最新のカーネルは3.2.0-24で、lowlatencyカーネルのバージョンは3.2.0-23でした。

このため後から導入したにも関わらず、/boot/grub/grub.cfgの先頭に設定されているのは3.2.0-24カーネルの方で、lowlatencyは上から3番目に設定が書かれています。

GRUB_DEFAULTのパラメータは0から始まるので、3番目の設定で自動的に起動するために=2を設定しました。

この状態でgrub.cfgを再作成すると、自動的にlowlatencyカーネルで起動するようになります。

 $ sudo update-grub 

NVIDIAのビデオカードが認識されない問題

起動時にはデフォルトのVGAデバイスでlightdmが起動してしまったので気がつかなかったのですが、後からlowlatencyカーネルを導入した時にはカーネルモジュールの再作成はされませんでした。

一度lowlatencyパッケージで起動した後で、次のようにnvidia-currentパッケージを再構成すると良いでしょう。

 $ sudo dpkg-reconfigure nvidia-current 

これでlightdmを再起動( $ sudo /etc/init.d/lightdm restart)するか、再起動すれば動き始めるはずです。

まとめ

lowlatencyパッケージは、動画、音声関連のアプリケーションパッケージをまとめているUbuntu Studioグループが作成しています。

はたしてlowlatencyパッケージが必要なのかどうかは、疑問に思うところもあるのですが、とりあえず使わないと善し悪しが分からないので、しばらく使ってみる事にしました。

アプリケーション内部でnice値を適切に設定しないと、適切なリアルタイム性が得られないという指摘があります。 通常のデスクトップアプリケーションで果してレスポンスが良くなるか、lowlatencyカネールを使えば良いという考え方ではまずいかもしれない事は認識しておくべきだと思います。

Ubuntu 10.04 LTSで使われていた2.6.32パッケージから3.2の間で多くの変更がカーネルに行なわれています。

2.6.37前後ではext4,xfsファイルシステムに関連した修正が多く行なわれていますし、SMP環境ではいまいちだったreiserfsにもワークアラウンドが実装されています。

プロセスの応答性については常にスケジューラーの見直しが行なわれているところでもあるので、普通に便利に使えれば良いという方々にはノーマルなカーネルをまずはお勧めします。

個人的にはUbuntu 10.04 LTSを使っている方は、アップグレード作業の懸念さえなければ、12.04 LTSに以降した方が幸せになれるだろうと思います。 ああ、Gnome周りはログイン時にXfceを選択するとか、別のWindowManagerを選択するとか、ちょっとした事はあるかもしれませんが、使い勝手に大きな変化はなく、最新のパッケージが使える事でいろいろ便利になるでしょう。

0 件のコメント: