Soru IOWait'in ne olduğunu tam olarak açıklayabilir mi?


İowait hakkında okuduğum kadarıyla, hala benim için gizem.

IO işlemlerinin tamamlanmasını bekleyen CPU tarafından harcanan süreyi biliyorum, ama ne tür IO operasyonları tam olarak? Ayrıca emin olmadığım şey, neden bu kadar önemli? IO işlemi tamamlanırken işlemci başka bir şey yapamaz mı ve sonra işlem verilerine geri dönemez mi?

Ayrıca hangi süreçlerin tam olarak IO için beklediğini teşhis etmek için doğru araçlar nelerdir.

Ve IO bekleme süresini en aza indirmenin yolları nelerdir?


171
2018-05-27 09:52


Menşei


Ve ayrıca, yüksek iowait nedir? - Muhamed Huseinbašić


Cevaplar:


CPU'nun harcadığı zamanı biliyorum.   IO işlemlerini beklemek   tamam, ama ne tür bir   operasyonlar tam olarak? Ben de neyim   emin değil, neden bu kadar önemli?   CPU sadece başka bir şey yapamaz mı   IO işlemi tamamlandığında ve   daha sonra işleme verilerine geri dönün?

Evet, işletim sistemi, IO'da engellendiğinde çalıştırılacak diğer işlemleri zamanlayacak. Ancak, bu süreç içinde, asenkron IO kullanmıyorsa, IO işlemi tamamlanana kadar ilerlemez.

Ayrıca doğru araçlar nelerdir   süreçlerin tam olarak ne yaptığını teşhis etmek   IO için bekle.

Faydalı bulabileceğiniz bazı araçlar

  • iostatdisklerinizin servis sürelerini izlemek için
  • iotop (çekirdeğiniz destekliyorsa), işlem başına IO isteklerinin dökümünü izlemek için
  • straceBir süreç tarafından çıkarılan fiili işlemlere bakmak

Ve IO'yu en aza indirmenin yolları nelerdir?   bekleme zamanı?

  • OS belleğin disk belleğini önbelleğe alabilmesi için ücretsiz fiziksel belleğinizin bulunduğundan emin olun
  • Aşırı parçalanmayı önlemek için dosya sisteminizin disk kullanımını% 80'in altında tutun
  • dosya sisteminizi ayarlayın
  • batarya destekli dizi denetleyicisi kullan
  • io işlemleri gerçekleştirirken iyi tampon boyutları seçin

90
2018-05-27 10:28



"Arka uç depolama alanınızın G / Ç yükünüze ayak uydurmak için yeterince hızlı olduğundan emin olun." - jgoldschrafe
@Dave Cheney, Süreç boşta kaldığında, çünkü IO'da beklemekte. Yani IOWait ve boşta arasındaki fark nedir? - ctrl-alt-delor
IOwait'te, süreç, diskler üzerindeki veri bozulma risklerinden kaçınmak için öldürülemeyeceği anlamına gelen "kesintisiz uyku" durumundadır. Normal bir boşta kalma süreci gerçekten hiçbir şey yapmaz, dolayısıyla onu öldürmek için daha az risk vardır. - mveroone
Pratik olarak, IO'nuz çok yavaş demektir. "Sunucuyu daha hızlı hale getirin", CPU'nun sınırlı olup olmadığına veya CPU'nuzun açılmaya devam edeceğine göre farklıdır, çünkü birisi yavaş dizüstü bilgisayar diskinin bir veritabanı sunucusunu çalıştırmak için yeterli olduğunu ve IO yükünün CPU'nun yalnızca% 2'sini kullanmasını bekler. IO'nun bitirmesi için deli. - TomTom
OMG Burada en iyi 3 cevabın olduğuna inanamıyorum yanlış. Haridsv tarafından verilen cevap doğrudur. İşlemin tamamlanması için işlemci "beklemez". Evet, bazı io engelleniyor olabilir - genellikle bunun için iyi bir neden vardır ve bazı durumlarda tüm io engelleme olabilir. Ancak, tamamen eşzamansız işlemler için ortaya çıkan iowait'i de görebilirsiniz. - symcbean


Eski soru, son zamanlarda çarptı, ancak mevcut cevapların yetersiz olduğunu hissetti.

IOWait tanımı ve özellikleri

IOWait (genellikle etiketli %wa üstte) boş bir alt kategoridir (%idle CPU genellikle hiçbir şey yapmadığı anlamına gelen tanımlanmış alt kategoriler hariç tüm boşta ifade edilir). Bu nedenle, CPU'nun işleyebileceği başka bir süreç olduğu sürece, bunu yapar. Ayrıca, boşta, kullanıcı, sistem, iowait, vb CPU ile ilgili bir ölçümdür. Başka bir deyişle, iowait'i io için beklemenin neden olduğu boşta düşünebilirsiniz.

Tam olarak, iowait, işlemci kesintilerinin yüzdesi olarak donanım kesintilerini almak ve işlemek için harcanan zamandır. Yazılım kesintileri genellikle ayrı olarak etiketlenir %si.

Önem ve Potansiyel kavram yanılgısı

IOWait önemlidir, çünkü genellikle IO'da darboğaz olup olmadığını bilmek önemli bir metriktir. Ama iowait'in yokluğu, mutlaka başvurunuz anlamına gelmez. değil IO'da darboğazlanmış. Bir sistem üzerinde çalışan iki uygulamayı düşünün. Eğer program 1 yoğun olarak io darboğazlanmışsa ve program 2 ağır bir CPU kullanıcısı ise, %user + %system CPU hala ~% 100 ve buna benzer bir şey olabilir, iowait 0 gösterecektir. Ama bu sadece program 2 yoğun ve program 1 hakkında hiçbir şey söylemek için nispeten görünüyor çünkü tüm bu CPU'nun bakış açısından.

IOWait Algılamak İçin Araçlar

Dave Cheney ve Xerxes mesajlarını gör

Ama aynı zamanda basit top gösterecek %wa.

IOWait azaltılması

Ayrıca, neredeyse 2013'e girdiğimiz gibi, başkalarının söylediklerine ek olarak, sadece harika IO depolama aygıtları seçeneği, SSD'ler gibi uygun maliyetlidir. SSD'ler harika!


44
2017-12-25 12:45





iowait

iowait İşlemcinin / işlemcilerin beklediği zamandır (örn. boşta kalma durumu ve yapar hiçbir şey değil), orada aslında oldu Olağanüstü disk G / Ç istekleri.

Bu genellikle blok cihazlarının (yani, fiziksel disklerin değil, hafızanın) çok yavaş veya basitçe doymuş olduğu anlamına gelir.

Bu nedenle, sisteminizde yüksek bir yük ortalamasını görüyorsanız ve bunun çoğunun aslında G / Ç beklemesinden kaynaklandığını fark ederseniz, sisteminizin sorunlu olduğu anlamına gelmeyeceğini unutmayın. Makinenin, G / Ç bağlı süreçlerden (yani, her şeyden daha fazla G / Ç işlemi yapan (I / O-bağlı olmayan sistem çağrıları)) başka bir işlemi yoktur. Bu, sistemde yaptığınız her şeyin hala çok duyarlı olduğu gerçeğinden de anlaşılmalıdır.

araçlar

  • sar ( sysstat Paket, çoğu * nix makinelerde mevcuttur)
  • iostat
  • sarface (bir ön uç sar)

34
2018-05-27 10:32



Kesinlikle konuşmak gerekirse, G / Ç bekleme süresinin bu tanımı sadece tek işlemci sistemlerinde geçerlidir. Çok işlemcili sistemler için biraz daha rafine edilmek zorundadır: veithen.blogspot.be/2013/11/iowait-linux.html - Andreas Veithen
Ne ölçüde iowait etkiler Load Average? Diyelim, ağ için bekleyen 100 iş parçacığı 100 mi olacak? - Ivan Balashov


Bu bağlantıdan açıklama ve örnekleri çok yararlı buldum: Tam olarak "iowait" nedir?. BTW, tam anlamıyla, I / O burada disk I / O'ye atıfta bulunur, fakat ağa bağlı diskte (nfs gibi) G / Ç'yi de içerebilir. bu diğer gönderi.

Birkaç önemli bölümden alıntı yapacağım (bağlantının kesilmesi durumunda), bunların bir kısmı zaten başkalarının söyledikleri şeylerin tekrarı olacaktı, ama benim için en azından bunlar daha açıktı:

Bir cümlede özetlemek gerekirse, 'iowait' zamanın yüzdesidir.   CPU boşta ve devam eden en az bir G / Ç var.

Her bir CPU dört durumdan birinde olabilir: kullanıcı, sys, boşta, iowait.

Bir süreç I / O için beklerken sistem başka süreçler çalışmaya hazır olduğunda ne olduğunu merak ediyordum. Aşağıdaki açıklar:

CPU boşta kalırsa, çekirdek en azından olup olmadığını belirler.   bir G / Ç şu anda yerel bir diske veya uzaktan devam ediyor   Bu işlemciden başlatılan takılı disk (NFS). Eğer varsa   öyleyse, 'iowait' sayacı bir artırılır. Eğer yok ise   İşlemciden başlatılan G / Ç işlemi, 'boş' sayaç   bir tarafından artırılır.

Ve burada bir örnek:

CPU üzerinde çalışan iki program olduğunu varsayalım. Bir 'dd'   diskten okuma programı. Diğeri, G / Ç yapmayan bir programdır.   ancak zamanının% 100'ünü hesaplama işi yapıyor. Şimdi varsayalım   I / O alt sistemi ve fiziksel I / O'ları ile ilgili bir sorun var   tamamlamak için bir saniye sürüyor. 'Dd' programı ne zaman   I / O'larını tamamlamak için beklerken uyurken, diğer program   CPU üzerinde çalışabiliyor. Saat kesintisi olduğunda, orada olacak   Her zaman kullanıcı modunda veya sistem modunda çalışan bir program olun.   Bu nedenle,% boşta ve% iowait değerleri 0 olacaktır.   0, bu bir G / Ç problemi olmadığı anlamına gelmiyor çünkü orada   fiziksel I / O'lar bir saniyeyi alıyorsa   tamamlayınız.

Tam metin okumaya değer. Burada bir bu sayfanın aynası, inmesi durumunda.


27
2018-05-27 12:34





Solaris için, hangi G / Ç işlemlerinin çalıştığını görmem gerekiyorsa işlemlerin ne yaptığına bakmak için DTrace kullanıyorum. Linux için, benzer bir program var SystemTap'ı Bu, çekirdeğe ve işlem çağrılarına benzer düzeyde bir pozlama sağlar.

DTrace'i öğrenirken kullandığım bir örnek, cp komuta etmek dd Komut. Görebilirsin dd yazmak için çok daha fazla okuma yapar cp çoğunlukla tampon boyutu nedeniyle değil dd varsayılan olarak kullanır (doğru hatırlıyorsam).


1
2018-05-27 10:01





Ne tür bir IO operasyonları uygulamalarınıza ve kurulumunuza bağlı olacaktır.

Bazı durumlarda, CPU'nun devam etmesi gereken verileri veya talimatları alamaması önemlidir. Bazı durumlarda devam edebilir, ancak uygulamaların neler yapabileceğine bağlı olarak değişecektir. Çok sayıda disk erişimi olan tek bir iş parçacığınız varsa, beklemeniz gerekecektir.

IO zamanını en aza indirmek için, daha fazla ve daha hızlı bellek satın alın, daha hızlı diskler alın, sahip olduğunuz diskleri birleştirin.

Eğer darboğaz olan bir ev uygulamasında ise, daha büyük bloklarda okunacak ya da zaman uyumsuz olarak IO yapılabileceğine bakın.


0
2018-01-01 15:50



Tamam, bu yüzden iowait harcanan zaman bloke etme IO operasyonu? - Peter Krumins
Örneğin, eğer bir select () veya poll () yaparsam ve bloklarsa, bir betimleyici hazır olana kadar geçen süre iowait zamanını oluşturur mu? - Peter Krumins
Bunun bir programlama sorusu gibi göründüğü kadarıyla SO'ya ait olacağını düşünüyorum. - Jeremy French
Peteris - evet, bu düşünmek için iyi bir yol. - user2278


ps aux kullanarak baskı işlemini yapabilir
stat D veya Ds ise, süreç Kesintisiz uykuda (genellikle IO)
Bir işlem Kesintisiz uykuya girdiğinde, runqueue nr_iowait eklenir ve eğer nr_iowait> 0 ise, CPU'nun boşta kalma süresi iowait olarak sayılır.

vmstat ayrıca kaç işlem bloğunu gösterir
r: Çalışma zamanı için bekleyen işlem sayısı.
b: Kesintisiz uykuda işlem sayısı.

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


0