2005/09/24

あれげメモ:Debianのカーネルパッケージをdistccで快適にコンパイル

なんとなくdistccでネットワーク分散コンパイルしたくなったので、いろいろ試行錯誤した結果をメモ。

用意するもの

  • 悪役1号。分散コンパイルクライアント。C3(Samuel)-800MHzの遅いPC。Debian sargeを放り込んでファイルサーバとして運用中。
  • 悪役2号。Athlon MP 2800+デュアルPC。Windows 2000 Professionalインストール済み。
  • Microsoft Virtual PC 2004 SP1。悪役2号上のゲストOSの方が悪役1号より速い(涙)。
  • Debian sarge。今回使うOS。悪役1号および悪役2号上で動作するVirtual PCゲストOS「vpc-Linux」にインストール済み。
  • kernel-source-2.6.8。当然。
  • kernel-package。言うまでもなく。
  • gcc他開発ツールいろいろ。あたりまえですが。
  • distcc。必要です。
  • Virtual PCのゲストOS「vpc-Linux」分散コンパイルサーバ。エミュの癖にC3-800MHzより速い。割り当てメモリ512MB。

分散コンパイルクライアント「悪役1号」での設定

distccをインストールしてdistccdを起動したら、環境設定をする。

コンパイラの差し替え

Debianの場合、PATH環境変数は標準で/usr/local/binが/usr/local/binより優先されるようになっている。したがって、gccの代わりにdistccを使うべく(今回はg++は使わないからgccのみ弄る)、以下のコマンドを実行する。


cd /usr/local/bin
ln -s ../../bin/distcc ./gcc
環境変数の設定

make-kpkgで並列コンパイルを行うために環境変数CONCURRENCY_LEVELを定義する。今回は4にしておいた。これでmake-kpkgから呼び出されるmakeは「-j4」オプション付きで実行され、最大4つのファイルを並列でコンパイルすることになる。分散コンパイルサーバのCPU使用率がスカスカだったので、もっと多くても良いような気がしないでもない。

export CONCURRENCY_LEVEL=4
分散コンパイルサーバの設定

次は「どのコンピュータで分散コンパイルを行うか」を設定する。具体的にはDISTCC_HOSTS環境変数を設定するだけ。DISTCC_HOSTSには分散コンパイルサーバをスペースで区切って並べるだけ。ちなみに優先順位は先に書いたサーバの方が高いので、速い(or 空いている)順に書き並べていくのが良いと思う。今回は本物PCより速い仮想PCがあるので、そっちを優先して使うことにする。

export DISTCC_HOSTS=vpc-Linux localhost

以上で分散コンパイルクライアントの設定はおしまい。

分散コンパイルサーバ「vpc-Linux」の設定

distccインストール時に行う設定については省略する。クライアント側とコンパイラその他のバージョンを合わせ、distccdを起動する。以上で設定は終了。

distccモニタの起動

再びクライアントに戻って、分散コンパイルモニタを実行する。Xが動くならdistccmon-gnome, 端末から見るのであればコンソール版のdistccmon-textを実行する。今回はsshでリモートからクライアントを操作しているのでコンソール版を使用することにして以下のコマンドを実行する。引数は秒単位の更新間隔なので、以下のコマンドの場合は1秒ごとに情報が更新される。

distccmon-text 1

お待ちかねの分散コンパイル

設定を確認した上でmake-kpkgを実行すればネットワーク分散コンパイルがさくさく進み、しばらくするとカーネルパッケージが出来上がり。

今後の課題

  • Virtual PCみたいなフルセットの仮想環境はオーバーヘッドがでかいので、XenとかcoLinux, QEMUあたりでオーバーヘッドを減らして高速化を図る。
  • ccacheと組み合わせてもっと速く。

2005/09/21

うーむ、予想はしていたものの。

私が現在使用中のLCDディスプレイ(Diamondcrysta RDT1711VM)にはステレオスピーカーが付いている。こいつを使うと年代物のスピーカー(Pioneer MPC-PS50)を取っ払えるのが魅力的だ。ご利益はスピーカーを取っ払えるだけでなく、馬鹿でかいACアダプタをケーブルの腐海から撤去できることなどいくつかあるのだが、試しに音を鳴らしてみて諦めた。これで音楽とDVDを鑑賞したりゲームで遊ぶのはチト辛い。

2005/09/19

とりあえず一度感電して死んどけ>馬鹿兄貴

最近俺の馬鹿兄貴が電気工作をやっている。今日は三連休なのでせっせと工作にいそしみ、なにやらおもちゃを完成させた。しかし素人が作ったものだから一撃目からまともに動くはずが無く、家庭用電源に接続するなりブレーカーを落としやがった。俺の愛機×2も道連れで電源断。

もう一度やったらヤツの財布から3万円抜いてAPCのUPS買い込んでやる。

2005/09/16

なんだってSeagate U10はこんなに遅い!

選挙に行って帰ってきたら、ファイルサーバのシステムディスクが飛んでました。手持ちのディスクの中で最古参だったし、最近剣呑な挙動を示していたのでだましだまし使っていたのですが、ついに決定的に昇天してしまったようです。さようなら、そして長い間ありがとうDPTA-371360。最初はWindowsで使っていたんだけど、他のディスクが壊れるたびにあっちこっちのPCに移し変えていたら、いつのまにかファイルサーバでLinuxなんぞインストールされてしまっていたよな。でも文句一つ言わずに酷使に耐えぬいてくれて俺は感謝の気持ちでいっぱいだ。叶うことならもっと長いこと使いたかったよ。

というのも、スペアに用意しておいたHDD「Seagate U10」が絶望的に遅いんです。転送モードをUltraATA Mode 4にしても8MB/sしか出ないんだから。起動が遅いリモートログインが遅いコマンドの実行が遅いエディタの保存が遅い、とにかくどえらくストレスがたまります。いっそRaptorでも買っちまおうか、36GBもあればブートドライブに使うには十分だしさとか不穏なことを考えてしまう今日この頃。

2005/09/04

今月のPCゲーム

システムソフト・アルファーの「ホワイトダイアモンド2」を買ってまいりました。前作「ホワイトダイアモンド」は処分品セールで叩き売られていたのを買ってきたわけなのですが、今回は処分品セールを待たずに購入してしまいました。邪道だ(どこがやねん)。

しいて購入の動機を述べるとすれば去年「復活の地」を全力で読み倒したのと、今年に入って「パンプキン・シザーズ」なぞ読み始めたことで「災害復興」ものに対する関心が高まっていたことでしょうか。

全部片付けてからちゃんとした感想を書きたいのですが、ゲームシステムについて一言。……CD-DAで音楽再生は良いんだけど、せめてもう少し各曲を長尺にできなかったんですかね。Windowsの仕様上CD-DAトラックの頭出しをしている間はCD再生を制御しているスレッド全体?が止まってしまうんですが、このゲームときたら短いBGMをひっきりなしにリピートしているためにゲーム全体が高頻度で操作を受け付けなくなり、応答性がものすごく悪いんですよ。キャラクターボイスにOgg/Vorbis使うなら、音楽もOgg/Vorbisにしちまえば良かろうと思うんですけど。まさかVorbisのデコードに食われるマシンパワーを心配しているわけでもないでしょうに……。

もっとも、単に起動ディスクチェックのためだけにCD-ROMドライブを占有するのは気が引けるから(ゲームディスクは"著作権保護"技術が仕込んである)大義名分を立たせるためのCD-DAなのかもしれませんけど。

あとは操作系がいまいち直感的ではない(2階に登るのに、階段のどこをクリックしたら良いのか分からず30分悩んだ)とか、メッセージフラグの管理が甘いのも困ったものだとは思います。