statics nginx'omを提供します

バージョン0.8.11以降、nginxには、LinuxおよびFreeBSD用のAIO(非同期入出力-ノンブロッキング入出力)の使用という、静的分布の新しい機能があります。



このイベントはどのように重要ですか? その瞬間まで、nginxはネットワークで作業している場合にのみ非ブロックモードを使用していました。ファイルでの作業はワークフローをブロックしていました。 これは何につながりましたか? すべてがOSキャッシュにない多くの異なるコンテンツ(写真ホスティングなど)がある場合-遅かれ早かれ、50、150、200のすべてのプロセスがディスク操作を待機し、新しいクライアントにサービスを提供できません-必要なコンテンツが返されてもファイルキャッシュから、またはバックエンドからのリクエスト。





これにどう対処するのですか?





少数のワークプロセスを使用して、すべてを非ブロックモードで配布する新しい方法が登場しました。 テストでは、ファイル/画像ホスティングの負荷をエミュレートします-多数の比較的小さなファイルを返します。 ディスクはランダムシーク速度に依存します。



試験方法:



画像

画像



結論:AIOを使用すると、使用するディスクのシークレートよりも大幅に高い300 rpsを達成できたという事実から判断すると、FreeBSDコアは内部のAIOを経由するリクエストを並べ替えることができます。これにより、大きなキャッシュを備えた「インテリジェントな」RAIDコントローラーがない場合に大幅なゲインが得られます 従来の方法を使用する場合、多数のワークプロセスがすべてディスクに送られると、パフォーマンスに悪影響を与えるだけです。



PS:テクニックに関するいくつかのコメント。 ランダムなファイル名を生成する速度は十分で、リクエストに0.5ミリ秒未満を追加します(より正確に測定する必要はありませんでした。この速度は達成できませんでした)。 おそらく、多数のスレッドでaioを使用したテストでは、チャネルの上限に達しました。 各テストの所要時間は2分です。



PPS:LinuxでのAIOの動作はテストされていません。結果は方向によって異なる場合があります。



All Articles