Vraag Kan iemand precies uitleggen wat IOWait is?


Hoe vaak ik ook heb gelezen over iowait, het is me nog steeds een raadsel.

Ik weet dat het de tijd is die de CPU doorbrengt om te wachten tot een IO-bewerking voltooid is, maar wat voor soort IO-bewerkingen precies? Wat ik ook niet zeker weet, is waarom het zo belangrijk is? Kan de CPU gewoon iets anders doen terwijl de IO-bewerking is voltooid en vervolgens teruggaan naar de verwerkingsgegevens?

Ook wat zijn de juiste tools om vast te stellen welk proces (en) precies op IO hebben gewacht.

En wat zijn de manieren om IO-wachttijd te minimaliseren?


170
2018-05-27 09:52


oorsprong


En ook, wat is high iowait? - Muhamed Huseinbašić


antwoorden:


Ik weet dat het de tijd is die de CPU doorbrengt   wachtend op een IO-operatie naar   compleet, maar wat voor soort IO   operaties precies? Wat ik ook ben   niet zeker, is het waarom zo belangrijk?   Kan de CPU niet gewoon iets anders doen   terwijl de IO-bewerking voltooid is, en   ga dan terug naar verwerkingsgegevens?

Ja, het besturingssysteem zal plannen dat andere processen worden uitgevoerd terwijl er een is geblokkeerd op IO. Binnen dat proces zal het echter niet verdergaan, tenzij het gebruik van asynchrone IO tot welke IO-bewerking dan ook voltooid is.

Ook wat zijn de juiste tools om   diagnosticeren welk proces (sen) precies hebben gedaan   wacht op IO.

Sommige hulpmiddelen die u misschien nuttig vindt

  • iostat, om de servicetijden van uw schijven te controleren
  • iotop (als uw kernel dit ondersteunt), om de verdeling van IO-verzoeken per proces te bewaken
  • strace, om te kijken naar de feitelijke bewerkingen die door een proces zijn uitgevoerd

En wat zijn de manieren om IO te minimaliseren   wacht tijd?

  • zorg ervoor dat je vrij fysiek geheugen hebt zodat het OS schijfblokken in het geheugen kan cachen
  • houd het schijfgebruik van uw bestandssysteem onder de 80% om overmatige fragmentatie te voorkomen
  • stem je bestandssysteem af
  • gebruik een arraycontroller met batterijvoeding
  • kies goede bufferformaten bij het uitvoeren van io-bewerkingen

90
2018-05-27 10:28



Vergeet niet "zorg ervoor dat uw back-endopslag snel genoeg is om uw I / O-belasting bij te houden." - jgoldschrafe
@Dave Cheney, en wanneer mijn proces niet actief is, is dat omdat het op IO wacht. Dus wat is het verschil tussen IOWait en idle? - ctrl-alt-delor
In IOwait bevindt het proces zich in "ononderbroken slaap", wat betekent dat het niet kan worden gedood, om te voorkomen dat gegevens op schijven beschadigd raken. een normaal inactief proces doet echt niets, dus er is minder risico om het te doden. - mveroone
Op de top betekent dit dat je IO te langzaam is. "Maak de server sneller" is anders, of u CPU-gelimiteerd bent of uw CPU verhongert omdat iemand heeft besloten dat de langzame notebookschijf genoeg is om een ​​databaseserver uit te voeren en de IO-belasting zorgt ervoor dat de CPU slechts 2% gebruikt van wat hij kan, wachtend zoals gek voor de IO om te eindigen. - TomTom
OMG Ik kan niet geloven dat de drie belangrijkste antwoorden hier zijn fout. Het antwoord hieronder door haridsv is correct. Geen cpu wacht op de io om te voltooien. Ja, sommige io kunnen blokkeren - vaak is er een goede reden voor, en onder sommige omstandigheden kan alles io blokkeren. Maar u kunt ook zien dat iowait optreedt voor volledig asynchrone bewerkingen. - symcbean


Oude vraag, onlangs gestoten, maar vond de bestaande antwoorden onvoldoende.

IOWait-definitie en eigenschappen

IOWait (meestal gelabeld %wa bovenaan) is een subcategorie van inactiviteit (%idle wordt meestal uitgedrukt als alle inactieve behalve gedefinieerde subcategorieën), wat betekent dat de CPU niets doet. Daarom, zolang er een ander proces is dat de CPU zou kunnen verwerken, zal het dit doen. Bovendien zijn inactief, gebruiker, systeem, iowait, enz. Een meting met betrekking tot de CPU. Met andere woorden, u kunt iowait zien als de inactiviteit die wordt veroorzaakt door op io te wachten.

Juist, iowait is tijd besteed aan het ontvangen en verwerken van hardware-interrupts als een percentage van de processorkruizen. Software-interrupts worden meestal apart als as gelabeld %si.

Belang & Potentiële misvatting

IOWait is belangrijk omdat het vaak een belangrijke statistiek is om te weten of u problemen hebt met IO. Maar afwezigheid van iowait betekent niet noodzakelijk dat uw toepassing is niet gebufferd op IO. Overweeg twee toepassingen die op een systeem worden uitgevoerd. Als programma 1 zwaar io gecensureerd is en programma 2 een zware CPU-gebruiker is, dan is het %user + %system van CPU kan nog steeds zoiets als ~ 100% zijn en dienovereenkomstig zou iowait 0 tonen. Maar dat is alleen omdat programma 2 intensief is en relatief niets lijkt te zeggen over programma 1 omdat dit alles vanuit het oogpunt van de CPU is.

Tools om IOWait te detecteren

Zie berichten van Dave Cheney en Xerxes

Maar ook een eenvoudig top verschijnt in %wa.

IOWait verminderen

En aangezien we nu bijna 2013 ingaan, is, naast wat anderen zeiden, de optie van gewoon geweldige IO-opslagapparaten betaalbaar, namelijk SSD's. SSD's zijn geweldig !!!


44
2017-12-25 12:45





iowait

iowait is de tijd dat de processor / processors wachten (d.w.z. in een afwachtende staat en doet niets), tijdens welke er feitelijk is was uitstekende schijf-I / O-verzoeken.

Dit betekent meestal dat de blokapparaten (d.w.z. fysieke schijven, niet geheugen) te langzaam of eenvoudig verzadigd zijn.

U moet dus opmerken dat als u een hoog ladingsgemiddelde ziet op uw systeem en bij inspectieopmerking dat dit grotendeels te wijten is aan I / O-wacht, dit niet noodzakelijk betekent dat uw systeem in de problemen zit - en dit gebeurt wanneer uw machine heeft eenvoudigweg niets te doen, anders dan I / O-gebonden processen (dwz processen die meer I / O doen dan iets anders (niet-I / O-gebonden systeemoproepen)). Dat zou ook duidelijk moeten zijn uit het feit dat alles wat je op het systeem doet nog steeds erg snel reageert.

hulpmiddelen

  • sar (van de sysstat pakket, beschikbaar op de meeste * nix-machines)
  • iostat
  • sarface (een front-end aan sar)

34
2018-05-27 10:32



Merk op dat strikt genomen die definitie van I / O-wachttijd alleen geldig is op systemen met één processor. Het moet enigszins verfijnd zijn voor multiprocessorsystemen: veithen.blogspot.be/2013/11/iowait-linux.html - Andreas Veithen
In welke mate iowait beïnvloedt Load Average? Zeg, 100 threads wachten op netwerk, zal LA 100 zijn? - Ivan Balashov


Ik vond de uitleg en voorbeelden van deze link erg handig: Wat is "iowait" precies?. Omwille van de volledigheid verwijst de I / O hier naar de I / O van de schijf, maar kan ook de I / O op een op het netwerk gemonteerde schijf (zoals nfs) bevatten, zoals uitgelegd in deze andere post.

Ik zal een paar belangrijke hoofdstukken aanhalen (voor het geval de link ophoudt), sommige daarvan zouden herhalingen zijn van wat anderen al hebben gezegd, maar voor mij waren deze in ieder geval duidelijker:

Om het in één zin samen te vatten, is 'iowait' het percentage van de tijd   de CPU is inactief EN er is ten minste één I / O bezig.

Elke CPU kan in een van de vier toestanden zijn: gebruiker, sys, inactief, iowait.

Ik vroeg me af wat er gebeurt als het systeem andere processen klaar heeft om te worden uitgevoerd terwijl een proces wacht op I / O. Het onderstaande verklaart het:

Als de CPU inactief is, bepaalt de kernel vervolgens of dat er tenminste is   een I / O die momenteel wordt uitgevoerd naar een lokale schijf of een externe schijf   mounted disk (NFS) die vanuit die CPU was geïnitieerd. Als er   is, dan wordt de 'iowait'-teller met één opgehoogd. Als er geen   I / O in uitvoering die werd geïnitieerd vanuit die CPU, de 'inactieve' teller   wordt met één opgehoogd.

En hier is een voorbeeld:

Laten we zeggen dat er twee programma's op een CPU draaien. De ene is een 'dd'   programma lezen van de schijf. De andere is een programma dat geen I / O doet   maar besteedt 100% van zijn tijd aan computeren. Nu aannemen   dat er een probleem is met het I / O-subsysteem en met die fysieke I / O's   nemen een seconde in beslag om te voltooien. Wanneer het 'dd'-programma is   in slaap terwijl je wacht tot zijn I / O's voltooid zijn, is het andere programma dat wel   kunnen uitvoeren op die CPU. Wanneer de klok onderbreekt, zal dat gebeuren   altijd een programma zijn dat in de gebruikersmodus of in de systeemmodus wordt uitgevoerd.   Daarom zijn de% idle en% iowait-waarden gelijk aan 0. Hoewel iowait   is nu 0, dat betekent niet dat er GEEN I / O-probleem is, omdat daar   natuurlijk is dit één als fysieke I / O's een seconde overnemen   compleet.

De volledige tekst is de moeite van het lezen waard. Hier is een spiegel van deze pagina, voor het geval het uitvalt.


27
2018-05-27 12:34





Voor Solaris gebruik ik DTrace om te kijken wat de processen doen als ik moet zien welke I / O-bewerkingen worden uitgevoerd. Voor Linux is er een soortgelijk programma genaamd systemtap die een vergelijkbaar niveau van blootstelling aan de kernel- en procesaanroepen biedt.

Een voorbeeld dat ik gebruikte toen ik DTrace leerde, was om a te vergelijken cp commando naar a dd commando. Je kan dat zien dd leest nog veel meer voor de schrijfactie cp niet, voornamelijk vanwege de buffergrootte dd gebruikt standaard (als ik me goed herinner).


1
2018-05-27 10:01





Welke soort IO-bewerkingen zijn afhankelijk van uw toepassingen en instellingen.

Het is belangrijk omdat in sommige gevallen de CPU de gegevens of instructies niet kan krijgen om verder te gaan. In sommige gevallen kan het worden voortgezet, maar dit hangt af van welke apps actief zijn en wat het kan doen. Als u een toepassing met een enkele thread hebt die veel schijftoegang biedt, moet u wachten.

Om de IO-tijd te minimaliseren, koopt u meer en sneller geheugen, krijgt u snellere schijven, defragmenteert u de schijven die u hebt.

Als het een in-house applicatie is die de bottleneck is, kijk dan of deze kan worden geoptimaliseerd om in grotere blokken te lezen of IO asynchroon te doen.


0
2018-01-01 15:50



Oké, dus iowait is de tijd doorgebracht in een blokkeren IO operatie? - Peter Krumins
Dus bijvoorbeeld, als ik een select () of poll () en het blokkeert, dan is de tijd die wacht totdat een descriptor beschikbaar komt, voor de tijd van iowait? - Peter Krumins
Ik denk dat dat op SO zou horen omdat het op een programmeervraag lijkt. - Jeremy French
Peteris - ja, dat is een goede manier om erover na te denken. - user2278


gebruik van ps aux can print proces STAT
als stat D of Ds is, bevindt het proces zich in Uninterruptible Sleep (meestal IO)
wanneer een proces in Uninterruptible Sleep wordt ingevoerd, wordt nr_iowait van runqueue toegevoegd en als nr_iowait> 0, wordt de leeglooptijd van cpu geteld om te hoowait

vmstat laat ook zien hoeveel procesblokken
r: het aantal processen dat wacht op runtime.
b: het aantal processen in een ononderbroken slaap.

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


0