VariantシンボリックリンクによるメモリFSの活用、CPUセットアロケータの適用、SGEラッパでリソースの割り当て
Brooks Davis氏が提供しているクラスタでは小さいジョブから大きなジョブまでさまざまなレンジのジョブに適切なハンドリングを提供する必要がある。こうした観点から、リソースパーティショニングとVPS技術が目的とする要求を満たす技術に近いポジションにある。
そこで同氏らが行き着いた結論が次の方法だ。
- SGE (Sun Grid Engine) sge_shepherdにジョブ実行環境を制限するためのラッパスクリプトをかぶせる
- 一時ディレクトリをノードごとにメモリファイルシステムとして作成する
- CPUセットアロケータによるプロセッサ割り当てを実施する
ラッパスクリプトはRubyで開発されている。実に単純な方法だが、リソースを制限しつつ大小規模のジョブに対応し、しかも処理速度を向上できる方法として興味深いアプローチだ。ラッパであるためSGEのアップグレードへの対応も素早く実現できる。
バックエンドの一時ディレクトリはTMPDIR環境変数を設定することで対処できるが、TMPDIR環境変数を使っていないアプリケーションには効果がない。そこでBrooks Davis氏はVariantシンボリックリンクを使ってメモリファイルシステムとして確保した一時ディレクトリを使う方法を採用している。ただし、FreeBSDにはVariantシンボリックリンクの機能はない。Variantシンボリックリンクは必要と考えるケースとそうでないケースがあり、実装しているOSとそうでないOSがある。FreeBSDは同機能を実装していない。
FreeBSDから派生したDragonFly BSDではVariantシンボリックリンクが実装されている。Brooks Davis氏はDragonFly BSDからVariantシンボリックリンクの実装を持ってきてFreeBSDに適用させこの問題に対処したという。ただしそのままでは適用できないため移植する段階でだいぶ変更を加えたようだ。