ksoftirqd / 0プロセスがすべてのCPUを使用しているのはなぜですか?


67

Ubuntuの動作が少し遅いと感じたので、Ubuntuで実行されているプロセスを確認しに行き、CPUの50%のようなものを使用しているものを見つけましたksoftirqd/0

このプロセスが何をするのか、なぜそれがそれほど多くのCPUを使用しているのか、そしてCPUの負荷を軽減する方法を知っている人はいますか?

回答:


77

コンピューターは、IRQ(割り込み要求)を介して接続されているデバイスと通信します。デバイスから割り込みが発生すると、オペレーティングシステムは実行中の処理を一時停止し、その割り込みのアドレス指定を開始します。

状況によっては、IRQが次々と非常に高速になり、オペレーティングシステムは、次のものが到着する前にサービスを終了できません。これは、高速ネットワークカードが短時間で非常に多くのパケットを受信したときに発生する可能性があります。

オペレーティングシステムはIRQが到着するたびに処理できないため(次々に到着するのが速すぎるため)、オペレーティングシステムはIRQという特別な内部プロセスによる後の処理のためにIRQをキューに入れますksoftirqd

ksoftirqdCPU時間のごくわずかな割合しかかかっていない場合、これはマシンの割り込み負荷が重いことを示しています。


22

マニュアルページからksoftirqdは、マシンがソフト割り込みの負荷が大きいときに実行されるCPUごとのカーネルスレッドです。

どのCPUが特定の割り込みを取得するかを定義することで、設定を少し調整できます。これを行うには、の内容を変更します/proc/irq/$interrupt_number/smp_affinity。以下を実行することで、割り込みとその意味のリストを取得できます。

cat /proc/interrupts

の数値smp_affinityはcpusのビットマップで、16進コードで表されます。右端のビットが最下位です。たとえば、私のシステムには8つのコアがあります。コア1、3、および4のみを使用する場合、smp_affinityを1a次のように設定します。

cpu_7 cpu_6 cpu_5 cpu_4 cpu_3 cpu_2 cpu_1 cpu_0
  0     0     0     1     1     0     1     0    = 0001 1010 = 1a (in hex)

個人的には、割り込み29(私の8コアシステムではeth0)をピックアップできるようにCPUをセットアップしました。

sudo echo ff > /proc/irq/29/smp_affinity

4

ksoftirqdはCPUごとのカーネルスレッドであり、マシンに大きなソフト割り込み負荷がかかっているときに実行されるため、CPUを消費するのではなく、IRQの負荷を減らします。


1
askubuntu.comであることは知っていますが、Raspberry Piではまったく逆で、ksoftirqdは集中的なIRQ負荷でCPUをすべて消費します。
machineaddict

私が理解しているように、ksoftirqdは延期されたsoftirqを処理します(十分に迅速に処理できない場合)。多くのsoftirqがある場合、および/または処理に多くのCPU時間を消費する場合、ksoftirqdは多くのCPU時間を消費します。
パブーク
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.