Jumat lalu saya memutakhirkan server Ubuntu saya menjadi 11,10, yang sekarang berjalan dengan kernel 3.0.0-12-server. Sejak itu kinerja keseluruhan telah menurun secara dramatis. Sebelum peningkatan, beban sistem sekitar 0,3, tetapi saat ini berada pada 22-30 pada sistem CPU 8 inti dengan 16GB RAM (gratis 10GB, tanpa swap digunakan).
Saya akan menyalahkan driver sistem file BTRFS dan array MD yang mendasari, karena [md1_raid1] dan [btrfs-transacti] menghabiskan banyak sumber daya. Tetapi semua [pekerja / *: *] mengkonsumsi lebih banyak.
sar
telah menghasilkan sesuatu yang mirip dengan ini sejak Jumat:
11:25:01 CPU %user %nice %system %iowait %steal %idle
11:35:01 all 1,55 0,00 70,98 8,99 0,00 18,48
11:45:01 all 1,51 0,00 68,29 10,67 0,00 19,53
11:55:01 all 1,40 0,00 65,52 13,53 0,00 19,55
12:05:01 all 0,95 0,00 66,23 10,73 0,00 22,10
Dan iostat
menegaskan tingkat penulisan yang sangat buruk:
sda 129,26 3059,12 614,31 258226022 51855269
sdb 98,78 24,28 3495,05 2049471 295023077
md1 191,96 202,63 611,95 17104003 51656068
md0 0,01 0,02 0,00 1980 109
Pertanyaannya adalah: Bagaimana saya bisa melacak mengapa benang pekerja menghabiskan begitu banyak sumber daya (dan yang mana)? Atau lebih baik: Apakah ini masalah yang diketahui dengan kernel 3.0, dan dapatkah saya mengubah dengan parameter kernel?
Edit:
Saya memperbarui Kernel ke versi baru 3.1 seperti yang direkomendasikan oleh pengembang BTRFS. Tapi sayangnya ini tidak mengubah apa pun.
sumber
pcie_ports=compat
ataupcie_ports=native
. (Coba 'pribumi' terlebih dahulu. Ini lebih kecil kemungkinannya untuk memperbaiki masalah tetapi lebih kecil kemungkinannya untuk menyebabkan masalah lain.)Jawaban:
Saya menemukan utas ini di lkml yang sedikit menjawab pertanyaan Anda. (Sepertinya Linus sendiri bingung bagaimana mencari tahu asal usul utas-utas itu.)
Pada dasarnya, ada dua cara untuk melakukan ini:
Untuk ini, Anda perlu ftrace untuk dikompilasi di kernel Anda, dan untuk mengaktifkannya dengan:
Informasi lebih lanjut tentang fasilitas fungsi pelacak Linux tersedia di dokumentasi ftrace.txt .
Ini akan menampilkan semua utas yang sedang dilakukan, dan berguna untuk melacak beberapa pekerjaan kecil.
Ini akan menampilkan tumpukan satu utas yang melakukan banyak pekerjaan. Anda dapat mengetahui apa yang menyebabkan utas khusus ini memakan CPU (misalnya).
THE_OFFENDING_KWORKER
adalah pid dari pekerja dalam daftar proses.sumber
-E
opsi untuk sleepd, dan penggunaan CPU menghilang!Solusinya adalah: Saya tidak tahu bagaimana menemukan penyebabnya. Sejauh ini tidak ada yang memberi tahu saya.
Tetapi berbicara dengan pengembang BTRFS mengungkapkan bug pada driver btrfs ketika menulis banyak file kecil dalam periode waktu yang sangat singkat. Ini adalah masalah pada kernel dari 3.0 hingga 3.1. Mungkin diperbaiki di 3.2.
Sementara itu saya mendapat patch untuk kernel saat ini yang menyelesaikan masalah.
sumber
Saya memiliki masalah serupa; melihat tumpukan thread pekerja:
Saya pikir itu adalah modul usb. Saya sebelumnya di komputer lain dengan senang hati rmmod'd semua usb dan [uex] modul hci menyadari bahwa saya telah mematikan keyboard (bahkan tidak ctrl-shift-sysrq-U!), Jadi saya akhirnya melakukan ini:
melakukan trik:
Jadi tersangka utama saya adalah gadget ini: RTL8723B * WIFI + Modul Bluetooth. Saya bertanya-tanya sekarang apakah kode manajemen daya menyadari itu adalah perangkat yang sama jika mencoba untuk misalnya mematikan power adapter BT yang tidak digunakan.
konteks:
sumber
echo N >/sys/module/drm_kms_helper/parameters/poll
(dalam mode root)Masalah dengan kartu grafis Intel
sumber