非同期ディスク入出力のパフォーマンスのチューニング
アプリケーションで同期入出力操作を行う場合、入出力が完了するのを待たなければなりません。 これに対して、非同期通信 I/O 操作はバックグラウンドで実行され、ユーザー・アプリケーションをブロックしません。 入出力操作とアプリケーション処理が同時に実行できるので、パフォーマンスが向上します。 データベースやファイル・サーバーなどの多くのアプリケーションでは、処理と入出力をオーバーラップさせる能力を利用します。
アプリケーションは、aio_read()、aio_write()、または lio_listio() のサブルーチン (またはそれらの 64 ビットのもの) を使用して、非同期ディスク入出力を実行することができます。 制御は、要求がキューに入れられるとすぐに、サブルーチンからアプリケーションに戻ります。 すると、アプリケーションは、ディスク・オペレーションが実行されている間に処理を継続することができます。
非同期通信 I/O を管理するために、それぞれの非同期通信 I/O 要求には、 アプリケーションのアドレス・スペースに対応する制御ブロックがあります。 この制御ブロックには、要求の制御と状況の情報が含まれています。 これは、入出力操作が完了したときに再び使用できます。
ユーザー・アプリケーションは、次の方法で、入出力操作が完了したときの通知方法を決めることができます。
- アプリケーションが、入出力操作の状況をポーリングする。
- システムが、入出力操作が行われたときに、非同期にアプリケーションに通知する。
- アプリケーションが、入出力操作が完了するまでブロックする。
各入出力は単一のカーネル・プロセスつまり kproc によって処理され、kproc は、一般にその入出力が完了するまで、キューからの他の要求を処理することはできません。 minservers チューナブルのデフォルト値は 3 で、maxservers のチューナブルのデフォルト値は 30 です。 maxservers 値は、プロセッサーごとの非同期入出力 kproc の数です。 AIX® システムで実行される非同期入出力 kprocs の最大数を取得するには、 maxservers 値に現在実行中のプロセッサーの数を乗算します。
すべての AIO チューナブルには、 ioo コマンドで表示できる現行値、デフォルト値、最小値、および最大値があります。 現行値のみが、ioo コマンドを使用して変更できます。 他の 3 つの値は固定されており、チューナブルの境界をユーザーに知らせるために提示されるものです。 チューナブルの現行値はいつでも変更でき、オペレーティング・システムを再始動しても持続させることができます。 めったに非同期通信 I/O を使用するアプリケーションを実行しないシステムでは、通常デフォルトで十分です。
minservers と maxservers は両方ともプロセッサーごとのチューナブルですので注意してください。 これらのチューナブルは両方とも動的ですが、値を変更してもシステム内の使用可能サーバーの数が同期して変更されることはありません。 minservers の値が増加すると、並行入出力要求の数に直接比例して実際のサーバーの数が増加します。 新規の minservers 値に達すると、その値が新規フロアになります。 逆に、minservers が削減されると、非アクティビティーのためにサーバーが終了するので、使用可能サーバーの数はそのレベルまで自然に減少します。 非同期通信 I/O 要求の数が多い場合、maxservers を予測される同時入出力の数まで増やします。 AIO カーネル拡張は必要に応じて追加のサーバーを生成するので、minservers パラメーターは通常デフォルト値のままにしておくことをお勧めします。
maxservers と minservers の設定は、この場合には影響がありません。AIO サーバーのプロセッサーの使用率を調べて、使用率がすべてのサーバーに均等に分割されている場合は、サーバーがすべて使用されていることを意味するので、この場合はサーバーの増加を検討することができます。 AIO サーバーを名前ごとに見るには、pstat -a コマンドを実行します。 ps -k コマンドを実行して、AIO サーバーを kprocという名前で表示します。
非同期ディスク入出力のパフォーマンスが重要で、要求の量が多いが、同時入出力のおおよその数が分からない環境では、
maxservers を少なくとも 10*(非同期にアクセスされるディスクの数) に設定することをお勧めします。
minservers または maxservers チューナブルに対する変更を有効にするためにシステムを再始動する必要はありません。 minservers チューナブル値は、平均ワークロードで最適のパフォーマンスを得られるレベルに設定する必要があります。minservers チューナブルの値が maxservers チューナブルの値を超えることはできません。
非同期入出力チューニング値について詳しくは、 非同期入出力のチューナブル値の変更を参照してください。