Proxmox 4 – EXT4 – VIRTIO – SCSI – RAW – QCOW2 Performance Vergleich

Proxmox als Lösung für LXE und KVM Virtualisierung bietet eine Vielzahl von Einstellungsmöglichkeiten. Darunter auch verschiedene Optionen für virtuelle Festplatten. In diesem Zusammenhang interressiert mich die Wahl des Bus (VirtIO bzw. SCSI) und des Formates der virtuellen Festplatte (raw, qcow2, vmdk), sowie deren Cache-Optionen (kein Cache, Direct sync, Write Through, Write back, Write back (unsicher) ). Weiterhin werde ich kurz die Vor- und Nachteile des Formates sowie deren Cache-Optionen aufzählen

Testhardware

Für den Test stand mir ein HP Elitebook 8460p mit folgender Ausstattung zur Verfügung:

  • Intel i5 2520M 2Core CPU
  • 16GB DDR3 RAM
  • OS Disk = OSC Vertex 2 mit 120GB
  • VM Disk = Intel 320 SSD mit 320GB

Debian Jessie kam als Betriebssystem auf dem Host zum Einsatz. Proxmox wurde in der aktuellen PVE-Version 4.4-12, mit Kernel 4.4.35-2-pve und KVM Qemu 2.7.0, nachinstalliert (non-subscription).

Jede virtuelle Maschine ist vom Typ KVM und ebenfalls mit Debian Jessie als geführte Intallation frisch installiert. Ext4 wurde als Dateisystem verwendet. Das Testgerät führt keine weiteren Dienste aus die den Test hätten beeinflussen können. Die SSD für die virtuellen Maschinene ist wie folgt eingebunden:

# ext4 noatime,nodiratime,errors=remount-ro 0 2

Diskformat RAW

Bei der Verwendung des RAW-Formates  werden die Daten als Plain Binary Image abgelegt. Sie entsprechen denen der tatsächlichen der virtuellen Festplatte. Somit ist ein Image im RAW-Format immer so groß wie der gesamten Speicher für die virtuelle Festplatte konfiguriert wurde. Das Format ist sehr portabel und kann auch in anderen Systemen wie Virtualbox eingebunden werden. Es bestitzt im Gegensatz zu QCOW (2) keinen Overhead.

Diskformat QCOW2

QCOW2 präsentiert die 2. Generation das Dateiformates für Diskimages. Verwaltet wird es vom virtuellen Machine Monitor, QEMU. Das Copy-On-Write Format besitzt eine Vielzahl an speziellen Funktionen. Diese sind unter anderen:

  • Multiple-Snapshotfunktion im laufenden Betrieb
  • Diskgröße wächst mit steigender Anzahl an zu speichernden Daten
    • Überprovisionierung möglich
  • AES Verschlüsselung
  • ZLIB Kompression
  • kein direkter Mount wie bei RAW möglich
  • leichter Overhead durch Zusatzfunktionen im Vergleich zu RAW

KVM Cache Optionen

KVM (Kernel-based Virtual Machine) bietet diverse Optionen zur Verwendung eines Caches für virtuelle Maschinen. Nachfolgend die Möglichkeiten und deren Bedeutet.

KVM Cache – none

Mit dieser Option ist der meiste Page Cache deaktiviert und der Write Cache für die Festplatte der VM aktiviert. Damit ist die Performance für Anwendungen in der VM gut, aber die Daten sind im Falle eines Powerfehlers nicht geschützt. Diese Option ist für temporäre Daten, bei denen ein Verlust nicht so schlimm ist, zu empfehlen.

KVM Cache – writethrough

MIt dieser Option ist der Cache des Hosts aktiviert, aber der Diskcache der VM deaktiviert. Dadurch werden die Daten direkt an den Host gesendet, der diese vor dem Schreiben zwischenspeichert. Dieser Mode sichert die Datenintegrität, wodurch die Read-Performance generell besser als die Write-Performance ist.

KVM Cache – writeback

Mit dieser Option ist sowohl der Host Cache als auch der Disk Write Cache der VM aktiviert. Damit sit die I/O Performance gut, aber die Daten sind nicht gegen einen Powerfehler gesichert, da sie erst in den “Zwischenspeicher” geschrieben werden, bevor sie auf das Blockdevice abgespeichert werden.

KVM Cache – directsync

Mit dieser Optione werden die Schreiboperationen in der VM an den Host gesendet und erst wenn sie erfolgreich geschrieben wurden zurück gemeldet. Diese Option ist ähnlich der writehrough Option, jedoch ohne die Nutzung des Host Cache.

KVM Cache – unsafe

Mit dieser Option werden Cache-Transfer-Operationen komplett ignoriert. Sie ist ähnlich der writeback Option. Auch diese Option ist nur für temporäre oder nicht wichtige Daten geeignet, wie z.B. Gastinstallationen.

Testablauf

Die virtuellen Maschinen sind alle grundlegend wie folgt konfiguriert:

  • Bustyp = SCSI (VirtIO SCSI)
  • 32GB  HDD
  • 1 CPU 1 Core KVM Standard
  • 1024 GB RAM

Je Test wurde eine 32GB große virtuelle Maschine mit Debian und ext4 erstellt. Als Kernel kam der dato aktuelle von Jessie in Version 3.16.0-4-amd64 zum Einsatz. Es gab keine besonderen Tuningmaßnahmen (Dateisystem, Kernel etc.). Insgesamt wurden 10 virtuelle Testmaschinen erstellt auf denen jeweils 9 Performancetests ausgeführt wurden.

  1. raw (Bus: VirtIO SCSI und VirtIO)
    1. Standardeinstellung (kein Cache)
    2. direct sync
    3. write through
    4. write back
    5. write back (unsicher)
  2. qcow2 (Bus: VirtIO SCSI und VirtIO)
    1. Standardeinstellung (kein Cache)
    2. direct sync
    3. write through
    4. write back
    5. write back (unsicher)

Nach jedem Einzeltest wurde die fio Testdatei gelöscht. Nach jedem Wechsel des Disktyp wurde die alte virtuelle Maschine gelöscht und die neue mit Debian neuinstalliert. Die Test wurden mit dem Tool fio und ioping ausgeführt. Aus zeitlichen Gründen wurde jeder Test nur einmal durchlaufen.

FIO und IOPing Tests

1. fio Random Write Test der IOP/s – viele kleine Dateien

# fio –randrepeat=1 –ioengine=libaio –direct=1 –gtod_reduce=1 –name=test –filename=test –bs=4k –iodepth=256 –size=4G —readwrite=randwrite

1.1 fio Random write Test der IOP/s - viele kleine Dateien (SCSI)

 IOPSBW in KB/sCPU User in %CPU System in %Runtime in ms
Host OCZ335801343214,78279831226
Host Intel15994639772,65158165560
RAW- no Cache15539621582,69179867478
RAW - direct sync4502180090,80440232906
RAW - write through199879960,38213524563
RAW - write back307531230157,53618634096
RAW - write back unsicher337111348487,39618831104
QCOW2 - no cache15058602352,53167069632
QCOW2 - direct sync4595183830,82453228161
QCOW2 - write through199079600,41216526903
QCOW2 - write back339471357917,59621830888
QCOW2 - write back unsicher379171516717,59614527654

1.2 fio Random write Test der IOP/s - viele kleine Dateien (VIRTIO)

 IOPSBW in KB/sCPU User in %CPU System in %Runtime in ms
Host OCZ335801343214,7827,9831226
Host Intel15994639772,6515,8165560
RAW- no Cache252641010585,2814,5541504
RAW - direct sync7671306861,026,17136685
RAW - write through8372334902,1311,97125242
RAW - write back406661626649,2559,7425785
RAW - write back unsicher448351793439,2561,0123387
QCOW2 - no cache13963558533,0315,2375096
QCOW2 - direct sync7389295601276,09141893
QCOW2 - write through8330333202,0610,79125878
QCOW2 - write back494021976119,9159,9321225
QCOW2 - write back unsicher489851959419,9060,2121406

2. fio Random Read Test der IOP/s – viele kleine Dateien

# fio –randrepeat=1 –ioengine=libaio –direct=1 –gtod_reduce=1 –name=test –filename=test –bs=4k –iodepth=256 –size=4G —readwrite=randread

2.1 fio Random Read Test der IOP/s - viele kleine Dateien (SCSI)

 IOPSBW in KB/sCPU UserCPU SystemRuntime in ms
Host OCZ SSD274481097964,5213,3738201
Host Intel SSD405631622555,9415,8825850
RAW - no Cache404981619924,7919,2525892
RAW - direct sync403051612205,2018,5726016
RAW - write through7472729891015,0284,1914032
RAW - write back8667334669414,1585,1512098
RAW - write back unsicher8662334649414,3184,5312105
QCOW2 - no cache403431613754,4315,8425991
QCOW2 - direct sync403231612954,4916,2826004
QCOW2 - write through9183536734114,8684,1611418
QCOW2 - write back8482233929014,4084,8512362
QCOW2 - write back unsicher8787935151715,9682,8111932

2.2 fio Random Read Test der IOP/s - viele kleine Dateien (VIRTIO)

 IOPSBW in KB/sCPU UserCPU SystemRuntime in ms
Host OCZ SSD274481097964,5213,3738201
Host Intel SSD405631622555,9415,8825850
RAW - no Cache40191607635,0414,6726090
RAW - direct sync400841603394,2713,0926159
RAW - write through14547358189628,4770,997208
RAW - write back14495157980429,3170,127234
RAW - write back unsicher14160356641528,4770,777405
QCOW2 - no cache394031576155,9114,2526611
QCOW2 - direct sync401001604005,0514,6626149
QCOW2 - write through15334561338231,5967,816838
QCOW2 - write back15713762854828,0671,286673
QCOW2 - write back unsicher15339061356130,9668,246836

3. fio Sequential Write Test der IOP/s – eine große Datei

# fio –randrepeat=1 –ioengine=libaio –direct=1 –gtod_reduce=1 –name=test –filename=test –bs=4k –iodepth=256 –size=4G —readwrite=write

3.1 fio Sequential write Test der IOP/s - eine große Datei (SCSI)

 IOPSBW in KB/sCPU UserCPU SystemRuntime in ms
Host OCZ SSD344891379574,1316,3730403
Host Intel SSD357371429507,5828,4929341
RAW - no Cache353041412183,9123,3929701
RAW - direct sync7176287061,194,73146110
RAW - write through3787151491,073,41276865
RAW - write back444401777626,8256,8823595
RAW - write back unsicher451811807277,0557,8823208
QCOW2 - no cache340781363164,2822,1830769
QCOW2 - direct sync7531301261,254,83139225
QCOW2 - write through11135445411,555,6994168
QCOW2 - write back538532154136,6646,2519471
QCOW2 - write back unsicher562872251497,7548,1418629

3.2 fio Sequential write Test der IOP/s - eine große Datei (VIRTIO)

 IOPSBW in KB/sCPU UserCPU SystemRuntime in ms
Host OCZ SSD344891379574,1316,3730403
Host Intel SSD357371429507,5828,4929341
RAW - no Cache402321609297,5133,6626063
RAW - direct sync260121040493,2413,4740311
RAW - write through256941027764,4720,9540810
RAW - write back582502330049,2948,0918001
RAW - write back unsicher610382441539,5955,2117179
QCOW2 - no cache327651310645,5622,7932002
QCOW2 - direct sync252771011093,3512,8641483
QCOW2 - write through15955263820829,1070,256572
QCOW2 - write back14667458669828,3771,067149
QCOW2 - write back unsicher670952683849,5052,0415628

4. fio Sequential Read Test der IOP/s – eine große Datei

# fio –randrepeat=1 –ioengine=libaio –direct=1 –gtod_reduce=1 –name=test –filename=test –bs=4k –iodepth=256 –size=4G —readwrite=read

4.1 fio Sequential Read Test der IOP/s - eine große Datei (SCSI)

 IOPSBW in KB/sCPU UserCPU SystemRuntime in ms
Host OCZ SSD11162144648811,8835,399394
Host Intel SSD6610626442511,9035,9115862
RAW - no cache662482649936,6527,1415828
RAW - direct sync661682646756,0127,0915847
RAW - write through8984435937813,4785,5911671
RAW - write back8836835347213,4285,8311866
RAW - write back unsicher8584334337312,8486,2012215
QCOW2 - no cache660972643917,4928,5915864
QCOW2 - direct sync662562650266,9326,8415826
QCOW2 - write through8304833219612,9686,1812626
QCOW2 - write back8476033904314,7584,4612371
QCOW2 - write back unsicher8886235544912,5886,1811800

4.2 fio Sequential Read Test der IOP/s - eine große Datei (VIRTIO)

 IOPSBW in KB/sCPU UserCPU SystemRuntime in ms
Host OCZ SSD11162144648811,8835,399394
Host Intel SSD6610626442511,9035,9115862
RAW - no cache534572538317,7021,7216524
RAW - direct sync635802543246,4021,3416492
RAW - write through164967573826,2373,226207
RAW - write back15701962807823,8475,606678
RAW - write back unsicher1644306577223,0276,356377
QCOW2 - no cache634962539856,5923,2516514
QCOW2 - direct sync635382541547,0121,9616503
QCOW2 - write through23000192000521,8577,674559
QCOW2 - write back12686950747824,1075,418265
QCOW2 - write back unsicher14725158900522,6476,807121

5. fio Random Write Test des Throughput – viele kleine Dateien

# fio –randrepeat=1 –ioengine=libaio –direct=1 –gtod_reduce=1 –name=test –filename=test –bs=4M –iodepth=256 –size=10G —readwrite=randwrite

5.1 fio Random Write Test des Throughput - viele kleine Dateien (SCSI)

 IOPSBW in KB/sCPU UserCPU SystemRuntime in ms
Host OCZ SSD331357490,700,4677244
Host Intel SSD502073311,050,7450575
RAW - no cache14577040,604,57181715
RAW - direct sync14587150,564,37178587
RAW - write through251036751,115,55101141
RAW - write back522152291,3914,3548719
RAW - write back unsicher592444231,8016,0242900
QCOW2 - no cache14576490,574,27181890
QCOW2 - direct sync14612700,563,81171141
QCOW2 - write through18748520,703,53140086
QCOW2 - write back431798901,2211,4258290
QCOW2 - write back unsicher532201271,4914,6947635

5.2 fio Random Write Test des Throughput - viele kleine Dateien (SCSI)

 IOPSBW in KB/sCPU UserCPU SystemRuntime in ms
Host OCZ SSD331357490,700,4677244
Host Intel SSD502073311,050,7450575
RAW - no cache12501130,605,81209243
RAW - direct sync15647860,665,58161852
RAW - write through23966150,957,13108531
RAW - write back592417021,6820,1443383
RAW - write back unsicher482003201,8714,9952345
QCOW2 - no cache11465410,503,90225301
QCOW2 - direct sync9399680,444,13262357
QCOW2 - write through12529140,524,19198165
QCOW2 - write back391629941,3613,1764332
QCOW2 - write back unsicher361486771,2410,5570527

6. fio Random Read Test des Throughput

# fio –randrepeat=1 –ioengine=libaio –direct=1 –gtod_reduce=1 –name=test –filename=test –bs=4M –iodepth=256 –size=10G —readwrite=randread

6.1 fio Random Read Test des Throughput (SCSI)

 IOPSBW in KB/sCPU UserCPU SystemRuntime in ms
Host OCZ SSD1174826360,002,9121726
Host Intel SSD662714620,031,6438627
RAW - no cache11482950,014,58217117
RAW - directsync11484720,024,41216327
RAW - write through321315670,069,8879699
RAW - write back783199610,1323,1232772
RAW - write back unsicher592450120,1117,5242797
QCOW2 - no cache10418030,013,91250836
QCOW2 - direct sync10434340,013,77241420
QCOW2 - write through321313280,109,5779844
QCOW2 - write back753086860,0921,9733969
QCOW2 - write back unsicher642632630,0818,6839830

6.2 fio Random Read Test des Throughput (VIRTIO)

 IOPSBW in KB/sCPU UserCPU SystemRuntime in ms
Host OCZ SSD1174826360,002,9121726
Host Intel SSD662714620,031,6438627
RAW - no cache12492130,026,77213071
RAW - directsync11475920,016,15220327
RAW - write through361475450,0812,5071068
RAW - write back933826920,0931,3927400
RAW - write back unsicher612517170,1220,1641657
QCOW2 - no cache12492660,027,16212839
QCOW2 - direct sync12497770,005,99210655
QCOW2 - write through331357700,0711,4877232
QCOW2 - write back773186000,1725,7732912
QCOW2 - write back unsicher642647380,0921,6439608

7. fio Sequential Write Test des Throughput – eine große Datei

# fio –randrepeat=1 –ioengine=libaio –direct=1 –gtod_reduce=1 –name=test –filename=test –bs=4M –iodepth=256 –size=10G —readwrite=write

7.1 fio Sequential Write Test des Throughput - eine große Datei (SCSI)

 IOPSBW in KB/sCPU UserCPU SystemRuntime in ms
Host OCZ SSD321347390,700,4477823
Host Intel SSD552254810,990,9446504
RAW - no cache14591300,604,57177334
RAW - direct sync13560510,554,51187074
RAW - write through301251911,604,9883758
RAW - write back411719711,2610,9660974
RAW - write back unsicher441822441,0812,7257537
QCOW2 - no cache13572510,543,85183153
QCOW2 - direct sync15618590,543,6116951
QCOW2 - write through24995960,855,59105283
QCOW2 - write back371532621,169,3868417
QCOW2 - write back unsicher421729071,1710,9460644

7.2 fio Sequential Write Test des Throughput - eine große Datei (VIRTIO)

 IOPSBW in KB/sCPU UserCPU SystemRuntime in ms
Host OCZ SSD321347390,700,4477823
Host Intel SSD552254810,990,9446504
RAW - no cache12525010,696,49199724
RAW - direct sync14582730,655,92179942
RAW - write through261085910,998,7296562
RAW - write back431785081,4616,8158741
RAW - write back unsicher602457872,9312,1042662
QCOW2 - no cache10423920,495,09247350
QCOW2 - direct sync10435890,464,70240559
QCOW2 - write through16657360,534,85159513
QCOW2 - write back461894651,5816,6455344
QCOW2 - write back unsicher602487192,6611,4642159

8. fio Sequential Read Test des Throughput – eine große Datei

# fio –randrepeat=1 –ioengine=libaio –direct=1 –gtod_reduce=1 –name=test –filename=test –bs=4M –iodepth=256 –size=10G —readwrite=read

8.1 fio Sequential Read Test des Throughput - eine große Datei (SCSI)

 IOPSBW in KB/sCPU UserCPU SystemRuntime in ms
Host OCZ SSD1184846890,002,8821634
Host Intel SSD682815270,031,6837246
RAW - no cache11477360,014,47219661
RAW - directsync11478180,014,42219286
RAW - write through281156870,058,6690639
RAW - write back562324130,0816,9445117
RAW - write back unsicher542247750,1016,3146650
QCOW2 - no cache10430540,013,86243551
QCOW2 - direct sync10425350,013,70246521
QCOW2 - write through271125440,068,3293170
QCOW2 - write back461921700,0713,9254565
QCOW2 - write back unsicher512113940,0415,4949603

8.2 fio Sequential Read Test des Throughput - eine große Datei (VIRTIO)

 IOPSBW in KB/sCPU UserCPU SystemRuntime in ms
Host OCZ SSD1184846890,002,8821634
Host Intel SSD682815270,031,6837246
RAW - no cache12501270,017,23209185
RAW - directsync12492200,016,35213038
RAW - write through301255600,039,9783512
RAW - write back632596450,0720,0940385
RAW - write back unsicher602490150,0919,4042109
QCOW2 - no cache11476300,016,65220151
QCOW2 - direct sync12505720,005,87207344
QCOW2 - write through291206360,039,7786921
QCOW2 - write back592437640,1718,8843016
QCOW2 - write back unsicher602472180,1019,2742415

9. IOPing Latenztest

# ioping -c 10 .

9.1 IOPing -Latenztest (SCSI)

 IOPS in kin MiB/sRuntime in s
Host OCZ SSD1,586,179,01
Host Intel SSD3,0612,09,01
RAW - no cache1,546,029,01
RAW - direct sync1,626,339,01
RAW - write through3,9415,49,01
RAW - write back3,8515,09,01
RAW - write back unsicher4,2116,59,01
QCOW2 - no cache1,596,239,01
QCOW2 - direct sync1,636,379,01
QCOW2 - write through3,9415,49,01
QCOW2 - write back3,5513,99,01
QCOW2 - write back unsicher4,2716,79,01

9.2 IOPing -Latenztest (VIRTIO)

 IOPS in kin MiB/sRuntime in s
Host OCZ SSD1,586,179,01
Host Intel SSD3,0612,09,01
RAW - no cache1,596,229,01
RAW - direct sync1,987,749,01
RAW - write through4,8118,89,01
RAW - write back4,6318,19,01
RAW - write back unsicher4,4017,29,01
QCOW2 - no cache1,796,989,01
QCOW2 - direct sync1,837,149,01
QCOW2 - write through4,6018,09,01
QCOW2 - write back4,6918,39,01
QCOW2 - write back unsicher4,6718,29,01

Anmerkungen

IO-Thread

Proxmox 4 Disk IO-Thread

Proxmox 4 Disk IO-Thread

Unter Proxmox 4.x kann für die virtuelle Festplatte zusätzlich die Option IO-Thread aktiviert werden. Ein paar Punkte dazu:

  • in QEMU =1 IO-Thread je Diskcontroller
  • in VirtIO-blk gibt es 1 Controller je Disk
  • in VirtIO-SCSI by default ist 1 Controller für X Disk, IO-Thread wird somit zwischen den Disks geteilt
  • unter VirtIO-SCSI-Single ist 1 VirtIO-SCSI Controller für 1 Disk zuständig

ToDo

  • Auswertung formulieren
  • weitere Test mit z.B. XFS als Dateisystem
  • weitere Test mit IO-Thread aktiviert

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.