Archive for the ‘kernel’ tag
マルチプロセッサー環境でKernelをビルドする
最近Linuxカーネルに傾倒しています。
いろいろ調べているうちにカーネルを何通りかでビルドしてテストすることになりました。カーネルのビルドは一度やってしまえばなんてことはない作業なのですが、調べていると何かと知らなかったことがわんさか出てきます。今回は手短に最近のマルチプロセッサ環境でのカーネルビルドHow Toをまとめてみます。
・カーネルソースをダウンロードする。
当然kernel.orgにあるわけですが、我々日本人は国際回線の帯域幅節約に貢献すべく日本国内のミラーサイトから手に入れるのがよいでしょう。僕はいつも理研さんに御世話になっています。
理研のミラーサイト
・展開
# tar xvfj linux-2.6.22.tar.bz2 # cd linux-2.6.22
・設定
ここはカーネルのバイナリを自分の環境に最適化させる上でもっとも重要な手順です。とはいえここに懲りだすと日が暮れるので今回はデフォルト設定を適用します。
カーネルビルドの設定は展開したトップディレクトリに.configとして用意します。当然自分でガリガリ書くのではなく、用意されている便利なツールを利用します。デフォルト設定の設定ファイル(.config)は以下のようにして作成します。
# make defconfig
ちなみにこの設定はLinusのメイン開発マシンとほぼ同じ設定だそうです。ほんまかな。
・ビルド
さて、カーネルをコンパイルしていきます。通常は以下のようにmakeを実行するだけでOKです。
# make
ここで実はなかなかに便利、というかマルチプロセッサー・オーナーにはもはや必須なオプションがあります。
# make -j2
この-jオプションはコンパイルのスレッド数を指定できるもので、例えばCore 2 Quadが搭載されているマシンであれば、-j4と指定するとマッハでコンパイルできるのではないかと思います。
実際にCore 2 Duoのプロセッサーが搭載されているThinkpad T60でビルド時間を計測してみました。
[-jオプションなし]
real 5m22.791s user 4m56.123s sys 0m23.153s
[-j2]
real 3m24.712s user 5m0.723s sys 0m24.834s
[-j4]
real 3m20.628s user 5m3.811s sys 0m25.606s
-jオプション有と無しでは1.7倍程度の差が出ました。もう-jオプション無しではビルドできません。ちなみにとある書物には「プロセッサ数 x 2」の値を-jオプションに与えるのがよいとされていましたが今回は-j2と-j4ではそれほど差異はありませんでした。
・インストール
あとは以下のようにすれば新しいカーネルのインストールは完了です。
# make modules_install # make install
上記手順でインストールを行うにはmkinitrdが必要です。最近のディストリビューションにはほぼインストールされていると思います。上記コマンドを実行するとビルドしたカーネルを/bootにコピーし、grubのmenu.lstの追記やinitrdの作成も同時に行ってくれます。何て便利な世の中なのでしょうか。ただ、menu.lstの設定でデフォルトのカーネルにはなっていないと思いますので、menu.lstの「default」の値を編集するか、起動時にメニュー画面で今作成したカーネルを指定して下さい。