User Tools

Site Tools


マシンへの負荷を考慮したプログラミング法

マシンへの負荷を考慮したプログラミング法

PCクラスタの記憶領域特性

 科学計算用PCクラスタ環境では、一般的に長期記憶領域とユーザ管理を共通にするために、NISとNFSを導入する。これにより、共通のログイン名とパスワードで、どのコンピュータにログインしても同一のホームが使えるという利点がある。

 通常のPC利用方法ではこの仕組みは管理を容易にした上で同一環境を複数のコンピュータにおいて実現できるので非常に効率がいいが、一方で科学計算用途のように計算及び記憶資源を酷使する環境では特有のボトルネックが生じる。バイオインフォマティックスの研究においてはこの環境の仕組み及び特性を十分に理解した上でPCクラスタを利用することが不可欠であり、効率の上でも有意義である。

 NFSによる共用ファイルサーバを持つPCクラスタで考慮すべきは、その長期記憶領域の速さとアクセスの集中である。現在先端生命科学研究所のマシン環境ではNFSにより/home と/pub が繋がっている。これらは個々のコンピュータのローカルなHDではなく、LANにより繋がれたネットワーク上のRAID上の記憶領域である。上位レベルのRAIDでは分散書き込みなどにより、通常のHDよりも速くデータが書き込まれる。しかし、このRAIDがネットワーク上に存在していることにより、一般的にはNFSの書き込みはローカルのHDよりも遅い。ネットワークを介す場合、1000Mbps、もしくは100Mbpsのネットワークケーブルによってデータは転送されるが、中継するHUBはそれぞれの最大転送速度未満の性能しかでない。一方、HDの書き込みは、ATA133の場合転送速度は133MBpsである。ネットワークのMbpsはメガ・ビット・パー・セコンド、ATAのMBpsはメガ・バイト・パー・セコンドであるので、ATA133と100BaseのLANを比較すれば、ATA133が十倍以上速い。よって大量のデータを扱ったり、大量のテンポラリーファイルを扱う場合はNFSではローカルHDに比べて速度の面で圧倒的に不利になる。

 また、NFSの場合通常一つのRAIDで同一LAN内の全ての共有ホームを保存するので、多数のコンピュータが同時に計算をした場合、保存領域としてはアクセスが全て一つのRAIDに集中することになる。これはRAIDの処理能力の低下によって速度の低下に繋がるばかりでなく、高負荷をかけることによるRAIDディスクの破損、そして最悪の場合ファイルサーバの故障に繋がる可能性がある。

長期記憶と短期記憶

 当然ながら、速度の差は長期記憶と短期記憶でより明確になる。例えばDDR266(PC2100)RAMのデータ転送速度は2.1GBpsである。よって、HDにアクセスをするよりはRAMにアクセスした方が遥かに速い。よって、テンポラリファイルを作成してプログラムとプログラムを繋ぐよりも、単一プログラム内で変数内のデータ受け渡しをした方が遥かに速い。

プログラミング・ストラテジー

 以上の仕組みから、プログラミングのストラテジーは以下のようになる。  *容量が許す限りデータ受け渡しはRAMを使う。プログラムを分けずに単一プログラム内でデータを受け渡す。  *テンポラリファイルなど、計算の途中で使うデータは /tmp などローカルHDを使用し、NFSは使わない。  

 例えば大量のBLAST結果を保存してパースするのではなく、

@results = `blastall -m8`; 

のように結果をメモリに取り込む、もしくは/tmp に出力して最後に消去、必要であれば最後に/homeにコピー、などとするのが望ましい。  このように記憶領域を考慮したプログラミングを行うことは効率・速度の面で有意義であるだけでなく、共用資源であるNFSに負荷をかけないという点で望ましい。

マシンへの負荷を考慮したプログラミング法.txt · Last modified: 2014/01/18 07:44 (external edit)