M2M(Machine-to-Machine)からの大量トランザクションをインターネット経由で集め、クラウド上のマルチコアCPUが並列処理する――。こうしたコンピュータの利用が当たり前の時代を迎えている。データウエアハウスにおけるMPP(超並列プロセッシング)や、ビッグデータを対象にしたHadoopも、分散ファイルシステムをベースにした並列化である。今回は、クラウド時代の大前提ともいえる並列化について、前半はハードウエアでの注意点、後半はアプリケーションでの注意点を述べる。

ハード増強によるリソース競合に備える

 並列化の歴史は長い。一度に計算する項目が明確なゲーム機の画像処理やスーパーコンピュータのベクトル演算は、以前から並列化が進んでいた。そこで、そもそも並列化がどのように始まったかを考えてみよう。

 一般的に、コンピュータの処理はCPU処理とI/O処理の組み合せである。I/O待ち時間中にCPUを遊ばせておくのがもったいないので、他の処理をCPUに実行させようとしたところから多重制御が始まった。これは、並列化の始まりでもある。

 処理の多重度を上げていくと、複数の処理の間でCPUとI/Oの奪い合いが発生する。これがリソース競合の始まりだ。現在でも、ITアーキテクトが性能問題を解決するときに最初に目を付けるのがこのリソース競合だ。

 リソース競合の解決策の一つは、CPUコア数やディスク数を増やすことである。ただし、ディスクを増やしていくと、CPUとI/Oの間の伝送路(パス)がボトルネックになる。そこで、I/Oパスの分散を考慮する。さらに、ハードウエア的にはCPUやストレージシステム、ネットワークのキャッシュなどを駆使して、I/Oパスの占有時間を削減する。