Mengapa sistem meminta "hang" ketika ada banyak proses dalam status 'D'?

1

Saya telah memperhatikan bahwa pada sistem (linux) jika ada banyak proses di "D" (Uninterruptible) state, sistem mulai "menggantung". Keadaan D sebagian besar karena proses menunggu pada I / O.

Dengan "menggantung" maksud saya, saya tidak bisa mengetik perintah di konsol atau memulai proses baru sangat lambat, membuat saya percaya bahwa cpu sedang "sibuk" melakukan sesuatu. Tetapi pemahaman saya adalah bahwa proses dalam keadaan D tidak melakukan apa-apa, tetapi hanya menunggu. Ini harus memerlukan perhitungan cpu dan bahkan membebaskan cpu dan membiarkannya menjadwalkan tugas-tugas lain.

Saya pasti melewatkan sesuatu, karena proses status D juga menambah rata-rata beban sistem. Saya tidak mengerti mengapa ini dilakukan, bagaimana proses dalam tidur yang tidak terputus berkontribusi untuk memuat?

kain
sumber
Jika ada banyak proses menunggu, ada sesuatu yang salah. Apakah misalnya "atas" menampilkan persen besar di iowait (bidang "wa" di baris Cpu)?
Olli
@ Olli, ini dari pengalaman umum saya. Saya tidak memiliki sistem dengan gejala-gejala ini, tetapi saya ingin melakukan tes sekarang.
kain

Jawaban:

1

Ketika Anda mengetik perintah di konsol, "perintah" ini - jika bukan perintah shell builtin - juga merupakan file sistem, yang dapat dieksekusi. Saat Anda mengetik "ls" SEMUA dir dalam variabel PATH Anda dicari agar dapat dieksekusi yang disebut "ls" - setidaknya selama "ls" tidak di-hash sebelumnya.

Pencarian ini berarti mengakses disk, beberapa kali pada beberapa direktori. Jika ketika Anda menulis Anda memiliki banyak proses menunggu I / O, shell Anda juga harus menunggu sebelum dapat mencari perintah yang Anda ketik.

Juga beberapa perintah yang Anda ketikkan juga akan ingin membaca dan / atau menulis ke beberapa file pada disk, menambah menunggu proses I / O ...

Ini tidak menambah beban CPU, tetapi menambah beban I / O yang juga dianggap sebagai "total load" di Linux, mengapa? Saya pikir ini hanya masalah definisi. Lihat http://en.wikipedia.org/wiki/Load_%28computing%29 .

Karena itu, mendistribusikan I / O Anda pada beberapa disk (bukan partisi) dapat meningkatkan kinerja Anda. Memiliki sistem pada satu disk, dan data Anda pada disk lain akan membantu. Pikirkan juga bahwa baru saja memulai shell baru buatlah mencari $ HOME Anda untuk file-file seperti .profile, .bashrc, dan lainnya, dan jika disk sibuk dengan banyak I / O lainnya, ini bisa memakan waktu.

rem
sumber
Pemrosesan baris perintah tidak melihat semua PATHdir, beberapa shell (bash) memiliki hash dari lokasi perintah sebelumnya. Jika itu adalah pencarian PATH, ini akan menjadi kelambatan yang konsisten, namun OP berbicara tentang kelambatan sesekali dalam kondisi sistem tertentu.
Rich Homolka
Jika Anda membaca dengan cermat, Anda akan melihat saya menyebutkan fitur hashing bash di akhir paragraf pertama. Kedua, jika perintah yang diketiknya adalah mengakses disk, pikirkan ls atau find atau perintah apa pun yang melakukan I / O (dan sebagian besar perintah sistem melakukan beberapa I / O), itu akan lambat dan tampak hang jika banyak yang lain juga melakukan I / O.
rem
jadi pada dasarnya sebagian besar perintah cenderung melakukan akses disk dan mereka mungkin hang karena alasan yang sama proses D state macet? Saya tidak yakin, tetapi menyiapkan test case harus mengkonfirmasi ini.
kain
2

D adalah tidur tanpa gangguan. Ya, dalam proses teori dalam keadaan D sedang tidur dan tidak secara langsung menggunakan I / O. Tapi dari pengalaman saya dengan proses di negara ini, kemungkinan besar ada sesuatu yang ditumbuhkan pada driver perangkat. Jika Anda memiliki banyak proses status 'D', maka Sesuatu yang Sangat Buruk (tm) sedang terjadi pada OS Anda. Ini mungkin putaran loop di driver (buang-buang siklus CPU), buffer sedang dibaca dan dibuang, apa pun. Saya akan memeriksa log sistem Anda dan dmesg untuk kesalahan perangkat atau driver perangkat.

Kesimpulannya, D bukan keadaan alami, proses sesekali mungkin diabaikan, tetapi jika Anda memiliki banyak procs D dan mengalami kelambatan, Anda harus melakukan spelunking.

Homolka yang kaya
sumber