fdpr プログラムによる実行可能プログラムの再構造化
fdpr (feedback-directed program restructuring) プログラムは、 実行可能モジュールを、実行速度を高め、実メモリーを有効に使用できるように最適化します。
# lslpp -lI perfagent.toolsfdpr コマンドは、 ユーザー・レベルのアプリケーション・プログラムのパフォーマンスと実メモリー使用率の両方を改善できる、 パフォーマンス・チューニング・ユーティリティーです。 ソース・コードは必ずしも fdpr プログラムの入力の形をとるとは限りません。 ただし、ストリップされた実行可能プログラムはサポートされません。 ソース・コードが使用可能な場合、-qfdpr コンパイラー・フラグ付きで作成されたプログラムには、再配列され、かつ機能が保証されたプログラムの作成の際に fdpr プログラムを援助するための情報が含まれます。 -qfdpr フラグを使用する場合、プログラム内の全オブジェクト・モジュールに使用する必要があります。 -qfdpr フラグを使用した場合、静的リンクではパフォーマンスは改善されません。
fdpr ツールは、次の方法によって、 実行可能プログラムの命令を再配列して、命令キャッシュ、変換索引バッファー (TLB)、および実メモリー使用率を改善します。
- 実行頻度が高いコード・シーケンスを 1 つにまとめる (プロファイル作成による判別にしたがって)。
- 条件付き分岐をコーディングし直して、ハードウェア分岐予測を改良する。
- あまり実行されないコードをほかの場所へ移動する。
例えば、「if-then-else」ステートメントがあったとすると、fdpr プログラムは、 そのプログラムが if 分岐より else 分岐を多く使用すると結論づけることがあります。 すると、条件と 2 つの分岐を次の図のように反転させます。

大規模な (5 MB を超える) CPU 制約のアプリケーションでは、実行時間を最大 23% 改善することができますが、一般的には、 パフォーマンスの向上は 5% から 20% の間です。 このタイプのプログラムのテキスト・ページの実メモリー要件の低減は、70% に達する場合もあります。 平均は 20% から 50% の間です。 この数字は、アプリケーションの動作と、fdpr プログラムを使用したときに指定された最適化オプションによって決まります。
fdpr 処理は、次の 3 つのステージで行われます。
- 最適化する実行可能モジュールは、詳しいパフォーマンス・データを収集できるように、組み込まれます。
- 組み込まれた実行可能モジュールは、ユーザーの提供するワークロードの下で実行され、 その実行結果のパフォーマンス・データが記録されます。
- このパフォーマンス・データを使用して、パフォーマンス最適化プロセスが駆動され、その結果再構成された実行可能モジュールは、 組み込まれた実行可能プログラムを働かせたワークロードをより効率的に実行できるはずです。 fdpr プログラムの駆動に使用されたワークロードは、 実際のプログラムの使用状況とよく一致していることが非常に重要です。 再構築された実行可能プログラムのパフォーマンスは、 fdpr プログラムの駆動に使用されるワークロードとは大幅に異なるが、元の実行可能プログラムのパフォーマンスよりは劣る可能性があります。
要約すると、fdpr プログラムのユーザーは、以下のことを厳守する必要があります。
- できるだけ意図した使用法に近いワークロードを使用して、 fdpr プログラムを駆動する。
- 最適化された再構成実行可能プログラムの機能を完全にテストする。
- 再構成実行可能プログラムは、チューニングの対象となったワークロードにのみ使用する。