
ユーザースレッドがカーネルスレッドにマッピングされる仕組みについて読んでいました。ウィキペディアこの記事から、FreeBSD は 1:1 (カーネルレベルのスレッド) を使用していることがわかりました。
したがって、アプリケーションによって作成された各ユーザー スレッドは、カーネル スレッドにマップされます。スレッドで各新しいリクエストを処理する Web サーバーを構築し、FreeBSD で実行している場合、コアの数を増やすと、アプリケーションの全体的なパフォーマンスが向上しますか?
私はこの質問を読みましたCPU コア: 多ければ多いほど良いのでしょうか?ただし、回答の範囲は、ユーザー スレッドとカーネル スレッド間の 1:1 マッピングによって特に影響を受けるようにしたいと思います。
答え1
簡単に答えると、イエスです。
長い答えは...CPU コアの数が多いほど、処理能力が高くなります。PHP / Ruby / Python などの Web アプリケーションの場合、同時接続を処理するためのリソースが増えることを意味します。負荷の高いアプリケーションの場合、コアの数が多いと本当に違いが出ます。
私の個人的な意見としては、処理能力と RAM の増設のどちらかを選ぶ場合、ほとんどの場合 RAM の増設を選択します。RAM があれば、ディスク I/O のボトルネックを軽減できます。
キャッシュシステムを使用することで、PHPAPC、ワニス、 そしてMySQL チューニング(テーブル キャッシュ、クエリ キャッシュなど) を使用すると、コンテンツを生成するために CPU パワーを必要とせずに、Web サイトのパフォーマンスを大幅に向上できます。
ウェブサイトをキャッシュできる場合は、この選択を行ってください。CPU コアの数を増やすだけでは長期的には不利な選択となります。
答え2
はい。
最新の Web サーバー ソフトウェアは、サーバーに接続するコンピューターごとに個別のプロセスまたはスレッドを使用します。さらに、MySQL や PHP などのバックエンド ソフトウェアも、サービス提供が必要なユーザーごとに個別のプロセスまたはスレッドで実行されるため、コア数が多いほど有利になります。
もちろん、より負荷の高い環境では、ディスク パフォーマンス、メモリ、またはネットワーク帯域幅がボトルネックになる可能性があります。メモリを増やすと読み取りキャッシュが増え、低速ディスク ストレージへのアクセスが減少します。Biapy が提案しているように、1 秒あたりのリクエスト数が多い場合は、システム負荷を大幅に軽減する Varnish などの専用キャッシュ ソフトウェアを検討する必要があります。
答え3
いつものように、答えは「状況による」となります。
例えば、nginxウェブサーバー非常によく機能するスレッドは使用しませんが、代わりにイベント駆動型アーキテクチャを使用します。複数のワーカー プロセスを使用できるため、複数のコアを活用できます。
リンクされたパフォーマンス測定からわかるように、同時接続数が増加すると、スレッド化された Apache Web サーバーはより多くのスレッドを生成し、より多くのメモリを使用します。nginx が使用するメモリの量はほとんど一定です。また、1 秒あたりに処理されるリクエストの量では、nginx が Apache を大幅に上回っています。
したがって、スレッドが常に最善の解決策であるとは限りません。
パフォーマンスは、データがどこに保存されているかによっても異なります。ハードディスクに保存されている場合、RAMに保存されている場合に比べてアクセスが遅くなります。RAMはプロセッサのキャッシュよりもずっと遅くなります。Webサーバーを高速化したい場合は、次のようなアクセラレータの使用を検討してください。ワニス読んでみてくださいこの記事ウェブ配信のパフォーマンスに関するvarnishの主要著者による記事。ここでのメッセージは、使用オペレーティング システムに組み込まれたキャッシュ メカニズムであり、同じ作業を自分で実行しようとしないでください。