Linuxパフォーマンスの最適化(12)-CPUパフォーマンスの調整

1.アプリケーションの最適化

(1)コンパイラの最適化。コンパイラ最適化オプションを適切に有効にして、コンパイルフェーズ中のパフォーマンスを向上させます。gccは最適化オプションを提供します-Onはアプリケーションのコードを自動的に最適化します。
(2)アルゴリズムの最適化。複雑度の低いアルゴリズムを使用すると、処理速度を大幅に高速化できます。比較的大きなデータの場合、O(n ^ 2)ソートアルゴリズム(バブリング、挿入ソートなど)の代わりにO(nlogn)ソートアルゴリズム(高速ソート、マージソートなど)を使用できます。
(3)非同期処理。非同期処理を使用すると、特定のリソースを待機しているためにプログラムがブロックされるのを防ぐことができるため、プログラムの同時処理機能が向上します。ポーリングをイベント通知に置き換えることで、CPUを消費するポーリングの問題を回避できます。
(4)マルチスレッドはマルチプロセスに取って代わります。プロセスコンテキスト切り替えと比較して、スレッドコンテキスト切り替えはプロセスアドレススペースを切り替えないため、コンテキスト切り替えのコストを削減できます。
(5)キャッシュを有効に活用します。計算プロセスで頻繁にアクセスされるデータまたはステップをメモリにキャッシュし、次に使用するときにメモリから直接取得できるため、プログラムの処理速度が向上します。

2.システムの最適化

1.CPUバインディング

(1)CPUバインディング:プロセスを1つ以上のCPUにバインドすると、CPUキャッシュのヒット率が向上し、クロスCPUスケジューリングによって引き起こされるコンテキストスイッチングの問題を減らすことができます。
(2)CPUの分離:CPUをグループ化し、CPUアフィニティメカニズムを介してプロセスを割り当てます。CPUが特定のプロセスによって排他的に占有され、他のプロセスによる使用が許可されないことを指定します。

2.プロセスCPUリソース制限

Linux cgroupsを使用してプロセスのCPU使用量の上限を設定すると、アプリケーション自体の問題が原因でシステムリソースが使い果たされるのを防ぐことができます。

3.プロセスの優先順位の調整

niceを使用してプロセスの優先度を調整します。正の値は優先度を下げ、負の値は優先度を上げます。非コアアプリケーションの優先度を適切に下げ、コアアプリケーションの優先度を上げると、コアアプリケーションが最初に処理されるようになります。

4.負荷分散を中断します

ソフト割り込みまたはハード割り込みに関係なく、割り込みハンドラーは多くのCPUリソースを消費する可能性があります。irqbalanceサービスをオンにするか、smp_affinityを構成して、割り込み処理プロセスを複数のCPUに自動的に負荷分散します。

5.NUMAの最適化

NUMAアーキテクチャプロセッサは複数のノードに分割され、各ノードには独自のローカルメモリスペースがあります。NUMA最適化により、CPUは可能な限りローカルメモリにのみアクセスできます。

おすすめ

転載: blog.51cto.com/9291927/2594265