2017-05-19 28 views
1

私はクライアントで簡単なプログラムを実行していますが、udpパケットをサーバーに送信し続けます。サーバーのインターフェイスはマルチキューのネットカードですが、udp4のrx-flow-hashをsdに設定しました。したがって、すべてのパケットは1つのCPUで生成されます。linux softirq cpuの使用が奇妙に見える

私は40Wpackets/sを受け取ると、そのCPUのCPUはsoftirqで1%のコストとなります。 60Wpackets/sを受け取ると、そのCPUのCPUのコストはsoftirqで8%になります。 私は90Wpackets/sを受け取ったとき、サーバはそのCPUをsoftirqで100%cosrします。

受信番号はしばらくの間sar -n UDP 1を実行して取得します。 CPUコストはしばらくの間mpstat -P ALL 1を経由します。

私はこれについて混乱しています。

なぜ線形ではないのですか?

答えて

0

ソフト割り込みは、直ちに処理する必要のないコードの一部を取るハード割り込み後に実行されます。

したがって、ソフト割り込みはハード割り込みによって確保できます。一般的なハード割り込みが実行されると、ソフト割り込みが実行されます(下位割り込みを中断します)。

しかし、今回はハード割り込みがあると、ソフト割り込みが優先されます。

このようにして、ソフト割り込みキューが10を超えると、ソフト割り込みを処理するスレッドksoftirqdが起動します。 KsoftirqdスレッドがCPUに占有されているのはソフト%の問題です。

パッケージの時間が短いので、ksoftirqは覚醒しておらず、柔らかい%が非常に低いです。アイドルプロセスでのソフト割り込みの多くはハード割り込みによって中断され、CPU消費は内部のアイドル%で記録されます。

負荷が高い場合、ハード割り込みによって割り込みが中断されるため、ksoftirqdが実行されているため、ソフト%が突然大きく増加します。