IO-Delay identifizieren

springnick

Active Member
Jan 27, 2017
36
0
26
26
ich habe mich nach meinem letzten Beitrag hier nun dazu entschieden zum rumspielen erstmal einfach so einen neuen Host aufzusetzen. Allerdings ist mir aufgefallen, dass das neue System permanent einen I/O-Delay anzeigt, selbst wenn gar keine VMs laufen. Wenn ich jetzt zB eine Windows VM laufen lasse, springt der IO-Delay immer wieder auch mal gerne auf 15%.

Sowohl bei einer neu erstellten Windows VM, wie auch bei einer vom alten Host kopierten Maschine. Beide VMs (Windows Server mit DC und Windows 10) machen an sich allerdings so gut wie gar nichts und hängen zu 90% der Zeit nur im idle. Wobei die Windows 10 VM dabei immer wieder hohe CPU-Last hat, woher auch immer, eingerichtet ist die VM nach https://pve.proxmox.com/wiki/Windows_10_guest_best_practices (nur ist die Disk im raw Format anstatt qcow2).

Die Speicherkonfiguration ist dabei die gleiche wie beim vorherigen Host. Die SSD für die Maschinen als ext4 gemounted und in der Web-GUI unter Storage als Directory eingebunden. Auf dem alten Host laufen aktuell 5 VMs und 2 CTs, der IO-Delay bleibt die ganze Zeit unter 2%, wenn er denn überhaupt mal auf mehr als 0,1% geht. Da liegt das neue System ja schon im idle ohne aktive Maschinen drüber.

Gibt es eine Möglichkeit, die Quelle für den io-delay zu finden und zu beseitigen?

Hardware:
i5-6600k
16GB DDR4
alte WD Blue fürs OS
Kingston SUV500 240gb für VMs (hatte die im letzten Beitrag mit der A400 verwechselt)
 
Hast du vielleicht NFS/SMB Shares eingehängt? Immer wenn meine Shares Verbindungsprobleme haben springt bei mir der IO Delay in die Höhe, weil die CPU dann ja auf den Share warten muss.
 
meinst du im Host oder in den VMs? In den VMs keine.
Im Host habe ich allerdings einen NFS Share eingebunden, auf dem die Backups landen und die Installations-ISOs liegen. Auf beiden Hosts ist der Share gleich eingebunden. Ich deaktiviere den Share mal und schau ob sich was ändert.
 
Hallo

Das ist bei Win10 die Update Routiene.
Habe es selber beobachten können auf meinen Host.
Linux und W7 VM´s machen bei weiten nicht so viel I/O-Delay.

I/O-Delay ist aber auch sehr vom RAM abhänig und ob die VM´s nur immer das selbe machen oder ständig neue Daten produzieren.
 
also jetzt nachdem der nfs share deaktiviert ist, scheint mir der io-delay etwas runter gegangen zu sein. Im Gegensatz zum alten Host auf dem mehr als nur eine Maschine läuft ist der im Schnitt aber trotzdem höher.

Dass Windows Updates den io-delay hochtreiben habe ich beim alten Host zwar auch sehen können, aber der geht dann kurz auf maximal 5%. Beim neuen Host jetzt ist es gut und gerne mal immer wieder das vierfache dabei dann.
 
ich hab gerade mal iometer laufen lassen in einer w10 vm auf beiden hosts. Während der neue Host auf 50% io-delay ging, lief der alte entspannt auf maximal 2%. Allerdings waren die Werte der VM auf dem neuen Host deutlich besser als die vom alten.
 
meinst du im Host oder in den VMs?
Ich meine auf dem Host.
ich hab gerade mal iometer laufen lassen in einer w10 vm auf beiden hosts. Während der neue Host auf 50% io-delay ging, lief der alte entspannt auf maximal 2%. Allerdings waren die Werte der VM auf dem neuen Host deutlich besser als die vom alten.
Hast du mal geguckt ob die alte VM vielleicht auf "host" lief und die neue auf "kvm64"? Bei mir sind die VMs grottig langsam wenn ich nicht von kvm64 auf host wechsel.
 
Hast du mal geguckt ob die alte VM vielleicht auf "host" lief und die neue auf "kvm64"? Bei mir sind die VMs grottig langsam wenn ich nicht von kvm64 auf host wechsel.
Beide VMs sind auf Host gestellt, die auf dem alten Host ist allerdings auch schon etwas älter und sehr lahm. Eventuell hatte ich sie Anfangs noch auf kvm und bin später auf Host gegangen bei ihr, das wird aber schon ewig her sein.

Ich lasse iometer nachher noch auf einer anderen (neueren) Windows VM auf dem alten Host laufen. Die macht gerade noch Updates und der io-delay springt dabei gerade nicht mal über die 1% Marke. Kann das ganze vielleicht von der CPU aus kommen?
 
Ja, das hängt auch immer von der CPU und deren Auslastung ab:

iodelay is basically the same as the linux kernel %iowait
from 'sar' manpage:

so a high iowait does not mean anything should be slow
it is just the relative percentage of 'waiting on io'/'idle cpu time'

if you cpu is fully loaded, this will generally be less, even if much io is going on

so this is always to be seen in context with cpu usage and general system load
 
Aber ich verstehe es doch korrekt, dass der iodelay möglichst gering sein sollte oder etwa nicht?

so a high iowait does not mean anything should be slow
das klingt für mich nämlich danach, als könnte man den Wert auch getrost ignorieren.
 
Der sollte schon möglichst klein sein. Das ist aber kein fixer sondern ein relativer Wert.
relative percentage of 'waiting on io'/'idle cpu time'
Wenn die Formel stimmt wäre das:
Je mehr deine CPU ausgelastet ist, desto kleiner wird deine "idle cpu time". Je kleiner die "idle cpu time" ist, desto höher fällt der IO Delay aus, selbst wenn sich die "waiting on io" absolut nicht ändert. Lässt du die gleichen VMs auf der selben Hardware laufen, nur mit unterschiedlichen CPUs, dann wäre der IO Delay bei dem Server größer, dessen CPU weniger Leistung hat, weil dessen CPU dann halt mehr ausgelastet ist. Selbst wenn beide Server da genau gleich lange auf Shares/Storages warten müssten.
 
Last edited:
OK das macht Sinn ja. Ich gehe aber mal davon aus, dass ein i5-6600 mit einer VM nicht überfordert sein sollte, mein fx8320 hat zwar mehr Kerne/Threads, aber ist insgesamt ja lahmer als der i5.
Eventuell wäre es vielleicht eine Idee erstmal alle VMs auf den neuen Host zu kopieren und zu prüfen, ob die Maschinen sich (spürbar) langsam verhalten.
 
Ich habe die SSD jetzt mal nicht als Directory eingebunden sondern als LVM und der io-delay fällt wesentlich geringer aus. Während der Installation einer Windows VM + Windows Updates nur ein mal ein Sprung auf 14%, ansonsten keine 2%. Ist LVM eventuell empfehlenswerter als Directory? Mir erschließen sich nicht ganz die Vorteile/Nachteile von beidem.
 
Naja, bei LVM hast du Blocklevel-Zugriff, beim Directory nur Dateilevel-Zugriff. Wäre ja nicht unlogisch, wenn es da effizienter ist direkt auf Blockebene dein VM Image abzulegen, anstatt da einen Umweg über Dateiebene zu machen, was dann ja vom zusätzlichen Dateisystem dann wieder auf Blockebene gespeichert wird.
 
Last edited:
Macht Sinn ja. Also ist LVM in einem System ohne RAID/ZFS empfehlenswerter? Wenn ich eine HDD ins System einbinden will, für Daten von VMs dann auch besser LVM?

Im Vergleich zum alten Host ist der iodelay im Schnitt etwa gleich seit dem LVM, lediglich die Peaks sind noch wesentlich höher. Ich schiebe aktuell ein paar VMs rüber und schau was sich tut, wenn die Kiste bisschen was zum Arbeiten hat.
 

About

The Proxmox community has been around for many years and offers help and support for Proxmox VE, Proxmox Backup Server, and Proxmox Mail Gateway.
We think our community is one of the best thanks to people like you!

Get your subscription!

The Proxmox team works very hard to make sure you are running the best software and getting stable updates and security enhancements, as well as quick enterprise support. Tens of thousands of happy customers have a Proxmox subscription. Get yours easily in our online shop.

Buy now!