Kworker, apa itu dan mengapa memonopoli begitu banyak CPU?

136

Saya baru-baru ini ditingkatkan ke Kubuntu Natty Beta 1 dan saya telah mengalami banyak masalah dengan proses kworker . Pada saat itu menggunakan hampir setengah CPU saya. Juga, anehnya itu tampaknya mempengaruhi port USB saya; setiap kali saya mencolokkan USB drive, proses kworker masuk ke hyperdrive, membuat saya tidak dapat bekerja.

Saya telah berpikir tentang pengajuan bug tetapi karena saya bahkan belum menemukan penjelasan yang masuk akal tentang apa kworker yang saya pikir saya harus mencari tahu dulu.

davorao
sumber
Aneh, kworker sedang berjalan dan berkontribusi pada wakeups sebesar 10% tetapi saya tidak memiliki program Kubuntu diinstal. Alos Nepomuk tidak diinstal.
dago
1
dari respon afrazier saya pikir sekarang ada hubungannya dengan kernel (jadi k di kworker adalah untuk kernel). jadi itu sebabnya Anda juga harus menjalankan kworker di mesin Ubuntu Anda.
davorao
1
Jawaban ini mungkin juga berguna untuk mengetahui apa yang sedang dikerjakan oleh seorang pekerja: unix.stackexchange.com/questions/22851/…
anarcat
1
Anda seharusnya tidak mengambil pembaruan OS terakhir itu. Jika Anda beruntung, yang berikutnya akan memperbaikinya.
nobar

Jawaban:

109

"kworker" adalah proses placeholder untuk thread pekerja kernel, yang melakukan sebagian besar pemrosesan aktual untuk kernel, terutama dalam kasus di mana ada interupsi, timer, I / O, dll. Ini biasanya sesuai dengan sebagian besar dari setiap alokasi " sistem "waktu untuk menjalankan proses. Ini bukan sesuatu yang dapat dihapus dengan aman dari sistem dengan cara apa pun, dan sama sekali tidak terkait dengan nepomuk atau KDE (kecuali bahwa program-program ini dapat melakukan panggilan sistem, yang mungkin memerlukan kernel untuk melakukan sesuatu).

Ada beberapa laporan tentang aktivitas pekerja yang berlebihan untuk sistem yang relatif tidak aktif yang dimulai selama pengembangan 2.6.36 ( contoh diskusi ), dan laporan yang luas tentang kebingungan dan masalah dengan 2.6.38 (walaupun banyak dari laporan ini memasukkan kata "Natty", jadi saya kira orang-orang ini tidak menggunakan kernel antara 2.6.35 (didistribusikan di Ubuntu 10.10) dan 2.6.38 (didistribusikan di Ubuntu 11.04).

Saya telah menemukan banyak laporan tentang sesuatu yang "memperbaiki" ini untuk satu atau pengguna lain. Sebagian besar "perbaikan" tampaknya terkait dengan pembaruan dari berbagai jenis kernel. Di mana pembaruan dapat dilacak ke masalah tertentu, tampaknya sering kali ada beberapa driver atau layanan kernel yang telah ditambal untuk tidak melakukan kesalahan: Saya memiliki kesan bahwa ada banyak hal dalam kernel yang dapat menyebabkan perilaku yang diamati sebagai penggunaan pekerja yang berlebihan.

Jika Anda menemukan sistem tidak dapat digunakan karena aktivitas pekerja yang berlebihan, saya akan merekomendasikan mencoba melakukan lebih sedikit hal. Jika Anda merasa tidak melakukan apa-apa, coba matikan layanan atau timer yang sudah berjalan lama (pembaca RSS, pembaca surat, pengindeks file, pelacak aktivitas, dll.). Jika ini tidak berhasil, coba mulai ulang. Jika sistem Anda memungkinkan Anda untuk mengaktifkan atau menonaktifkan perangkat keras di lingkungan pra-boot, coba matikan perangkat keras yang tidak Anda gunakan. Jika itu terjadi pada setiap restart sebelum Anda melakukan sesuatu, Anda dapat mencoba menghapus instalan sesuatu, tetapi pada titik ini Anda ingin menjalankan alat profil syscall untuk melacak aplikasi tertentu yang tampaknya menyebabkan kelebihan ini.

Diharapkan bahwa sistem spesifik Anda akan berhenti mengekspresikan perilaku ini dengan peningkatan kernel di masa depan (dan banyak penyebab paling umum dari ini telah diselesaikan).

Emmet Hikory
sumber
1
Saya memiliki masalah masuk lambat yang saya pikir terkait dengan ini; Saya berhasil mengatasinya dengan menunda semua yang dimulai dengan cara ini: askubuntu.com/a/484856/46437
Aquarius Power
1
Mungkin ini berlebihan, tetapi pujian atas tanggapan yang diartikulasikan sangat jelas. Itu bahasa Inggris yang diungkapkan dengan baik, Pak.
Jon Carter
81

Apa itu pekerja? kworkerberarti proses kernel Linux yang melakukan "bekerja" (memproses panggilan sistem). Anda dapat memiliki beberapa dari mereka dalam daftar proses Anda: kworker/0:1adalah yang ada di inti CPU pertama Anda, kworker/1:1yang ada di kedua Anda dll.

Mengapa kworker memakan CPU Anda? Untuk mencari tahu mengapa seorang kworker membuang-buang CPU Anda, Anda dapat membuat backtrace CPU: perhatikan beban prosesor Anda (dengan topatau sesuatu) dan pada saat-saat beban tinggi kworker, jalankan echo l > /proc/sysrq-triggeruntuk membuat backtrace. (Di Ubuntu, ini mengharuskan Anda untuk masuk sudo -s). Lakukan ini beberapa kali, lalu saksikan backtraces di akhir dmesgoutput. Lihat apa yang sering terjadi di backtraces CPU, semoga mengarahkan Anda ke sumber masalah Anda.

Contoh: e1000e. Dalam kasus saya, saya menemukan jejak balik seperti ini hampir setiap waktu:

Call Trace:
 delay_tsc+0x4a/0x80
 __const_udelay+0x2c/0x30
 e1000_acquire_swflag_ich8lan+0xa2/0x240 [e1000e]
 e1000e_read_phy_reg_igp+0x29/0x80 [e1000e]
 e1000e_phy_has_link_generic+0x85/0x120 [e1000e]
 e1000_check_for_copper_link_ich8lan+0x48/0x930 [e1000e]
 e1000e_has_link+0x55/0xd0 [e1000e]
 e1000_watchdog_task+0x5e/0x960 [e1000e]

Ini mengisyaratkan saya untuk masalah dalam e1000emodul kartu Ethernet, dan memang sudo rmmod e1000emembuat beban CPU tinggi segera hilang [ bug e1000e # 26 ].

tanius
sumber
4
echo l > /proc/sysrq-triggertampaknya tidak bekerja pada proxmox berkata dengan sysrq: SysRq : This sysrq operation is disabled.sedih.
hak8 atau
1
sysrq perlu diaktifkan kembali dengan sysctl -w kernel.sysrq = 1 lihat askubuntu.com/questions/911522/…
Sebastien
Bagaimana Anda memahami e1000 yang menyebabkan masalah? Hanya karena itu terus diulang?
onurcanbektas
@onurcanbektas Ya - hasil yang paling sering diulang adalah penyebab yang paling mungkin. Karena backtraces adalah pemeriksaan tempat CPU sibuk dengan saat itu macet.
tanius
70

Mengapa kworker memakan CPU Anda (lanjutan)? Sebagai alternatif untuk jawaban saya yang lain di sini , Perf adalah cara yang lebih profesional untuk menganalisis tugas-tugas kernel yang menghambat CPU Anda:

  1. Pasang perf:

    sudo apt-get install linux-tools-common linux-tools-3.11.0-15-generic
    

    (Paket kedua harus sesuai dengan versi kernel Anda. Anda dapat menginstal dulu linux-tools-commondan panggil perfuntuk memberi tahu Anda paket mana yang dibutuhkan.)

  2. Rekam 10 detik dari backtraces di semua CPU Anda:

    sudo perf record -g -a sleep 10
    
  3. Analisis rekaman Anda:

    sudo perf report
    

    (Arahkan grafik panggilan dengan , , , dan Enter.)

tanius
sumber
2
Di sistem saya, berjalan di dalam mesin virtual VMware, menggunakan perfsaya melacak masalah ke sd_modmodul kernel. Menonaktifkan SCSI dalam vmxfile mencegah modul memuat dan mengembalikan sistem ke kecepatan normal:scsi0.present = "FALSE"
feklee
E: Tidak dapat menemukan paket linux-tools-3.11.0-15-generic E: Tidak dapat menemukan paket apa pun dari glob 'linux-tools-3.11.0-15-generic' E: Tidak dapat menemukan paket apa pun dengan regex 'linux-tools-3.11.0-15-generic'
Paddy
@ Paddy: Silakan periksa jawabannya lagi :-) "Paket [linux-tools - * - generic] harus cocok dengan versi kernel Anda. Pertama-tama Anda dapat menginstal hanya linux-tools-common dan panggil perf untuk membiarkannya memberi tahu Anda paket mana yang kebutuhan."
tanius
8

Hanya untuk memberi tahu semua orang. Saya mengalami masalah ini, diinstal perf (yang merupakan alat yang hebat), itu menunjuk ke penguncian berputar dan XFS. Itu menunjuk ke NFS. Kemudian saya menyadari salah satu tunggangan saya keluar dari ruang. Membebaskan ruang menyebabkan CPU kworker turun ke 0.

Jadi ternyata ini bisa menjadi gejala kehabisan ruang drive pada server NFS yang sibuk!

Erik Aronesty
sumber
1
Saya perhatikan saya mengalami krisis pekerja ketika virtualbox spesifik sedang berjalan. Ternyata yang menjalankan NFS dengan host saya untuk berbagi file. Namun itu tidak mendekati penuh. Melepas NFS "menyelesaikan" masalah. Saya kira saya akan berbagi dengan sshfs mount.
Programster
4

Saya baru-baru ini menginstal Ubuntu Natty pada drive eksternal paspor usb wd. Ketika saya mulai di desktop saya yang berusia sekitar dua tahun, semuanya bekerja seperti pesona. Ketika saya mulai menggunakan laptop baru saya (sistem MSI gt680r), komputer akan melambat setelah saya membangunkan komputer dari tidur, atau jika saya mencolokkan disk usb lain.

Proses kerja membutuhkan lebih banyak CPU, dan mouse membeku dari waktu ke waktu.

Saya telah membaca beberapa solusi di berbagai forum yang tidak berfungsi.

Saya masuk ke bios laptop saya, di mana ada:

Hand XCHI OFF: Enabled
EHCI Hand OFF: disabled

Saya berubah untuk:

Hand XCHI OFF: disabled
EHCI Hand OFF: disabled

dan sejak itu, tidak membeku lagi di laptop saya.

Saya akan mengaktifkan kembali jika dan ketika masalah diperbaiki.

CedCannes
sumber
1
Adakah yang bisa menjelaskan mengapa ini terjadi? Bagaimana XCHI terhubung?
GuySoft
0

Saya pikir menonaktifkan Nepomuk dapat membantu Anda:

http://www.freetechie.com/blog/disable-nepomuk-desktop-search-on-kde-4-4-2-kubuntu-lucid-10-04/

Extender
sumber
terima kasih tapi saya sudah menginstal salinan baru Kubuntu 11.04 dan masalah yang disebutkan sebelumnya hilang.
davorao
1
Sementara ini secara teoritis dapat menjawab pertanyaan, akan lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini, dan menyediakan tautan untuk referensi.
fossfreedom