Mengapa proses ksoftirqd / 0 menggunakan semua CPU saya?

67

Saya merasa Ubuntu berjalan agak lamban, dan kemudian saya pergi untuk melihat proses berjalan di atasnya, dan menemukan yang menggunakan sesuatu seperti 50% dari CPU yang disebut ksoftirqd/0.

Adakah yang tahu apa proses ini, mengapa menggunakan begitu banyak CPU dan bagaimana membuatnya kurang intensif CPU?

dasen
sumber

Jawaban:

77

Komputer Anda berkomunikasi dengan perangkat yang terpasang padanya melalui IRQ (permintaan interupsi). Ketika interupsi datang dari perangkat, sistem operasi menjeda apa yang sedang dilakukannya dan mulai mengatasi interupsi itu.

Dalam beberapa situasi IRQ datang sangat cepat satu demi satu dan sistem operasi tidak dapat menyelesaikan servis satu sebelum yang lain tiba. Ini dapat terjadi ketika kartu jaringan berkecepatan tinggi menerima sejumlah besar paket dalam jangka waktu yang singkat.

Karena sistem operasi tidak dapat menangani IRQ ketika mereka tiba (karena mereka datang terlalu cepat satu demi satu), sistem operasi mengantri mereka untuk diproses nanti oleh proses internal khusus yang dinamai ksoftirqd.

Jika ksoftirqdmengambil lebih dari persentase kecil waktu CPU, ini menunjukkan mesin berada di bawah beban interupsi berat.

Lucian Adrian Grijincu
sumber
22

Dari halaman manual, ksoftirqdadalah utas kernel per-cpu yang berjalan saat mesin berada di bawah beban soft-interrupt yang berat.

Anda dapat mengubah pengaturan sedikit, dengan menentukan cpu mana yang mengambil interupsi tertentu. Anda melakukan ini dengan mengubah konten /proc/irq/$interrupt_number/smp_affinity. Anda bisa mendapatkan daftar interupsi dan artinya dengan melakukan:

cat /proc/interrupts

Angka dalam smp_affinityadalah bitmap CPU, direpresentasikan dalam kode hex. Bit paling kanan adalah yang paling tidak signifikan. Sebagai contoh, sistem saya memiliki 8 core. Jika saya hanya ingin menggunakan inti 1, 3 dan 4, saya akan mengatur smp_affinity menjadi 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)

Secara pribadi, saya mengatur cpu apa saja untuk dapat mengambil interrupt 29 (eth0 dalam sistem 8-core saya) dengan:

sudo echo ff > /proc/irq/29/smp_affinity
Eduardo Bezerra
sumber
4

ksoftirqd adalah utas kernel per-cpu yang berjalan saat mesin berada di bawah beban soft-interrupt yang berat. Jadi, ini bukan memakan cpu Anda tetapi mengurangi beban IRQ Anda.

akshatj
sumber
1
Saya tahu itu askubuntu.com, tetapi pada Raspberry Pi justru sebaliknya, ksoftirqd memakan semua CPU pada beban IRQ intensif.
machineaddict
Seperti yang saya pahami, ksoftirqd memproses softirqs yang ditunda (ketika mereka tidak dapat diproses cukup cepat). Ketika ada banyak softirqs dan / atau mereka menghabiskan banyak waktu untuk memproses CPU maka ksoftirqd menghabiskan banyak waktu CPU.
pabouk