I/O Latenz von Linux VMs unter Virtualization Station auf QNAP mit VIRTIO beheben

Der Betrieb von Linux VMs unter Virtualization Station (diese basiert auf QEMU) auf einem QNAP NAS Storage leidet unter I/O Latenz Performanceproblemen. Für die Analyse habe ich die Oracle 23ai Free Edition in einer Oracle Linux 8 VM installiert und mit Hilfe von I/O Calibration die IO Performance erhoben. Schon beim Startup (dieser hat knapp 15 Minuten!! gedauert) ist offensichtlich, dass irgendetwas nicht passt. Mit TOP sieht man dann auch, dass das System permanent im Wait I/O hängt.

Zum Testen wurden die jeweils aktuellen Versionen von Oracle Linux 8.10 und Oracle Linux 9.4 sowie Oracle 23ai Free (23.4) genutzt.

  • QNAP QTS 5.2.0.2860 vom 17. August 2024
  • QNAP Virtualization Station Version 4.0.0.239
  • VM Konfiguration: 2 CPU Cores, 8GB Memory
  • VMFiles liegen auf einem Raid Array mit 8 SSDs

Ein Beispiel für die Nutzung von I/O Calibration findet man auf der DB Masters Homepage.

Hinweis: Instanz Parameter FILESYSTEMIO_OPTIONS=SETALL

SQL*Plus: Release 23.0.0.0.0 - Production on Sat Aug 31 11:23:46 2024
Version 23.4.0.24.05

Copyright (c) 1982, 2024, Oracle.  All rights reserved.

SQL> set serveroutput on

SQL> declare
   l_latency integer;
   l_iops    integer;
   l_mbps    integer;
begin
   dbms_resource_manager.calibrate_io (
      10, /* # of disks */
      10, /* max latency */
      l_iops, /* I/O Ops/sec */
      l_mbps, /* MBytes/sec */
      l_latency /* actual latency */   );
end;
/

Ergebnis Oracle Linux 9 VM

max_iops = 141
latency = 14.005
max_mbps = 6513

Ergebnis Oracle Linux 8 VM

max_iops = 1275
latency = 12.785
max_mbps = 443

Diese Werte für IOPS und MBPS sind extrem niedrig und die Latenz dafür sehr hoch – selbst Harddisks sollten bessere Werte liefern.

Sucht man im Internet nach QNAP und I/O Performance bzw. Latency Problemen, findet man viele Artikel – die Meisten beziehen sich auf Windows – und beschreiben, dass die Installation von VIRTIO Treibern unter Windows das Problem lösen sollen.

Für die vielen Treffer für Linux findet man aber keine sinnvollen Empfehlungen. Da bei einer default Installation von Linux in den meisten Distributionen die VIRTIO Treiber nicht automatisch installiert werden, muss man diese entsprechend nachinstallieren.

Oracle Linux 9

dnf -y install qemu-guest-agent.x86_64 \
               libvirt-daemon-driver-qemu.x86_64 \
               virtiofsd.x86_64
systemctl enable --now qemu-guest-agent

Oracle Linux 8

dnf -y install qemu-guest-agent.x86_64 \
               libvirt-daemon-driver-qemu.x86_64
systemctl enable --now qemu-guest-agent

Nach einem Reboot und erneutem Test sieht das Ergebnis deutlich besser aus!

Oracle Linux 9 VM

max_iops = 203226
latency  = .054
max_mbps = 19406

Oracle Linux 8 VM

max_iops = 8470
latency  = 2.44
max_mbps = 565

Offensichtlich ist die Optimierung der Treiber mit Oracle Linux 9 deutlich besser – hier liegt die Performance in einem Bereich, der auf Grund der Hardware zu erwarten ist. Bei Oracle Linux 8 ist das Performance-Penalty leider immer noch recht groß. Trotzdem ist es massiv besser als ohne die QEMU Virtio Treiber. Speziell die I/O Latency ist deutlich reduziert.