4つのCPUを搭載したWebサーバーがありますが、どういうわけか断続的にパケット損失が発生しました。最後に、すべてのアプリケーションとデータを8つのCPUを備えた別のシステムに移動しました。これを行ったのは、平均CPU使用率が一貫して80%に上昇するという1つの現象を除いて、何も問題がないことがわかったためです。
トラブルシューティング中。/proc/interruptsファイルを確認したところ、割り込みはCPU0に修正されました。各CPUの使用率を確認するために「mpstat-pALL」も発行されました。そして、私たちがそれらをチェックした時点では、それらのどれも100%ではありませんでした。
平均CPU使用率のみが100%に上昇したとは言っても、定期的にCPU使用率を収集するために監視システムを使用しなかったため、いずれも100%に急上昇する可能性があります。代わりに、コマンドを使用してチェックしただけです。より多くのCPUを搭載した新しいシステムに変更した後、パケット損失は発生しなくなりました。次の質問が私に起こります:
システムにCPUを追加した後、パケット損失が解決されました。これは、システムに搭載されているCPUが多いほど、NIC割り込みによって占有されるCPUの使用率が最大100%になる可能性が低くなるためです。 ?
システムにCPUを追加すると、コンテキストスイッチが少なくなり、システムのオーバーヘッドが少なくなりますか?
クアッドコアシステムのCPUの1つの使用率がたまたま100%であり、それがNIC割り込みへの割り込みに固定されている場合。カーネルは別のCPUをスケジュールしますか。代わりにNIC割り込みを処理するのに忙しくないですか?
通常、いいえ。とにかく割り込みが優先されるので、NIC割り込みを移動する必要はありません。
システムにCPUを追加した後、パケット損失が解決されました。これは、システムに搭載されているCPUが多いほど、NIC割り込みによって占有されるCPUの使用率が最大100%になる可能性が低くなるためです。 ?
いいえ、なぜそれが重要なのでしょうか?割り込みは、その名前が示すように、interrupts CPUであり、割り込みを処理します。
システムにCPUを追加すると、コンテキストスイッチが少なくなり、システムのオーバーヘッドが少なくなりますか?
それは可能ですが、それが違いを生む可能性は低いです。 CPUが増えると、強制されていないコンテキストスイッチ(システムが実行する必要がない場合でも、システムが取るもの決定を減らすだけです)、強制されていないコンテキストスイッチがパフォーマンスに大きな影響を与えるほどひどくシステムを設計する人は誰もいません。
あなたが言ったことから推測すると、システムに高負荷がかかっている状況では、ネットワークカードのサービスが十分に速くなかったためにパケットが失われたのではないかと思います。おそらくこれは、割り込みが十分に速く処理されていないことが原因ではありませんが、ネットワークトラフィックに関連する他の作業が、パケットレートに追いつくのに十分な速さで完全に取得されていないためです。これには、たとえば、TCPプロトコルで必要なすべての操作が含まれます。これがバックアップされると、パケットはどこかにドロップされます。