fdpr プログラムによる実行可能プログラムの再構造化

fdpr (feedback-directed program restructuring) プログラムは、 実行可能モジュールを、実行速度を高め、実メモリーを有効に使用できるように最適化します。

fdpr プログラムがインストールされていて、 使用可能かどうかを判別するには、次のコマンドを実行します。
# lslpp -lI perfagent.tools

fdpr コマンドは、 ユーザー・レベルのアプリケーション・プログラムのパフォーマンスと実メモリー使用率の両方を改善できる、 パフォーマンス・チューニング・ユーティリティーです。 ソース・コードは必ずしも fdpr プログラムの入力の形をとるとは限りません。 ただし、ストリップされた実行可能プログラムはサポートされません。 ソース・コードが使用可能な場合、-qfdpr コンパイラー・フラグ付きで作成されたプログラムには、再配列され、かつ機能が保証されたプログラムの作成の際に fdpr プログラムを援助するための情報が含まれます。 -qfdpr フラグを使用する場合、プログラム内の全オブジェクト・モジュールに使用する必要があります。 -qfdpr フラグを使用した場合、静的リンクではパフォーマンスは改善されません。

fdpr ツールは、次の方法によって、 実行可能プログラムの命令を再配列して、命令キャッシュ、変換索引バッファー (TLB)、および実メモリー使用率を改善します。

  • 実行頻度が高いコード・シーケンスを 1 つにまとめる (プロファイル作成による判別にしたがって)。
  • 条件付き分岐をコーディングし直して、ハードウェア分岐予測を改良する。
  • あまり実行されないコードをほかの場所へ移動する。

例えば、「if-then-else」ステートメントがあったとすると、fdpr プログラムは、 そのプログラムが if 分岐より else 分岐を多く使用すると結論づけることがあります。 すると、条件と 2 つの分岐を次の図のように反転させます。

図1: 条件付き分岐の再コーディングの例。 この図は、条件付き分岐の再コーディングによって、一部のコードがどのように変更されるかを示しています。 例えば、コード If (condition) は If (! condition) になり、 コード then は then のまま、instructions は other instructions になり、else は else のまま、other instructions は instruction になり、endif は endif のままです。
条件付き分岐の記録の例

大規模な (5 MB を超える) CPU 制約のアプリケーションでは、実行時間を最大 23% 改善することができますが、一般的には、 パフォーマンスの向上は 5% から 20% の間です。 このタイプのプログラムのテキスト・ページの実メモリー要件の低減は、70% に達する場合もあります。 平均は 20% から 50% の間です。 この数字は、アプリケーションの動作と、fdpr プログラムを使用したときに指定された最適化オプションによって決まります。

fdpr 処理は、次の 3 つのステージで行われます。

  1. 最適化する実行可能モジュールは、詳しいパフォーマンス・データを収集できるように、組み込まれます。
  2. 組み込まれた実行可能モジュールは、ユーザーの提供するワークロードの下で実行され、 その実行結果のパフォーマンス・データが記録されます。
  3. このパフォーマンス・データを使用して、パフォーマンス最適化プロセスが駆動され、その結果再構成された実行可能モジュールは、 組み込まれた実行可能プログラムを働かせたワークロードをより効率的に実行できるはずです。 fdpr プログラムの駆動に使用されたワークロードは、 実際のプログラムの使用状況とよく一致していることが非常に重要です。 再構築された実行可能プログラムのパフォーマンスは、 fdpr プログラムの駆動に使用されるワークロードとは大幅に異なるが、元の実行可能プログラムのパフォーマンスよりは劣る可能性があります。
一例として、# fdpr -p ProgramName -R3 -x test.sh コマンドは、テスト・ケース test.sh を使用して、組み込まれた形式のプログラム ProgramName を実行します。 その実行の出力は、プログラムの最も積極的な最適化 (-R3) の実行に使用され、デフォルトで ProgramName.fdpr と呼ばれる、新しいモジュールを形成します。 最適化された実行可能プログラムが、最適される前のプログラムより運用においてどの程度優れているかは、テスト・ケース test.sh に実際のワークロードがどれだけ反映されているかということに大きく左右されます。
注: fdpr プログラムには、拡張最適化アルゴリズムが組み込まれています。このアルゴリズムにより、最適化された実行可能プログラムが元の実行可能モジュールと同じように機能しない場合があります。 どの最適化実行可能プログラムも、実際の運用状態で使用する前に、すなわちその出力を信頼する前に、 完全にテストを済ましておくことが絶対に必要です

要約すると、fdpr プログラムのユーザーは、以下のことを厳守する必要があります。

  • できるだけ意図した使用法に近いワークロードを使用して、 fdpr プログラムを駆動する。
  • 最適化された再構成実行可能プログラムの機能を完全にテストする。
  • 再構成実行可能プログラムは、チューニングの対象となったワークロードにのみ使用する。