Pertanyaan Adakah yang bisa menjelaskan dengan tepat apa itu IOWait?


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

Saya tahu ini adalah waktu yang dihabiskan oleh CPU menunggu operasi IO selesai, tetapi operasi IO jenis apa yang tepat? Apa yang saya juga tidak yakin, mengapa begitu penting? Tidak bisakah CPU melakukan sesuatu yang lain saat operasi IO selesai, dan kemudian kembali ke pemrosesan data?

Juga apa alat yang tepat untuk mendiagnosis proses apa yang (es) lakukan persis menunggu IO.

Dan apa cara untuk meminimalkan waktu tunggu IO?


170
2018-05-27 09:52




Dan juga, apa iowait tinggi itu? - Muhamed Huseinbašić


Jawaban:


Saya tahu ini adalah waktu yang dihabiskan oleh CPU   menunggu operasi IO   lengkap, tapi IO jenis apa   operasi tepatnya? Saya juga apa   tidak yakin, mengapa begitu penting?   Tidak dapat CPU melakukan sesuatu yang lain   sementara operasi IO selesai, dan   kemudian kembali ke pemrosesan data?

Ya, sistem operasi akan menjadwalkan proses lain untuk berjalan sementara satu diblokir di IO. Namun di dalam proses itu, kecuali jika menggunakan IO asynchronous, itu tidak akan berlanjut sampai operasi IO apa pun selesai.

Juga apa alat yang tepat untuk   mendiagnosa proses apa yang tepat   tunggu IO.

Beberapa alat yang mungkin berguna bagi Anda

  • iostat, untuk memantau waktu layanan disk Anda
  • iotop (jika kernel Anda mendukungnya), untuk memantau perincian permintaan IO per proses
  • strace, untuk melihat operasi sebenarnya yang dikeluarkan oleh suatu proses

Dan apa cara untuk meminimalkan IO   waktu tunggu?

  • pastikan Anda memiliki memori fisik gratis sehingga OS dapat menyimpan blok disk di memori
  • simpan penggunaan disk sistem file Anda di bawah 80% untuk menghindari fragmentasi yang berlebihan
  • selaraskan filesystem Anda
  • menggunakan pengontrol array yang didukung baterai
  • pilih ukuran buffer yang baik saat melakukan operasi io

90
2018-05-27 10:28



Jangan lupa "pastikan penyimpanan backend Anda cukup cepat untuk mengikuti beban I / O Anda." - jgoldschrafe
@Dave Cheney, Dan ketika proses saya tidak aktif karena menunggu di IO. Jadi apa perbedaan antara IOWait dan idle? - ctrl-alt-delor
Ketika di IOwait, prosesnya dalam "tidur tidak terputus" yang berarti tidak dapat dibunuh, untuk menghindari risiko merusak data pada disk. proses idle yang normal benar-benar tidak melakukan apa-apa, jadi ada risiko lebih sedikit untuk membunuhnya. - mveroone
Di atas praktis itu berarti IO Anda terlalu lambat. "Membuat server lebih cepat" berbeda apakah Anda CPU terbatas atau CPU Anda kelaparan karena seseorang memutuskan disk notebook lambat cukup untuk menjalankan server database dan beban IO membuat CPU hanya menggunakan 2% dari apa yang bisa, menunggu seperti gila untuk IO selesai. - TomTom
OMG Saya tidak percaya jawaban 3 teratas di sini begitu salah. Jawaban di bawah ini oleh haridsv sudah benar. Tidak ada cpu yang "menunggu" agar io selesai. Ya, beberapa io dapat memblokir - sering ada alasan bagus untuk ini, dan dalam beberapa keadaan semua io dapat memblokir. Tetapi Anda juga dapat melihat iowait terjadi untuk operasi sepenuhnya asynchronous. - symcbean


Pertanyaan lama, baru-baru ini terbentur, tetapi merasa jawaban yang ada tidak mencukupi.

Definisi & properti IOWait

IOWait (biasanya berlabel %wa di atas) adalah sub-kategori idle (%idle biasanya dinyatakan sebagai semua menganggur kecuali subkategori yang ditentukan), yang berarti CPU tidak melakukan apa-apa. Oleh karena itu, selama ada proses lain yang dapat diproses oleh CPU, itu akan melakukannya. Selain itu, idle, pengguna, sistem, iowait, dll adalah pengukuran 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 dari kutu prosesor. Perangkat lunak menyela biasanya dilabelkan secara terpisah sebagai %si.

Pentingnya & Kesalahpahaman Potensial

IOWait penting karena sering merupakan metrik utama untuk mengetahui apakah Anda mengalami bottleneck di IO. Tetapi tidak adanya iowait tidak selalu berarti aplikasi Anda tidak bottlenecked pada IO. Pertimbangkan dua aplikasi yang berjalan pada suatu sistem. Jika program 1 adalah sangat io bottlenecked dan program 2 adalah pengguna CPU berat, yang %user + %system CPU mungkin masih seperti ~ 100% dan secara bersamaan, 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 IOWait

Lihat posting oleh Dave Cheney dan Xerxes

Tetapi juga sederhana top akan ditampilkan %wa.

Mengurangi IOWait

Selain itu, karena kami sekarang hampir memasuki tahun 2013, selain apa yang dikatakan orang lain, pilihan perangkat penyimpanan IO yang cukup mengagumkan juga terjangkau, yaitu SSD. SSD luar biasa !!!


44
2017-12-25 12:45





iowait

iowait adalah waktu yang prosesor / prosesor sedang menunggu (yaitu di keadaan diam dan ya 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 cukup jenuh.

Oleh karena itu Anda harus mencatat bahwa jika Anda melihat rata-rata beban tinggi pada sistem Anda, dan pada pemberitahuan inspeksi bahwa sebagian besar dari ini sebenarnya karena I / O tunggu, itu tidak berarti bahwa sistem Anda dalam masalah - dan ini terjadi ketika Anda mesin tidak ada hubungannya, selain daripada proses I / O-bound (yaitu proses yang melakukan I / O lebih dari apa pun (panggilan sistem non-I / O-bound)). Itu juga harus jelas dari fakta bahwa apa pun yang Anda lakukan pada sistem masih sangat responsif.

alat

  • sar (dari sysstat paket, tersedia di sebagian besar mesin * nix)
  • iostat
  • sarface (ujung depan ke sar)

34
2018-05-27 10:32



Perhatikan bahwa secara tegas, definisi waktu tunggu I / O hanya berlaku pada sistem prosesor tunggal. Perlu sedikit disempurnakan untuk sistem multi-prosesor: veithen.blogspot.be/2013/11/iowait-linux.html - Andreas Veithen
Sejauh mana iowait mempengaruhi Load Average? Katakanlah, 100 utas menunggu jaringan, akankah LA 100? - Ivan Balashov


Saya menemukan penjelasan dan contoh dari tautan ini sangat berguna: Apa sebenarnya "iowait"?. BTW, demi kelengkapan, I / O di sini mengacu pada disk I / O, tetapi bisa juga termasuk I / O pada disk yang terpasang di jaringan (seperti nfs), seperti yang dijelaskan di posting lainnya ini.

Saya akan mengutip beberapa bagian penting (jika tautannya mati), beberapa di antaranya akan merupakan 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 idle 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 menunggu I / O. Di bawah ini menjelaskannya:

Jika CPU dalam keadaan idle, kernel kemudian menentukan apakah ada paling tidak   satu I / O saat ini sedang berlangsung baik ke disk lokal atau jarak jauh   Mount Disk (NFS) yang telah dimulai dari CPU itu. Jika ada   adalah, maka penghitung 'iowait' bertambah satu. Jika tidak ada   I / O dalam proses yang dimulai dari CPU itu, penghitung 'tidak aktif'   bertambah satu.

Dan inilah contohnya:

Katakanlah ada dua program yang berjalan pada CPU. Salah satunya adalah 'dd'   pembacaan program dari disk. Yang lainnya adalah program yang tidak ada I / O   tetapi menghabiskan 100% waktunya melakukan pekerjaan komputasi. Sekarang berasumsi   bahwa ada masalah dengan subsistem I / O dan fisik I / Os   mengambil alih satu detik untuk menyelesaikannya. Kapanpun program 'dd'   tertidur sambil menunggu I / Os untuk menyelesaikan, program lainnya   dapat berjalan di CPU itu. Ketika interupsi jam terjadi, akan ada   selalu menjadi program yang berjalan baik dalam 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 ada   jelas satu jika fisik I / Os mengambil lebih dari satu detik   lengkap.

Teks lengkapnya layak dibaca. Ini dia cermin halaman ini, jika itu turun.


27
2018-05-27 12:34





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

Satu contoh yang saya gunakan ketika belajar DTrace adalah membandingkan a cp perintah untuk a dd perintah. Anda bisa melihatnya dd melakukan lebih banyak membaca untuk menulis, sementara cp tidak, kebanyakan karena ukuran buffer dd digunakan secara default (jika saya mengingatnya dengan benar).


1
2018-05-27 10:01





Jenis operasi IO apa yang akan bergantung pada aplikasi dan pengaturan Anda.

Hal ini penting karena dalam beberapa kasus CPU tidak dapat memperoleh 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 dilakukannya. Jika Anda memiliki aplikasi berulir tunggal yang melakukan banyak akses disk maka Anda harus menunggu.

Untuk meminimalkan waktu IO, beli lebih banyak dan lebih cepat memori, dapatkan lebih cepat disk, defrag disk yang Anda miliki.

Jika itu adalah aplikasi rumah yang merupakan hambatan melihat apakah itu dapat dioptimalkan untuk membaca dalam blok yang lebih besar atau untuk melakukan IO asynchronous.


0
2018-01-01 15:50



Oke, jadi iowait adalah waktu yang dihabiskan dalam pemblokiran Operasi IO? - Peter Krumins
Jadi misalnya, jika saya memilih () atau jajak pendapat () dan memblokir, maka waktu menunggu hingga deskriptor menjadi tersedia akan menjadi waktu iowait? - Peter Krumins
Saya pikir itu akan menjadi milik SO seperti yang terlihat seperti pertanyaan pemrograman. - Jeremy French
Peteris - ya, itu cara yang bagus untuk memikirkannya. - user2278


menggunakan ps aux dapat mencetak STAT proses
jika stat D atau Ds, prosesnya dalam mode Tidur Tidak Terputus (biasanya IO)
ketika sebuah proses memasuki tidur Uninterruptible, nr_iowait 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 pernah terputus.

http://bencane.com/2012/08/06/troubleshooting-high-io-wait-in-linux/


0