Herkes ne istediğini tam olarak açıklayabilir mi?


194

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

CPU'nun IO işlemlerinin tamamlanmasını bekleyerek geçirdiği zaman olduğunu biliyorum, ama tam olarak ne tür IO işlemleri? Emin değilim, neden bu kadar önemli? CPU, IO işlemi tamamlandıktan sonra başka bir şey yapamaz ve ardından verileri yeniden işleme koyamaz mı?

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

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


Ayrıca, yüksek iowait nedir?
Muhamed Huseinbašić

Yanıtlar:


99

CPU'nun IO işlemlerinin tamamlanmasını bekleyerek geçirdiği zaman olduğunu biliyorum, ama tam olarak ne tür IO işlemleri? Emin değilim, neden bu kadar önemli? CPU, IO işlemi tamamlandıktan sonra başka bir şey yapamaz ve ardından verileri yeniden işleme koyamaz mı?

Evet, işletim sistemi IO'da biri engellenmiş durumdayken çalışacak diğer işlemleri zamanlayacaktır. Ancak, bu işlem içinde, zaman uyumsuz G / Ç kullanmıyorsa, hangi G / Ç işlemi tamamlanıncaya kadar ilerlemeyecektir.

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

Yararlı bulabileceğiniz bazı araçlar

  • iostat, disklerinizin servis zamanlarını izlemek için
  • iotop (eğer çekirdeğiniz destekliyorsa), işlem başına IO taleplerinin dökümünü izlemek için
  • strace, bir işlem tarafından verilen fiili işlemlere bakmak için

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

  • boş fiziksel belleğiniz olduğundan emin olun; böylece işletim sistemi bellekteki disk bloklarını önbelleğe alabilir
  • 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 bir dizi denetleyicisi kullanın
  • io işlemlerini yaparken iyi tampon boyutları seçin

6
Unutmayın "arka uç deponuzun G / Ç yükünüze ayak uyduracak kadar hızlı olduğundan emin olun."
jgoldschrafe

1
@Dave Cheney, Ve sürecim boştayken bunun nedeni IO'yu bekliyor olmasıdır. Peki IOWait ve boşta arasındaki fark nedir?
ctrl-alt-delor

4
IOwait'deyken, disklerdeki verilerin bozulma riskini önlemek için bu süreç "kesintisiz uyku" dır. normal bir boşta işlem gerçekten hiçbir şey yapmıyor, bu yüzden onu öldürmek için daha az risk var.
mveroone

1
Pratikte, IO'nuzun çok yavaş olduğu anlamına gelir. "Sunucuyu daha hızlı bir hale getirin" işlemci sınırlı olmanız veya CPU'nuzun aç kalması açısından farklıdır, çünkü birisi yavaş dizüstü bilgisayar diskinin bir veritabanı sunucusu çalıştırmak için yeterli olduğuna karar verdi ve IO yükü CPU'nun yapabildiklerinin yalnızca% 2'sini kullanmasını sağlıyor. IO'nun bitirmesi için deli.
TomTom

OMG Buradaki ilk 3 cevabın çok yanlış olduğuna inanamıyorum . Haridsv tarafından aşağıdaki cevap doğrudur. Hiçbir cpu io'nun tamamlanmasını "beklemiyor". Evet, bazı io engelleme yapabilir - genellikle bunun için iyi bir neden vardır ve bazı durumlarda tüm io engelleme yapabilir. Ancak, tamamen asenkronize işlemler için oluşan iyodürü de görebilirsiniz.
symcbean

47

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

IOWait tanımı ve özellikleri

IOWait (genellikle %waüstte etiketli ) boşta çalışan bir alt kategoridir ( %idlegenellikle tanımlanmış alt kategoriler hariç tüm boştalar olarak ifade edilir), yani CPU'nun hiçbir şey yapmadığı anlamına gelir. Bu nedenle, CPU'nun işleyebileceği başka bir işlem olduğu sürece, bunu yapacak. Ayrıca, 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 boşta olarak düşünebilirsiniz.

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

Önem ve Potansiyel Kavram Yanılgıları

IOWait önemlidir, çünkü genellikle IO üzerinde darboğaz olup olmadığınızı bilmek için önemli bir ölçümdür. Ama iowait Oid'in mutlaka uygulama anlamına gelmez değil IO bottlenecked. Bir sistemde çalışan iki uygulamayı göz önünde bulundurun. Eğer program 1 ağır bir şekilde tıkanmışsa ve program 2 ağır bir CPU kullanıcısı ise %user + %system, CPU hala% 100 gibi bir şey olabilir ve buna bağlı olarak, iowait 0 gösterir. program 1 çünkü bunların tümü CPU'nun bakış açısından.

IOWait'i Algılamak için Araçlar

Dave Cheney ve Xerxes'ın yayınlarına bakın

Ama aynı zamanda basit bir topirade gösterecektir %wa.

IOWait'i Azaltma

Ayrıca, şimdi neredeyse 2013'e girerken, başkalarının söylediğine ek olarak, sadece harika IO depolama aygıtları seçeneği de uygun fiyatlı SSD'ler. SSD'ler harika!


35

iowait

iowaitİşlemci / işlemciler bekliyor o zaman (yani bir in olduğu boşta durumuna ve yaptığı şey ) orada aslında bu süre boyunca, oldu olağanüstü disk g / Ç istekleri.

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

Bu nedenle, sisteminizde yüksek bir yük ortalaması görürseniz ve incelemede bunun çoğunun aslında G / Ç beklemesine bağlı olduğunu fark ederseniz, bunun mutlaka sisteminizin sorunlu olduğu anlamına gelmez - bu durum sizin makinenin basitçe G / Ç bağlı işlemlerden başka bir işi yoktur (yani, başka herhangi bir şeyden daha fazla G / Ç yapan işlemler (G / Ç bağlı olmayan sistem çağrıları)). Bu, sistemde yaptığınız her şeyin hala çok duyarlı olduğu gerçeğinden açıkça anlaşılmalıdır.

araçlar

  • sar( sysstatpaketten, çoğu * nix makinelerinde bulunur)
  • iostat
  • sarface(bir ön uç sar)

7
Kesin konuşursak, G / Ç bekleme süresinin tanımının yalnızca tek işlemcili sistemlerde geçerli olduğunu unutmayın. Çok işlemcili sistemler için biraz rafine edilmiş olması gerekiyor: veithen.blogspot.be/2013/11/iowait-linux.html
Andreas Veithen

Ne dereceye kadar iowaitetkiler Load Average? Diyelim, ağ için bekleyen 100 iş parçacığı, LA 100 olur mu?
Ivan Balashov

32

Bu linkten gelen açıklamaları ve örnekleri çok faydalı buldum: Tam olarak "iowait" nedir? . BTW, eksiksiz olması açısından, buradaki G / Ç, disk G / Ç'sini ifade eder, ancak bu diğer gönderide açıklandığı gibi ağa monte edilmiş bir diskte (nfs gibi) G / Ç içerebilir .

Birkaç önemli bölümden alıntı yapacağım (bağlantının kopması durumunda), bunlardan bazıları diğerlerinin söylediklerinin tekrarı olacaktı, ama bana en azından bunlar daha açıktı:

Bir cümlede özetlemek gerekirse, iowait, CPU'nun boşta kaldığı zamanın yüzdesidir ve devam eden en az bir I / O vardır.

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

Bir işlem G / Ç için beklerken sistemin çalışmaya hazır başka süreçleri olduğunda ne olacağını merak ediyordum. Aşağıdaki açıklar:

CPU boştaysa, çekirdek, şu anda yerel bir diske veya o CPU'dan başlatılmış olan uzaktan monte edilmiş bir diske (NFS) devam eden en az bir G / Ç olup olmadığını belirler. Varsa, iowait 'sayacı bir artırılır. Bu işlemciden başlatılan hiçbir G / Ç yoksa, 'boşta' sayacı bir artırılır.

Ve işte bir örnek:

Bir işlemci üzerinde çalışan iki program olduğunu varsayalım. Biri diskten okuyan bir 'dd' programı. Diğeri ise G / Ç yapmayan ancak zamanının% 100'ünü hesaplamalı işler yaparak geçiren bir programdır. Şimdi, G / Ç alt sisteminde bir sorun olduğunu ve fiziksel G / Ç’lerin tamamlanmasının bir saniye sürdüğünü varsayalım. 'Dd' programı I / O'ların tamamlanmasını beklerken uyurken, 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 an 0 olmasına rağmen, bu bir G / Ç problemi olmadığı anlamına gelmez, çünkü fiziksel G / Ç işlemlerinin tamamlanması bir saniye sürdüğü zaman bir tane olduğu açıktır.

Tam metin okumaya değer. İşte bu sayfanın bir ayna, aşağı inmesi durumunda.


1

Solaris'te, hangi G / Ç işlemlerinin çalıştığını görmem gerekirse, işlemlerin neler yaptığını incelemek için DTrace kullanıyorum. Linux için, çekirdeğe ve işlem çağrılarına benzer bir düzeyde maruz kalma sağlayan sistemtap adlı benzer bir program var .

DTrace öğrenirken kullandığım bir örnek, bir cpkomutu bir ddkomutla karşılaştırmaktı. Bunu görebilirsiniz ddederken, çok daha fazla yapar yazmak için okur cpdeğil arabellek boyutu çoğunlukla nedeniyle, dd(Ben doğru hatırlamak ediyorsam) varsayılan olarak kullanır.


0

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

Bazı durumlarda CPU'nun devam etmesi gereken verileri veya talimatları alamadığı için önemlidir. Bazı durumlarda devam edebilir, ancak hangi uygulamaların ne yapabileceği ile ilgili olarak çalıştığına bağlı olacaktır. Çok fazla disk erişimi olan tek bir dişli uygulamanız varsa, beklemeniz gerekir.

GÇ süresini en aza indirmek için, daha fazla ve daha hızlı bellek satın alın, daha hızlı disk alın, sahip olduğunuz diskleri birleştirin.

Darboğaz olan bir ev içi uygulama ise, daha büyük bloklarda okumak veya senkronize olmayan bir şekilde IO yapmak için optimize edilip edilemeyeceğini görün.


Tamam, bu yüzden iowait engelleyici bir IO operasyonunda geçirilen zaman mı?
Peter Krumins

Öyleyse, eğer bir select () veya poll () yaparsam ve bloke edersem, tanımlayıcı kullanılabilir hale gelinceye kadar bekleyeceğim süre, iowait zamanını mı oluşturur?
Peter Krumins

Bir programlama sorusu gibi göründüğü için SO'ya ait olacağını düşünüyorum.
Jeremy French,

Peteris - evet, düşünmek için iyi bir yol.
user2278

0

ps aux kullanarak
stat D veya Ds ise proses STAT yazdırabilir
, bir proses Kesintisiz uykuya girdiğinde süreç Kesintisiz uyku modundadır (genellikle IO) , işlemin uykusundan nr_iowait eklenir ve nr_iowait> 0 ise cpu boşta kalma süresi sayılır. iyice beklemek

vmstat ayrıca kaç tane işlem bloğu olduğunu gösterir
r: Çalışma süresini bekleyen işlem sayısı.
b: Kesintisiz uykudaki işlem sayısı.

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.