7    アプリケーション性能の管理

アプリケーションの性能を改善することで,Tru64 UNIX 全体の性能が改善できます。 この章では,アプリケーションの性能のガイドラインについて説明します。 詳細は,表 7-1を参照してください。

7.1    アプリケーションの性能改善

良くできたアプリケーションは,CPU,メモリ,および入出力リソースを効率的に使用します。 表 7-1は,アプリケーションの性能を改善する際のガイドラインを示しています。

表 7-1:  アプリケーションの性能改善のガイドライン

ガイドライン 性能上の利点 欠点
オペレーティング・システムの最新のパッチをインストールする (7.1.1 項)。 最新の最適化が反映される。 なし
最新バージョンのコンパイラを使用する (7.1.2 項)。 最新の最適化が反映される。 なし
並列処理を使用する (7.1.3 項)。 SMP の性能が改善される。 なし
アプリケーションを最適化する (7.1.4 項)。 効率的なコードが生成される。 なし
シェアード・ライブラリを使用する (7.1.5 項)。 メモリが解放される。 実行時間が長くなることがある。
アプリケーションが必要とするメモリ量を減らす (7.1.6 項)。 メモリが解放される。 プログラムの実行状態が最適でなくなることがある。
リアルタイム・プログラムの初期化処理でメモリをロックする (7.1.7 項)。 必要に応じてメモリがロックまたはアンロックされる。 プロセスおよび UBC に使用できるメモリが減る。

以降の項では,上記の改善のガイドラインについて詳しく説明します。

7.1.1    オペレーティング・システムの最新のパッチをインストールする

常にオペレーティング・システムの最新のパッチをインストールします。 パッチには,性能改善が含まれていることがよくあります。

/etc/motd ファイルを調べて,適用済みのパッチを把握してください。 パッチのインストールについての詳細は,カスタマ・サービスにお問い合わせください。

7.1.2    最新バージョンのコンパイラを使用する

常に最新バージョンのコンパイラを使用して,アプリケーション・プログラムを構築します。 通常,新しいバージョンでは,より高度な最適化が行われます。

システム上のソフトウェアをチェックして,最新バージョンのコンパイラを使用していることを確認してください。

7.1.3    並列処理を使用する

並列処理を強化するために,Fortran や C で開発しているアプリケーション開発者は,KAP (Kuch & Associates Preprocessor) の使用を検討してください。 これを使用すると,SMP の性能が大きく改善される可能性があります。 KAP の詳細については,『プログラミング・ガイド』 を参照してください。

7.1.4    アプリケーションを最適化する

アプリケーション・プログラムの最適化では,構築プロセスの変更やソース・コードの変更が必要になることがあります。 コンパイラおよびリンカのさまざまな最適化レベルを用いて,より効率的なユーザ・コードを生成できます。 最適化についての詳細は 『プログラミング・ガイド』 を参照してください。

32 ビットのシステムから Tru64 UNIX へアプリケーションを移植する場合と,新しいアプリケーションを開発する場合のどちらでも,アプリケーションのデバッグとテストを十分に行うまでは最適化しないでください。 C で記述されたアプリケーションを移植する場合は,lint コマンドに -Q オプションを指定して使用するか,C コンパイラに -check オプションを指定してコンパイルすると,解決する必要がある移植上の問題があるか調べることができます。

7.1.5    シェアード・ライブラリを使用する

シェアード・ライブラリを使用すると,メモリおよびディスク・スペースの必要量が減少します。 複数のプログラムが 1 つのシェアード・ライブラリにリンクされている場合,各プロセスが使用する物理メモリの容量は大幅に削減されます。

ただし,シェアード・ライブラリを使用すると,最初の実行での実行速度が,静的ライブラリを使用した場合よりも遅くなることがあります。

7.1.6    アプリケーションが必要とするメモリ量を減らす

アプリケーションのメモリ使用量を削減することで,他のプロセスやファイル・システムのキャッシュのためのメモリ・リソースを増やせることがあります。 コーディングの際に以下の項目を考慮すると,アプリケーションのメモリ使用量を削減できます。

プロセスのメモリ割り当てについての詳細は,『プログラミング・ガイド』 を参照してください。

7.1.7    メモリ・ロックを制御する

リアルタイム・アプリケーションの開発者は,メモリ・ロックをプログラムの初期化処理に必須の処理と考えなければなりません。 リアルタイム・アプリケーションの多くは,実行中はロックされたままですが,一部のアプリケーションでは,実行状況に応じてメモリをロック/アンロックした方が良いこともあります。 メモリ・ロック関数を用いると,関数呼び出しの時点からアプリケーションの存在期間全体を通じてプロセス全体をロックできます。 ロックされたメモリのページはページングの対象にできなくなり,プロセスはスワップ・アウトできなくなります。

メモリ・ロックは,プロセスのアドレス空間に適用されます。 プロセスのアドレス空間にマップされたページだけをメモリにロックできます。 プロセスが終了すると,ページはアドレス空間から削除され,ロックは解除されます。

プロセスのアドレス空間全体をロックするには,mlockall 関数を使用します。 ロックされたメモリは,プロセスが終了するか,アプリケーションが munlockall 関数を呼び出すまでロックされたままです。 ps コマンドを使用すると,プロセスがメモリにロックされてスワップ・アウトできない状態かどうかがわかります。 12.3.2 項 を参照してください。

メモリ・ロックは,子プロセス (fork 関数で生成) には継承されません。 また,プロセスに対応するすべてのメモリ・ロックは,exec 関数を呼び出したとき,またはプロセスが終了したときにアンロックされます。 詳細は,『Guide to Realtime Programming』と mlockall(3) を参照してください。