CPU neden IO (wa) için zaman harcadı?


18

Biliyorum wa(içinde top) I bekliyor / O CPU zamanını ölçer. Birçok makale bunu söylüyor.

Ama 2 bilgi noktasına dayanarak kafam karıştı:

  1. bir işlem diski okumak için bir sistem çağrısı kullanıyorsa, işlem engellenir.
  2. Bir işlem engellenirse, CPU üzerinde çalışacak şekilde zamanlanamaz.

Sağ?

CPU'nun G / Ç'de beklemesi için zaman yok gibi görünüyor ... Ne oluyor?

Eğer daha fazla okumak için benim için bazı kitaplar veya makaleler tavsiye, çok daha iyi.


İçeri girdim ve uygun bir cevap yazdım. Bana ihtiyacınız olduğunda üzgünüm orada değildim ;-)
Alec Teal

Yanıtlar:


22

CPU rölanti durumu iki farklı "alt" siteye bölünür: iowaitve idle.

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, CPU durumundadır iowait. İşlemde bu CPU'dan başlatılan bir G / Ç yoksa, CPU idledurumudur.

Yani, iowaitzamanın yüzdesi CPU boşta olan VE O CPU başlatılan sürüyor en az bir I / O yoktur.

iowaitSayaç sistemi daha hesaplama işi işleyebilir belirtiyor. Bir CPU'nun iowaitdurumu olması, o CPU'da başka iş parçacıkları veya işlemler çalıştıramayacağı anlamına gelmez.

Yani, iowaitsadece boş bir zaman biçimidir.


Bu aslında yanlış. Ayrıca NFS - CPU'nun bir konsepti bile yok. Temelde CPU, başka bir şey yapmak için harcadığı zamandır, çünkü bazı düşük seviyeli G / Ç öğeleriyle uğraşmaktadır - ona bağlı bir şeye erişme anlamında, genellikle dosyaları okuyan G / Ç işlemez. Örneğin, Raspberry Pi'de bir DMA denetleyicisi yoktur, bu yüzden CPU "hey Anakart beni buradan karttan başlayarak bu bayt oku ve buradan başlayarak koç içine koy"
alamaz-

bu yüzden bir kartın tamamlanması için olduğu gibi io'yu SORUNMAK için çok zaman harcıyor. Bir önbellek özleminin bu "io bekleme" (elbette sayılmayan) ile ölçülebileceği gibi ses çıkarırsınız, IO bekleme aşağıdaki gibi tanımlanır: Çekirdeğin düşük seviyeli bir aygıt G / Ç rutini içinde geçirdiği zaman - ör. RPi, kelimenin tam anlamıyla karttan okuma prosedürünü yapmak zorunda ve CPU (DMA'sız bir grup olmak) IO veriyolunda veri beklemek zorunda. Bir DMA denetleyicisi ile denetleyiciyle konuşur ve "ne zaman bittiğini söyle" diyor - DMA denetleyicisi GÇ aygıtı yaparken başka şeyler yapmaya bırakıyor
Alec Teal

IOwaiting BTW'yi görmek için dstat kullanın, ayrıca iowait ve çekirdek şeyler yapmak için harcanan zaman, işlem başına gerçekten ölçülemez. Diyelim ki "işlemler" e "iki dosya" yazıyor, birincisi hızlı bir şekilde tamamlanıyor, FS önbelleği yazmayı seçti. yazmaktan yazmaya neden olan sürece kadar. I / O bekleme ile aynı, bu yüzden işlem başına ölçülmezler.
Alec Teal

4
@AlecTeal: Hayır, doğru ve yorumlarınız yanlış. iowait , G / Ç'de engellenen zamanı , G / Ç'ye bakım yapmadan sayar . Çekirdek kaynağını okuyarak bunu onaylamak istemiyorsanız, bir deneme yapmayı deneyin: bir ağ dosya sistemi bağlayın, bir dosyayı okumaya başlayın ve ardından uzak makineden güvenlik duvarı. işlemci tamamen boşta olsa bile iowait süresi yüksek olacak.
David

1
Bu cevap üzerinde bir test yaptım. dd if=/dev/sda of=/dev/nullyüksek yapmak wa. Sonra bir süre-gerçek kod çalıştırmasına, wayerine ise us. Teşekkürler kaos.
HUA Di

-2

Soruyu anladığımdan% 100 emin değilim, ama bazı fikirler var.

Burada bunu soran ve bazı iyi cevapları olan başka bir soru var: Herkes IOWait'in tam olarak ne olduğunu açıklayabilir mi?

Burada iyi bir yazı var: http://veithen.github.io/2013/11/18/iowait-linux.html


7
Mike, cevapların sadece içeriğe olan bağlantıları değil içeriği de içermesi tercih ediliyor. Buraya içerik sağlayarak, söz konusu bağlantılar kaybolduğunda cevabınızın hala değerli olmasını sağlarsınız.
EEAA

1
@EEAA o zaman cevabın üçlü indirilmesi değil, düzeltilmesi gerekiyor? Veya bir yoruma taşınabilir. Hala yararlı bilgiler içeriyor. Downvotes, bilginin neredeyse görünmez olmasını sağlayarak işe yaramaz olduğu anlamına mı geliyor? Düştüğünüzü söylemiyorum, sadece insanların buradaki yaklaşımını merak ediyorum.
Roland Pihlakas

3
@RolandPihlakas Bu bir motivasyon meselesi. Bu durumda Downvote + yorum, kullanıcının cevabını düzeltmesi için motivasyon verir. Yanıt düzeltildikten sonra dv'mi memnuniyetle kaldıracağım. Bunları düzenlemek, kötü davranışa olanak tanıdığı için karşı üretkendir. Bunu yapmamamız istenmesine rağmen , yıllar boyunca yalnızca bağlantıya yanıt veren bazı kullanıcılar yayınladık. Kullanıcılar cevaplarına biraz çaba sarf etmekten rahatsız olmazsa, işlerini düzelterek onlara yardım etmeyeceğim.
EEAA

@EEAA Ayrıntılı cevap için teşekkürler. Yaklaşımınız anlaşılabilir ve yorumlarınız yoluyla Cevap yazarı için motivasyon dürtüsünü de iletirsiniz. Buna karşılık, korkuyorum sessiz inişler genellikle belirsiz oldukları için pratik bir motivasyon sunmuyorlar. Ama biraz belirsizdim - cevabın neden bu kadar çok düştüğünü merak ediyordum? Bir veya iki aşağı oyla yorumunuz yeterli olmalı mı?
Roland Pihlakas

2
@RolandPihlakas İnsanlar cevabın yararlı olmadığını düşündüler, bu yüzden aşağı düştüler. İndirildiler çünkü Salı günü. Çünkü bugün Minneapolis'te kar yağıyor (gerçekten, ve ilkbaharda bu kadar geç olmamalı). Kim bilir.
EEAA
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.