Saya telah melihat ke dalam iowait
properti yang ditampilkan dalam output utilitas teratas seperti yang ditunjukkan di bawah ini.
top - 07:30:58 up 3:37, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 86 total, 1 running, 85 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
iowait
secara umum didefinisikan sebagai berikut:
"Ini adalah waktu dimana CPU idle dan ada beberapa IO yang tertunda."
Ini adalah pemahaman saya bahwa suatu proses dijalankan pada satu CPU. Setelah keluar dari jadwal karena menggunakan slot waktu atau setelah diblokir, akhirnya dapat dijadwalkan kembali pada satu CPU lagi.
Dalam kasus permintaan IO, CPU yang membuat proses tidur tanpa gangguan bertanggung jawab untuk melacak iowait
waktu. CPU lain akan melaporkan waktu yang sama dengan waktu idle pada akhirnya karena mereka benar-benar menganggur. Apakah asumsi ini benar?
Selain itu, dengan asumsi ada permintaan IO yang panjang (artinya proses memiliki beberapa peluang untuk dijadwalkan tetapi tidak dijadwalkan karena IO tidak lengkap), bagaimana CPU tahu ada "pending IO"? Dari mana informasi itu diambil? Bagaimana sebuah CPU dapat mengetahui bahwa beberapa proses ditidurkan beberapa saat untuk diselesaikan oleh IO karena salah satu CPU dapat membuat proses tersebut tertidur. Bagaimana status "IO tertunda" ini dikonfirmasi?
sumber
Jawaban:
CPU tidak tahu semua ini, penjadwal tugas tidak.
Definisi yang Anda kutip agak menyesatkan;
procfs(5)
manual saat ini memiliki definisi yang lebih akurat, dengan peringatan:iowait
mencoba mengukur waktu yang dihabiskan menunggu I / O, secara umum. Itu tidak dilacak oleh CPU tertentu, juga tidak bisa (poin 2 di atas - yang juga cocok dengan apa yang Anda ingin tahu). Ini diukur per CPU, sejauh mungkin.Penjadwal tugas “tahu” ada I / O yang tertunda, karena tahu bahwa ia menangguhkan tugas yang diberikan karena menunggu I / O. Ini dilacak per tugas di
in_iowait
bidangtask_struct
; Anda dapat mencariin_iowait
di inti penjadwal untuk melihat bagaimana pengaturannya, dilacak dan dihapus. Artikel terbaru Brendan Gregg tentang Linux memuat rata - rata termasuk informasi latar belakang yang bermanfaat. Theiowait
masuk dalam/proc/stat
, yang adalah apa yang berakhir ditop
, bertambah setiap kali timer tick dicatat, dan proses sedang berlangsung “pada” CPU idle; Anda dapat melihat ini dengan mencariaccount_idle_time
di kode pelacakan waktu CPU penjadwal .Jadi definisi yang lebih akurat adalah "waktu yang dihabiskan untuk CPU ini menunggu I / O, ketika tidak ada yang lebih baik untuk dilakukan" ...
sumber