ablog

不器用で落着きのない技術者のメモ

CPUバウンドとI/Oバウンド

P.41

一般的に負荷は大きく二つに分類されます。

  • CPU負荷
  • I/O負荷

たとえば、大規模な科学計算を行うプログラムがあったとして、そのプログラムはディスクとの入出力(Input/Output、I/O)は行わないが、処理が完了するまでに相当の時間を要するとします。「計算をする」ということからも想像がつくとおり、このプログラムの処理速度はCPUの計算速度に依存しています。これがCPUに負荷をかけるプログラムです。「CPUバウンドなプログラム」とも呼ばれます。
一方、ディスクに保存された大量のデータから任意のドキュメントを探し出す検索プログラムがあったとします。この検索プログラムの処理速度はCPUではなく、ディスクの読みだし速度、つまり入出力に依存するでしょう。ディスクが速ければ速いほど、検索にかかる時間は短くなります。I/Oに負荷をかける種類のプログラムということで、「I/Oバウンドなプログラム」と呼ばれます。
一般に、APサーバはDBから取得したデータを加工してクライアントに渡す処理を行います。その過程で大規模なI/Oを発生させることは稀です。よて多くの場合、APサーバはCPUバウンドなサーバであるといえます。
一方、Webアプリケーションを構成するもう一つの要素システムであるDBサーバは、データをディスクから検索するのが主な仕事で、とくにデータが大規模になればなるほど、CPUでの計算時間よりもI/Oに対するインパクトが大きくなるI/Oバウンドなサーバです。同じサーバでも、負荷の種類が違えばその特性は大きく変わってきます。

多くのソフトウェア・アプリケーションのパフォーマンスは、本質的にディスクI/Oによって制限されます。CPUタイムの大部分をI/Oアクティビティが完了するまでの待機に使用するアプリケーションはI/Oバウンドと呼ばれます。

Oracleは、適切に作成されたアプリケーションのパフォーマンスが、I/Oで制限されないように設計されています。I/Oシステムが最大限またはそれに近い状態で動作しており、許容時間内にI/Oリクエストに対応できない場合は、I/Oのチューニングを行うと、アプリケーションのパフォーマンスを向上できます。ただし、アプリケーションがI/Oバウンドではない場合(たとえば、CPUが制限要因である場合)、I/Oをチューニングしてもパフォーマンスを改善できません。

I/O構成および設計

In computer science, I/O bound refers to a condition in which the time it takes to complete a computation is determined principally by the period spent waiting for input/output operations to be completed. This is the opposite of a task being CPU bound. This circumstance arises when the rate at which data is requested is slower than the rate it is consumed or, in other words, more time is spent requesting data than processing it.


boundの意味・使い方 - 英和辞典 Weblio辞書
bound は「縛られた、束縛された」という意味の形容詞なんですね。