pengembangan-web-mp.com

Adakah yang bisa menjelaskan dengan tepat apa itu IOWait?

Sebanyak yang saya baca tentang iowait, masih merupakan misteri bagi saya.

Saya tahu ini adalah waktu yang dihabiskan oleh CPU untuk menunggu operasi IO untuk menyelesaikan, tetapi operasi IO tepatnya? Apa yang saya juga tidak yakin, mengapa ini sangat penting? Tidak bisakah CPU melakukan sesuatu yang lain sementara 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?

207
Peter Krumins

Saya tahu ini adalah waktu yang dihabiskan oleh CPU untuk menunggu operasi IO selesai, tapi operasi IO tepatnya? Apa yang saya juga tidak yakin, mengapa ini sangat penting? Tidak bisakah CPU melakukan sesuatu yang lain sementara operasi IO selesai, dan kemudian kembali memproses data?

Ya, sistem operasi akan menjadwalkan proses lain untuk dijalankan saat satu diblokir di IO. Namun di dalam proses itu, kecuali jika menggunakan asinkron IO, itu tidak akan maju sampai apapun IO operasi selesai.

Juga alat apa yang tepat untuk mendiagnosis proses apa yang sebenarnya menunggu IO.

Beberapa alat yang menurut Anda berguna

  • iostat, untuk memonitor waktu servis disk Anda
  • iotop (jika kernel Anda mendukungnya), untuk memantau rincian IO permintaan per proses
  • strace, untuk melihat operasi aktual yang dikeluarkan oleh suatu proses

Dan apa cara untuk meminimalkan waktu tunggu IO?

  • memastikan Anda memiliki memori fisik gratis sehingga OS dapat men-cache blok disk di memori
  • pertahankan penggunaan disk sistem file Anda di bawah 80% untuk menghindari fragmentasi yang berlebihan
  • tune sistem file Anda
  • menggunakan pengontrol array yang didukung baterai
  • pilih ukuran buffer yang baik saat melakukan operasi io
103
Dave Cheney

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 gangguan perangkat keras sebagai persentase kutu prosesor. Interupsi perangkat lunak biasanya dinyalakan secara terpisah sebagai %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 kemacetan di 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 sederhana akan ditampilkan dalam %wa.

Mengurangi IOWTait

Juga, karena kita sekarang hampir memasuki tahun 2013, di samping apa yang dikatakan orang lain, pilihan perangkat penyimpanan IO yang cukup terjangkau, yaitu SSD. SSD luar biasa !!!

48
Grumpy

iowait

iowait adalah saat dimana prosesor/prosesor menunggu (yaitu dalam keadaan idle dan melakukan tidak ada ), di mana sebenarnya ada adalah 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 memiliki apa-apa untuk dilakukan, selain dari proses yang terikat I/O (yaitu proses yang melakukan lebih banyak I/O dari 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 (dari paket sysstat, tersedia di sebagian besar * mesin nix)
  • iostat
  • sarface (front-end ke sar)
36
Xerxes

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 dapat 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:

Untuk meringkasnya dalam satu kalimat, 'iowait' adalah persentase waktu CPU menganggur DAN setidaknya ada satu I/O yang sedang berlangsung.

Setiap CPU dapat berada di salah satu dari empat negara: pengguna, sys, idle, iowait.

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:

Jika CPU idle, kernel kemudian menentukan apakah ada setidaknya satu I/O saat ini sedang dalam proses untuk disk lokal atau disk yang dipasang dari jarak jauh (NFS) yang telah diinisiasi dari CPU itu. Jika ada, maka penghitung 'iowait' bertambah satu. Jika tidak ada I/O dalam proses yang dimulai dari CPU itu, penghitung 'idle' bertambah satu.

Dan ini sebuah contoh:

Katakanlah ada dua program yang berjalan pada CPU. Salah satunya adalah program 'dd' membaca dari disk. Yang lain adalah program yang tidak I/O tetapi menghabiskan 100% waktunya untuk melakukan pekerjaan komputasi. Sekarang asumsikan bahwa ada masalah dengan subsistem I/O dan bahwa I/O fisik mengambil alih satu detik untuk menyelesaikan. Setiap kali program 'dd' tertidur sambil menunggu I/O-nya selesai, program lain dapat berjalan pada CPU itu. Ketika interupsi jam terjadi, akan selalu ada program yang berjalan di mode pengguna atau mode sistem. Oleh karena itu, nilai% idle dan% iowait akan menjadi 0. Meskipun iowait adalah 0 sekarang, itu tidak berarti TIDAK ada masalah I/O karena jelas ada satu jika I/O fisik mengambil alih satu detik untuk menyelesaikan.

Teks lengkapnya layak dibaca. Ini adalah mirror halaman ini , kalau-kalau turun.

34
haridsv

Untuk Solaris, saya menggunakan DTrace untuk melihat apa yang sedang dilakukan proses jika saya perlu melihat operasi I/O yang sedang berjalan. Untuk Linux, ada program serupa yang disebut systemtap yang menyediakan tingkat keterpaparan yang sama terhadap kernel dan proses panggilan.

Salah satu contoh yang saya gunakan ketika mempelajari DTrace adalah membandingkan perintah cp dengan perintah dd. Anda dapat melihat bahwa dd melakukan lebih banyak pembacaan untuk penulisan, sedangkan cp tidak, sebagian besar karena ukuran buffer dd digunakan secara default (jika saya ingat benar).

1
Milner

Apa jenis operasi IO 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 memori lebih banyak dan lebih cepat, dapatkan disk lebih cepat, defrag disk yang Anda miliki.

Jika ini adalah aplikasi in-house yang merupakan bottleneck, lihat apakah dapat dioptimalkan untuk membaca dalam blok yang lebih besar atau melakukan IO asinkron.

0
Jeremy French

menggunakan ps aux bisa mencetak proses STAT
jika stat adalah D atau Ds, prosesnya dalam kondisi Uninterruptible sleep (biasanya IO)
ketika suatu proses masuk ke Uninterruptible sleep, nr_iowait dari runqueue ditambahkan, dan jika nr_iowait> 0, waktu idle cpu dihitung ke 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/

0
Singo