Linux はマルチユーザー / 同時プロセス向けに構築されていることは知っていますが、企業レベルでは、その多くは、ごく少数のクライアントにのみサービスを提供する内部サービスをサポートする単一の (ただし大規模な) アプリケーションに使用されています。
このようなユースケースでは、シナリオを最適化するためにシステムまたはカーネル (具体的には Red Hat Linux、Fedora、CentOS) をどのように調整すればよいでしょうか? 遅延を最小限に抑え、コンテキストスイッチを減らし、ローカル ディスク I/O をほとんど発生させないようにします。
セッションの長さは永続的である可能性があり (クライアントの数が少数であるため)、データ サイズの交換は小さいが非常に頻繁で、1 秒あたり 1k から 2k のメッセージ、サイズは 40 から 100 バイトです。
答え1
パフォーマンスチューニングは科学であると同時に黒魔術でもあります。それに関する完全な本が書かれており、その中にはベンダードキュメント
まず適切なモニタリングから始め、負荷を追加し、ベースラインを取得し、その後で調整を開始し、調整によって意図した結果が得られたかどうかを確認します。
最適な結果が得られるまで、これを繰り返します。
主要な RHEL または CentOS リリースについては言及されていませんが、それらにはすべて、たとえばデーモンによる自動チューニングも含まれています。 から定義済みのパフォーマンス プロファイルを選択し 、 を使用してアクティブ化tuned
できます。tuned-adm list
tune-adm profile <profile-name>
あなたのユースケースではRHEL 7プロファイルlatency-performance
あなたにとって有益かもしれないもののように思えます:
latency-performance
レイテンシの低減に重点を置いたサーバー プロファイルです。このプロファイルは、C ステートのチューニングと透過的巨大ページの TLB 効率の向上の恩恵を受ける、レイテンシの影響を受けやすいワークロードに推奨されます。このプロファイルは、およびを設定することで、電力節約よりもパフォーマンスを優先しますintel_pstate
。max_perf_pct=100
透過的巨大ページを有効にし、を使用してcpupower
パフォーマンス cpufreq ガバナーを設定し、cpu_dma_latency
の値を要求します1
。
より一般的なLinuxチューニングブランダン・グレッグシステムのどの部分にどのツールを使用するかを示す視覚的な図をいくつか作成しており、非常に便利なチートシートになっています。