QEMU+KVM+ZFS lassú 4k sync IO

Fórumok

Sziasztok,

Egy olyan problémába ütköztem, hogy a virtuális gépen belül a 4k random write sync IO kifejezetten lassú.
Ez ott okoz számomra nagyobb problémát, hogy a VM-en belül egy etcd munkálkodna, viszont az kifejezetten nem szereti a lassú fsync-et.

A stack (és hozzá minimál leírás):

  • Fedora CoreOS VM - XFS root
  • QEMU+KVM virtualizáció raw image-el (alapértelmezett cache és io beállítások)
  • CentOS 7 - dom0 - ZFS RAIDZ2 az imagek alatt

ZFS esetén nincs SLOG és L2ARC (előre szólok kezdő ZFS-es vagyok, nem én menedzselem, ami infót hirtelen összetudtam róla gyűjteni és hasznosnak gondoltam, azt írom, de bármilyen plusz információ kell, akkor megpróbálom kinyerni + tanulni mellé :)).

Amit próbáltam:

  • iothread hozzáadása
  • cache writethrough és none beállítások
  • io = native és cache = none beállítás

Sajnos egyik se hozott érdemi változást, így a segítségeteket szeretném kérni, hogy merre lenne érdemes elindulni, mit lenne jó kipróbálni, hogy a sync time lecsökkenjen (az IOPS meg felkusszanjon emiatt, mint kellemes mellékhatás :)), és ne vesszen el annyi valahol a QEMU+Virtio környékén.

Néztem fio-val és ioping-el egyaránt.
A használt ioping parancs, és hozzá kimenet:

ioping -i 0 -w 3 -W -Y .

dom0:
# ioping -i 0 -q -w 3 -W -Y .

--- . (zfs storage/) ioping statistics ---
160.8 k requests completed in 2.70 s, 628.0 MiB written, 59.5 k iops, 232.3 MiB/s
generated 160.8 k requests in 3.02 s, 628.0 MiB, 53.3 k iops, 208.2 MiB/s
min/avg/max/mdev = 6.38 us / 16.8 us / 91.8 ms / 507.8 us

VM:
# ioping -q -i 0 -w 3 -W -Y .

--- . (xfs /dev/vda4 19.5 GiB) ioping statistics ---
45 requests completed in 3.50 s, 180 KiB written, 12 iops, 51.4 KiB/s
generated 46 requests in 3.52 s, 184 KiB, 13 iops, 52.2 KiB/s
min/avg/max/mdev = 17.0 ms / 77.8 ms / 728.5 ms / 158.4 ms

Hozzászólások

 

ioping -i 0 -w 3 -W -Y .
 

--- . (zfs rpool/ROOT/pve-1) ioping statistics ---
46.5 k requests completed in 550.3 ms, 181.6 MiB written, 84.5 k iops, 330.0 MiB/s
generated 46.5 k requests in 3.02 s, 181.6 MiB, 15.4 k iops, 60.1 MiB/s
min/avg/max/mdev = 9.81 us / 11.8 us / 93.4 us / 2.98 us
 

VM

--- . (ext4 /dev/sda2) ioping statistics ---
5.83 k requests completed in 2.85 s, 22.8 MiB written, 2.05 k iops, 8.00 MiB/s
generated 5.83 k requests in 3.00 s, 22.8 MiB, 1.94 k iops, 7.60 MiB/s
min/avg/max/mdev = 321.6 us / 488.4 us / 4.81 ms / 232.8 us
 

slog: 1 db ssd kingston 256

ÉS milyen lemezek , ssd , hdd ? 

A 232.3 MiB/s soknak tűnik szinkron irásnak, ez már optane ssd lenne. (iopinget nem ismerem, ez valami cach-elt írás lehet inkább.). 

Hagyományos hdd sync  irás 4K random az úgy 350 KB/sec , az 50  a VM-ben elképzelhető.

fioval ezt használom "gyors" tesztelésre:

fio --name=4kteszt --filename=./tesztfile1 --size=100M --bs=4k --iodepth=1 --rw=randwrite --randrepeat=1 --sync=1 --fsync=1
 

Szerkesztve: 2020. 11. 10., k - 15:13

fio-val , ugyanazon a gépen - csak a ZFS:

1 db 3 TB-os HDD :

 NAME        STATE     READ WRITE CKSUM
        TOS27       ONLINE       0     0     0
          sde       ONLINE       0     0     0
 

TOS27# fio --name=ssdtest --filename=./testfile1 --size=100M --bs=4k --iodepth=1 --rw=randwrite --randrepeat=1 --sync=1 --fsync=1  |grep WRITE
  WRITE: bw=432KiB/s (442kB/s), 432KiB/s-432KiB/s (442kB/s-442kB/s), io=100MiB (105MB), run=237268-237268msec
 

RAIDZ2 , 2db  3TB-os HDD +slog ssd:

  T3                   ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
             sdc      ONLINE       0     0     0
             sdd      ONLINE       0     0     0
        logs
          sdf          ONLINE       0     0     0
 

T3# fio --name=ssdtest --filename=./testfile1 --size=100M --bs=4k --iodepth=1 --rw=randwrite --randrepeat=1 --sync=1 --fsync=1  |grep WRITE
  WRITE: bw=21.5MiB/s (22.5MB/s), 21.5MiB/s-21.5MiB/s (22.5MB/s-22.5MB/s), io=100MiB (105MB), run=4656-4656msec
 

RAIDZ2 2db ssd:

  NAME                                                                                                         STATE     READ WRITE CKSUM
        rpool                                                                                                    ONLINE         0     0     0
          mirror-0                                                                                              ONLINE        0     0     0
            ata-INTEL_SSDSC2BA400G3_BTTV333501BR400HGN-part3  ONLINE                        0     0     0
            ata-INTEL_SSDSC2BA400G3_BTTV334200JY400HGN-part3  ONLINE                         0     0     0
 

/# fio --name=ssdtest --filename=./testfile1 --size=100M --bs=4k --iodepth=1 --rw=randwrite --randrepeat=1 --sync=1 --fsync=1  |grep WRITE
  WRITE: bw=12.7MiB/s (13.3MB/s), 12.7MiB/s-12.7MiB/s (13.3MB/s-13.3MB/s), io=100MiB (105MB), run=7862-7862msec
 

SLOG ssd sokat javít:

SSD  sebességek 4k sync random írás:

OPTANE ssd-k: 230 MB/s vagy több

DC PLP :  (power lost protection)  ssdk: 60-80 MB sec

Asztali SSD-k (Samsung EVO, PRO, Nvme stb) 2-5 Mb/sec

Próbáltál közvetlen hardver hozzáférést adni az SSD-hez? Amennyiben van lehetőséged passthrough -ra.