web-dev-qa-db-ja.com

低遅延アプリケーション用にサーバーを最適化するにはどうすればよいですか

レイテンシーに敏感なアプリケーションがあります。私はスループットに関心がありますが、極端に低いレイテンシーは私にとってより重要です。

サーバーを最適化して、可能な限り短い遅延、つまり、ネットワークインターフェイス(またはinifinibandカード)で受信された要求と公開された応答からの可能な限り短い応答時間を実現する方法を提案してください。

最初の考えは

  • すべてのオペレーティングシステムアクティビティを一連のコアに固定し、他のアクティビティを自分専用にします(これを行うための最良の方法がわかりません)
  • オーバーコミットしないように設定 overcommit_memory

記事 サーバーとプロセスの速度の最適化 は良いスタートのようですが、他の指針も歓迎します。

他の提案は大歓迎です

1
Robert Christie

何よりもまず、linux-rtカーネルをインストールして使用する必要があると思います。このカーネルにはパッチが適用されており、コードのいくつかの非常に小さな領域( "raw_spinlockクリティカル領域")を除いて、ほぼすべてのカーネルをプリエンプションできます。これは、ほとんどのカーネルスピンロックを優先度継承をサポートするミューテックスに置き換え、すべての割り込みとソフトウェア割り込みをカーネルスレッドに移動することによって行われます。

プリエンプションとは、コンピュータシステムによって実行されているタスクを、その協力を必要とせずに一時的に中断し、後でタスクを再開することを目的とした行為です。

読む リアルタイムプリエンプションの概要 。これにより、物事がどのように機能するかを理解できるようになり、特定のアプリケーション用にカーネルを微調整できるようになります。

ウインドリバーシステムズによって開発された RTLinuxFree もあります。これには、お金があれば商用版もあります。

linux-rtについては、読むことをお勧めします RT Wiki

たぶんあなたのアプリケーションは [〜#〜] rtai [〜#〜] をサポートしていますか?

2
Li Lo

おそらく、ハードウェアのクロック周波数をいじることが重要である可能性がありますか?これは、ACPI電源状態の切り替えに影響を与える可能性があります。たとえば、マシンが一定期間アイドル状態であると予想され、ネットワーク要求に迅速に応答する必要がある場合などです。または、(非常に)正確なタイミングとロギングが必要な場合は、と言います。

詳細については、 リンクテキスト を参照してください。最近のものかどうかはわかりませんが、前回チェックしたとき(約6か月前)はハードウェアクロックオプションがまだありました。

0
mindcorrosive