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?
sumber
Jawaban:
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.
sumber
PATH
dir, 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.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.
sumber