it-swarm-tr.com

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

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

İşlemcinin bir IO işlemlerin tamamlanmasını beklediği zamanın geçtiğini biliyorum, ama ne tür IO işlemleri tam olarak? Ne de emin değilim, Neden bu kadar önemlidir? IO işlemi tamamlanırken CPU yalnızca başka bir şey yapamaz ve verileri işlemeye geri dönemez mi?

Ayrıca hangi süreç (ler) in tam olarak ES'yi beklediğini teşhis etmek için doğru araçlar nelerdir.

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

207
Peter Krumins

İşlemcinin bir IO işlemlerin tamamlanmasını beklediğini, ancak ne tür IO işlemleri tam olarak beklediğini biliyorum?) Neden bu kadar önemlidir? IO işlemi tamamlanırken CPU yalnızca başka bir şey yapamaz ve verileri işlemeye geri dönemez mi?

Evet, işletim sistemi diğer işlemler IO'da engellendiğinde çalışacak diğer işlemleri zamanlayacaktır. Ancak bu işlemde, eşzamansız G/Ç kullanmıyorsa, IO işlemi tamamlanıncaya kadar) ilerlemez.

Ayrıca hangi süreç (ler) in tam olarak ES'yi beklediğini teşhis etmek için doğru araçlar nelerdir.

Yararlı bulabileceğiniz bazı araçlar

  • iostat, disklerinizin servis sürelerini izlemek için
  • iotop (çekirdeğiniz destekliyorsa) IO istek isteklerinin dökümünü izlemek için)
  • strace, bir işlem tarafından yayınlanan gerçek işlemlere bakmak için

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

  • işletim sisteminin disk bloklarını önbellekte saklayabilmesi için boş fiziksel belleğiniz olduğundan emin olun
  • aşırı parçalanmayı önlemek için dosya sistemi disk kullanımınızı% 80'in altında tutun
  • dosya sisteminizi ayarlayın
  • pil destekli dizi denetleyicisi kullanma
  • io işlemleri yaparken iyi tampon boyutları seçin
103
Dave Cheney

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

IOWait tanımı ve özellikleri

IOWait (genellikle üstte %wa Olarak etiketlenir) boşta bir alt kategoridir (%idle Genellikle tanımlanmış alt kategoriler hariç tüm boşta olarak ifade edilir), yani CPU hiçbir şey yapmaz. Bu nedenle, CPU'nun işleyebileceği başka bir işlem olduğu sürece, bunu yapacaktır. Ek olarak, boşta, kullanıcı, sistem, iowait, vb CPU ile ilgili bir ölçümdür. Başka bir deyişle, iowait'i io'yu beklemenin neden olduğu atıl olarak düşünebilirsiniz.

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

Önemi ve Potansiyel Yanılgısı

IOWait önemlidir, çünkü IO'da tıkanık olup olmadığınızı bilmek genellikle anahtar bir metriktir. Ancak iowait eksikliği, başvurunuzun IO üzerinde değil darboğaz olduğu anlamına gelmez. Bir sistem üzerinde çalışan iki uygulamayı düşünün. Program 1 yoğun şekilde tıkanmışsa ve program 2 ağır bir CPU kullanıcısıysa, CPU'nun %user + %system Hala% 100 gibi bir şey olabilir ve buna göre iowait 0 gösterecektir. Ancak bunun nedeni program 2'nin yoğun olması ve göreceli olarak program 1 hakkında hiçbir şey söylemiyor gibi görünmektedir çünkü tüm bunlar CPU'nun bakış açısındandır.

IOWait Tespit Etme Araçları

Dave Cheney and Xerxes tarafından gönderilen mesajları görüntüle

Ancak %wa 'Da basit bir top gösterilir.

IOWait'i azaltma

Ayrıca, şimdi neredeyse 2013'e girerken, diğerlerinin söylediklerine ek olarak, sadece harika IO depolama cihazları uygun fiyatlı, yani SSD'ler. SSD'ler harika !!!

48
Grumpy

iowait

iowait, işlemcinin/işlemcilerin bekleme (yani boşta çalışma durumunda ve hiçbir şey ), bu sırada olağanüstü disk G/Ç istekleri vardı.

Bu genellikle blok cihazların (yani bellek değil fiziksel diskler) çok yavaş veya sadece doymuş olduğu anlamına gelir.

Bu nedenle, sisteminizde yüksek bir yük ortalaması görürseniz ve muayene sırasında bunun çoğunun aslında G/Ç beklemesinden kaynaklandığını fark etmelisiniz, bu mutlaka sisteminizin sorunlu olduğu anlamına gelmez - ve bu durum, makinenin G/Ç'ye bağlı işlemlerden başka hiçbir şeyi yoktur (başka bir şeyden daha fazla G/Ç yapan işlemler (G/Ç'ye bağlı olmayan sistem çağrıları)). Bu, sistemde yaptığınız her şeyin hala çok duyarlı olduğu gerçeğinden de anlaşılmalıdır.

araçlar

  • sar (çoğu * nix makinede bulunan sysstat paketinden)
  • iostat
  • sarface (sar için bir kullanıcı arabirimi)
36
Xerxes

Bu bağlantıdan açıklama ve örnekleri çok yararlı buldum: "iowait" tam olarak nedir? . BTW, tamlık uğruna, buradaki G/Ç, disk G/Ç'ye atıfta bulunur, ancak bu diğer yazı 'da açıklandığı gibi ağa bağlı bir diskte (nfs gibi) G/Ç'yi de içerebilir. =.

Birkaç önemli bölümden alıntı yapacağım (bağlantı koparsa), bunlardan bazıları başkalarının söylediklerinin tekrarları olurdu, ama en azından bana göre bunlar daha açıktı:

Bir cümleyle özetlemek gerekirse, 'iowait' CPU'nun boşta kalacağı sürenin yüzdesidir ve devam eden en az bir G/Ç vardır.

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

Bir işlem G/Ç'yi beklerken, diğer işlemler çalışmaya hazır olduğunda ne olacağını merak ediyordum. Aşağıda bunu açıklıyor:

CPU boştaysa, çekirdek o anda bir yerel diske veya bu CPU'dan başlatılmış bir uzaktan takılı diske (NFS) devam etmekte olan en az bir G/Ç olup olmadığını belirler. Varsa, 'iowait' sayacı bir arttırılır. İşlemde bu CPU'dan başlatılan bir G/Ç yoksa, 'boşta' sayacı bir artırılır.

Ve işte bir örnek:

Bir CPU üzerinde çalışan iki program olduğunu varsayalım. Biri diskten okunan 'dd' programıdır. Diğeri I/O yapmayan ancak zamanının% 100'ünü hesaplama işi yaparak geçiren bir programdır. Şimdi, G/Ç alt sisteminde bir sorun olduğunu ve fiziksel G/Ç'lerin tamamlanması bir saniyeyi aldığını varsayın. 'Gg' programı I/O'larının tamamlanmasını beklerken uykuya daldığında, diğer program bu CPU üzerinde çalışabilir. Saat kesintisi meydana geldiğinde, her zaman kullanıcı modunda veya sistem modunda çalışan bir program olacaktır. Bu nedenle,% boşta ve% iowait değerleri 0 olacaktır. İowait şu anda 0 olmasına rağmen, bu bir G/Ç sorunu olmadığı anlamına gelmez, çünkü fiziksel G/Ç'lerin tamamlanması bir saniyeden fazla sürüyorsa açıktır.

Tam metin okumaya değer. Aşağı inmesi durumunda --- bu sayfanın aynası .

34
haridsv

Solaris için DTrace'i kullanarak hangi G/Ç işlemlerinin çalıştığını görmem gerekirse süreçlerin neler yaptığını inceliyorum. Linux için, çekirdek ve işlem çağrılarına benzer düzeyde maruz kalma sağlayan systemtap adlı benzer bir program vardır.

DTrace öğrenirken kullandığım bir örnek, bir cp komutunu dd komutuyla karşılaştırmaktı. dd'nin yazma için çok daha fazla okuma yaptığını, cp ise çoğunlukla dd arabellek boyutu varsayılan olarak kullandığından (hatırlıyorsam) doğru şekilde).

1
Milner

Ne tür IO işlemler uygulamalarınıza ve kurulumunuza bağlıdır.

Bazı durumlarda CPU, devam etmesi gereken verileri veya talimatları alamadığı için önemlidir. Bazı durumlarda devam edebilir, ancak hangi uygulamaların çalışabileceğine bağlı olarak değişir. Çok sayıda disk erişimi yapan tek bir dişli uygulamanız varsa, beklemeniz gerekir.

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.

Darboğaz bir şirket içi uygulama ise daha büyük bloklarda okumak veya IO zaman uyumsuz olarak yapmak için optimize edilebilir görmek bakın.

0
Jeremy French

ps aux kullanarak STAT yazdırabilir
stat D veya Ds ise, işlem Kesintisiz uyku durumundadır (genellikle IO)
bir süreç Kesintisiz uyku moduna girdiğinde, nr_iowait runqueue eklenir ve 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 süresini bekleyen işlemlerin sayısı.
b: Kesintisiz uykudaki süreç sayısı.

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

0
Singo