Sebanyak yang saya baca tentang iowait, itu masih merupakan misteri bagi saya.
Saya tahu ini adalah waktu yang dihabiskan oleh CPU untuk menunggu operasi IO selesai, tetapi operasi IO seperti apa tepatnya? Yang saya juga tidak yakin, mengapa itu penting? Tidak bisakah CPU melakukan sesuatu yang lain saat operasi IO selesai, dan kemudian kembali memproses data?
Juga alat apa yang tepat untuk mendiagnosis proses apa yang sebenarnya menunggu IO.
Dan apa cara untuk meminimalkan waktu tunggu IO?
Jawaban:
Ya, sistem operasi akan menjadwalkan proses lain untuk dijalankan saat satu diblokir di IO. Namun di dalam proses itu, kecuali jika menggunakan asynchronous IO, itu tidak akan berlanjut sampai apapun operasi IO selesai.
Beberapa alat yang menurut Anda berguna
iostat
, untuk memantau waktu servis disk Andaiotop
(jika kernel Anda mendukungnya), untuk memantau rincian permintaan IO per prosesstrace
, untuk melihat operasi aktual yang dikeluarkan oleh suatu prosessumber
Pertanyaan lama, baru-baru ini bertemu, tetapi merasa jawaban yang ada tidak mencukupi.
IOWTunggu definisi & properti
IOWait (biasanya diberi label
%wa
di atas) adalah sub-kategori idle (%idle
biasanya dinyatakan sebagai semua idle kecuali subkategori yang ditentukan), artinya CPU tidak melakukan apa-apa. Oleh karena itu, selama ada proses lain yang dapat diproses CPU, ia akan melakukannya. Selain itu, idle, pengguna, sistem, iowait, dll adalah ukuran sehubungan dengan CPU. Dengan kata lain, Anda dapat menganggap iowait sebagai idle yang disebabkan oleh menunggu io.Tepatnya, iowait adalah waktu yang dihabiskan untuk menerima dan menangani interupsi perangkat keras sebagai persentase kutu prosesor. Interupsi perangkat lunak biasanya dinyalakan secara terpisah
%si
.Pentingnya & Kesalahpahaman potensial
IOWait penting karena sering merupakan metrik utama untuk mengetahui apakah Anda mengalami hambatan pada IO. Tapi absennya iowait tidak berarti aplikasi Anda tidak mengalami hambatan pada IO. Pertimbangkan dua aplikasi yang berjalan pada suatu sistem. Jika program 1 sangat macet dan program 2 adalah pengguna CPU yang berat,
%user + %system
CPU mungkin masih sekitar ~ 100% dan sesuai dengan itu, iowait akan menunjukkan 0. Tapi itu hanya karena program 2 intensif dan relatif tidak mengatakan apa-apa tentang Program 1 karena semua ini dari sudut pandang CPU.Alat untuk Mendeteksi IOWTunggu
Lihat posting oleh Dave Cheney dan Xerxes
Tetapi juga
top
akan ditampilkan sederhana%wa
.Mengurangi IOWTait
Juga, karena kita sekarang hampir memasuki tahun 2013, di samping apa yang orang lain katakan, pilihan perangkat penyimpanan IO yang cukup terjangkau, yaitu SSD. SSD luar biasa !!!
sumber
iowait
iowait
adalah saat prosesor / prosesor menunggu (yaitu dalam kondisi siaga dan tidak melakukan apa - apa ), di mana sebenarnya ada permintaan I / O disk yang luar biasa.Ini biasanya berarti bahwa perangkat blok (yaitu disk fisik, bukan memori) terlalu lambat, atau hanya jenuh.
Karena itu Anda harus mencatat bahwa jika Anda melihat rata-rata beban tinggi pada sistem Anda, dan pada pemberitahuan inspeksi bahwa sebagian besar ini sebenarnya disebabkan oleh menunggu I / O, itu tidak berarti bahwa sistem Anda dalam masalah - dan ini terjadi ketika Anda mesin tidak ada hubungannya, selain dari proses yang terikat I / O (yaitu proses yang melakukan lebih banyak I / O daripada yang lainnya (panggilan sistem yang tidak terikat I / O)). Itu juga harus jelas dari kenyataan bahwa apa pun yang Anda lakukan pada sistem masih sangat responsif.
alat
sar
(darisysstat
paket, tersedia di sebagian besar * mesin nix)iostat
sarface
(ujung depan kesar
)sumber
iowait
pengaruhnyaLoad Average
? Katakanlah, 100 utas menunggu jaringan, akankah LA menjadi 100?Saya menemukan penjelasan dan contoh-contoh dari tautan ini sangat berguna: Apa sebenarnya "iowait"? . BTW, demi kelengkapan, I / O di sini merujuk ke disk I / O, tetapi juga bisa menyertakan I / O pada disk yang dipasang jaringan (seperti nfs), seperti yang dijelaskan dalam posting lain ini .
Saya akan mengutip beberapa bagian penting (jika tautannya mati), beberapa di antaranya akan menjadi pengulangan dari apa yang telah dikatakan orang lain, tetapi bagi saya setidaknya ini lebih jelas:
Saya bertanya-tanya apa yang terjadi ketika sistem memiliki proses lain yang siap dijalankan sementara satu proses sedang menunggu I / O. Di bawah ini menjelaskannya:
Dan ini sebuah contoh:
Teks lengkapnya layak dibaca. Ini adalah cermin dari halaman ini , kalau-kalau turun.
sumber
Untuk Solaris, saya menggunakan DTrace untuk melihat apa yang dilakukan proses-proses tersebut jika saya perlu melihat operasi I / O yang sedang berjalan. Untuk Linux, ada program serupa yang disebut systemtap yang menyediakan tingkat eksposur yang mirip dengan kernel dan proses panggilan.
Salah satu contoh yang saya gunakan ketika mempelajari DTrace adalah membandingkan
cp
perintah kedd
perintah. Anda dapat melihat bahwadd
lebih banyak membaca untuk penulisan, sementaracp
tidak, sebagian besar karena ukuran bufferdd
menggunakan secara default (jika saya mengingat dengan benar).sumber
Operasi IO macam apa yang akan tergantung pada aplikasi dan pengaturan Anda.
Ini penting karena dalam beberapa kasus CPU tidak bisa mendapatkan data atau instruksi yang diperlukan untuk melanjutkan. Dalam beberapa kasus ini dapat berlanjut, tetapi itu akan tergantung pada aplikasi apa yang berjalan seperti apa yang dapat dilakukan. Jika Anda memiliki aplikasi berulir tunggal yang melakukan banyak akses disk, Anda harus menunggu.
Untuk meminimalkan waktu IO, beli lebih banyak dan lebih cepat memori, dapatkan disk lebih cepat, defrag disk yang Anda miliki.
Jika ini adalah aplikasi in-house yang merupakan hambatan lihat apakah itu dapat dioptimalkan untuk membaca dalam blok yang lebih besar atau untuk melakukan IO secara tidak sinkron.
sumber
menggunakan ps aux dapat mencetak proses STAT
jika stat adalah D atau Ds, prosesnya dalam Uninterruptible sleep (biasanya IO)
ketika suatu proses memasukkan Uninterruptible sleep, nr_iowait dari runqueue ditambahkan, dan jika nr_iowait> 0, waktu idle cpu dihitung untuk iowait
vmstat juga menunjukkan berapa banyak blok proses
r: Jumlah proses yang menunggu waktu berjalan.
b: Jumlah proses dalam tidur yang tidak terputus.
http://bencane.com/2012/08/06/troubleshooting-high-io-wait-in-linux/
sumber