IBM i 待機アカウンティングの基礎

待機アカウンティングは IBM® i オペレーティング・システムに組み込まれている特許取得済みテクノロジーであり、スレッドまたはタスクが何もしていないように見えるときにそれが何をしているかをユーザーが分かるようにします。

スレッドまたはタスクは、実行中でなければ待機しています。 待機アカウンティング (IBM i だけにしかない概念) は、パフォーマンスの詳細分析のための非常に強力な機能です。ここでは、待機の概念とスレッドが待機する理由、およびパフォーマンス上の問題をトラブルシューティングする場合や単にアプリケーションのパフォーマンスを向上させる場合に待機アカウンティングを使用する方法について焦点を当てていきます。

ジョブは、作業を行うための基本的なメカニズムです。 どのジョブも少なくとも 1 つのスレッドを持ち、複数のスレッドを持つ場合もあります。 1 つ 1 つのスレッドがライセンス内部コード (LIC) タスクによって表されますが、IBM i のスレッド・レベルの構造がなくてもタスクは存在します。LIC タスクは通常、IBM i Performance Tools またはサービス・ツール以外では外部から不可視です。待機アカウンティングの概念はスレッドとタスクの両方に適用されるので、1 つの実行可能作業部分を指す場合にスレッドとタスクという用語を使用します。

スレッドまたはタスクが取りうる基本状態として、次の 2 つがあります。

スレッドまたはタスクの存続時間を、実行または待機に費やした時間に分解してグラフィカルに考えることができます。 このグラフィカル記述を「実行/待機時間こん跡」といいます。 このこん跡は、大まかに次のようになります。

実行/待機こん跡

従来、アプリケーションのパフォーマンスを向上させるための焦点は、アプリケーションに CPU をできるだけ効率的に使用させることに当てられていました。 待機アカウンティング機能のある IBM i では、待機に費やした時間を調べて、その待機時間の要因を把握できます。削減または除去できる待機要素がある場合は、全体パフォーマンスも向上させることができます。

IBM i オペレーティング・システムにおけるほぼすべての待ち状態は、識別されており列挙済みです。換言すれば、固有待機ポイントそれぞれに数値が割り当てられています。これが可能なのは、IBM がライセンス内部コードとオペレーティング・システムの両方を完全に管理しているからです。 IBM i 6.1 のリリースの時点で、固有待ち状態は 268 あります。スレッドおよびタスクごとに 250 を超える固有待ち状態を追跡すると、ストレージを過剰に消費することになるので、グループ化アプローチが採用されています。 固有待ち状態はそれぞれ、32 あるグループ (「バケット」) のうちの 1 つに割り当てられています。 スレッドまたはタスクが待ち状態に入ったときと待ち状態から抜けたとき、タスク・ディスパッチャーが待ち状態を該当グループにマッピングします。

待機アカウンティングを使用して実行/待機時間こん跡を調べることにより、スレッドまたはタスクの待機時間について、その構成要素を識別できるようになりました。 以下に例を示します。

待機アカウンティングを使用した実行/待機こん跡

スレッドの待機時間の要因がディスク・データの読み取りと書き込み、直列化アクセスのためのレコードのロッキング、およびデータのジャーナリングだった場合、待機をこのように分解してとらえることができます。 関係している待機のタイプが分かると、確認すべきことがいくつか出てきます。 この例の場合、その中には以下のような事柄が含まれます。

定義済みの 32 の待機グループ (「バケット」) は、以下のとおりです。 待機グループの定義はリリースによって異なり、今後変更される可能性があります。

  1. CPU 上のディスパッチ時間
  2. CPU キューイング
  3. 予約済み
  4. その他の待機
  5. ディスク・ページ不在
  6. 障害なしディスク読み取り
  7. ディスク・スペース使用の競合
  8. ディスク操作開始の競合
  9. ディスク書き込み
  10. ディスク (その他)
  11. ジャーナリング
  12. セマフォーの競合
  13. mutex の競合
  14. マシン・レベルのゲートの直列化 - IBM サポートをコール
  15. 占有の競合 - IBM サポートをコール
  16. データベース・レコード・ロックの競合
  17. オブジェクト・ロックの競合
  18. 不適格な待機
  19. 主記憶域プールの競合 - IBM サポートをコール
  20. 活動時ジャーナル保管
  21. 予約済み
  22. 予約済み
  23. 予約済み
  24. ソケット送信
  25. ソケット受信
  26. ソケット (その他)
  27. IFS
  28. PASE
  29. データ待ち行列受け取り
  30. アイドル/作業待ち
  31. 同期トークンの競合
  32. 異常な競合 - IBM サポートをコール

これらの待機グループの多くは、アプリケーションの待機分析をするうえで表面的なものにすぎない場合もあります。 これらの状況でアプリケーションが何を行っていてなぜ待機しているのかを理解すると、不必要な待機を削減したり除去したりする助けになることがあります。

グループ 16 (データベース・レコード・ロックの競合) を例に取ると、実際にはこのグループの内容として、いくつかの異なる待機が列挙されます。 以下の待機があります。
  • 読み取り
  • 更新
  • 脆弱
  • 転送
  • 検査
  • 競合出口

ホルダーとウェイター

IBM i は、スレッドまたはタスクが待機しているリソースを追跡するだけでなく、リソースが割り振られたスレッドまたはタスクも追跡します。これは非常に強力な機能です。 「ホルダー」は、直列化リソースを使用しているスレッドまたはタスクです。 「ウェイター」は、その直列化リソースへのアクセスを要求しているスレッドまたはタスクです。

コール・スタック

IBM i は、スレッドまたはタスクごとにコール・スタックも管理します。これは、待機アカウンティング情報から独立しています。 コール・スタックは呼び出されたプログラムを示しており、待ち状態を把握する、つまり結果としてリソースを保持していたかまたはリソースの利用を要求していたロジック部分を知るうえで、非常に役立つことがあります。 ホルダー、ウェイター、コール・スタックの組み合わせは、待ち状態を分析するための非常に強力な機能になります。

データの収集と分析

IBM i には、待機アカウンティング情報を収集するためのパフォーマンス・データ収集メカニズムとして、収集サービスと Job Watcher の 2 つがあります。Job Watcher は、ホルダーとウェイターの情報およびコール・スタックも収集します。 パフォーマンス・データが収集されると、データをグラフィカルに分析できます。 iDoctor 製品には、パフォーマンス・データをグラフィカル表示するための Windows クライアント機能があります。 IBM Navigator for i Web コンソールには、Web ブラウザー・インターフェースでパフォーマンス・データをグラフィカル表示するための「データの調査」機能があります。