Puncte:1

Performanță ZFS: viteză de scriere extrem de scăzută

drapel pk

Am un mic server de acasă. Specificatiile sunt:

  • CPU: AMD Ryzen 5 2600
  • RAM: 32 GB ECC
  • Unitate de sistem: SSD NVMe de 128 GB
  • Unități de date: 3x 4 TB Seagate Barracuda HDD

Serverul rulează unele aplicații precum Nextcloud sau Gitea și vreau să rulez 1-2 VM-uri pe el. Deci, există unele aplicații web, baze de date și VM.

Aplicațiile și imaginile qcow2 sunt stocate într-un pool raidz1:

Stare $ sudo zpool
  bazin: rezervor
 stare: ONLINE
config:

        NUME STAT CITEȘTE SCRIE CKSUM
        rezervor ONLINE 0 0 0
          raidz1-0 ONLINE 0 0 0
            sdb ONLINE 0 0 0
            sdc ONLINE 0 0 0
            sdd ONLINE 0 0 0

erori: nu există erori de date cunoscute

Când am folosit aplicațiile în primele săptămâni, nu am întâmpinat probleme. Dar de câteva săptămâni am realizat viteze de scriere extrem de scăzute. Instanța nextcloud nu este foarte rapidă și când încerc să pornesc un nou VM cu Windows 10, este nevoie de aproximativ 5 minute pentru a ajunge la ecranul de conectare.

Am făcut niște teste de performanță folosind fio si a obtinut urmatoarele rezultate:

Test IOPS Lățimea de bandă (KiB/s)
citit aleatoriu 37,800 148,000
scrie la întâmplare 31 127
citire secvențială 72,100 282,000
scriere secvențială 33 134

Am făcut câteva cercetări înainte de a posta aici și am citit că ar trebui să adaug un SLOG la pool-ul zfs pentru o performanță mai bună cu baze de date și VM. Dar asta nu este o opțiune în acest moment. Mai întâi trebuie să iau cadouri de Crăciun :D

Dar chiar și fără un SLOG nu cred că aceste cifre sunt corecte :(

Are cineva vreo idee? :)

Philip Szalla avatar
drapel pk
Am dezactivat deja `atime` pe toate seturile de date și am setat `recordsize` la 64K pe setul de date care stochează imaginile qcow2
drapel us
Nu ar trebui să utilizați RAIDZ1 în nicio circumstanță. Ori de câte ori un dispozitiv se defectează, există un risc foarte mare ca a doua unitate să se defecteze în timpul realimentării și să vă pierdeți toate datele. RAIDZ1 s-ar putea manifesta, de asemenea, în lentoare ca aceasta. Folosește oglinda în schimb.
Puncte:2
drapel pk

Am gasit singur problema.

Am vazut un articol in care se mentioneaza CMR si SMR. Mi-am verificat unitățile și mi-am dat seama că am cumpărat din greșeală hard disk-uri cu SMR :(

Voi păstra un pool de oglindă până când am înlocuit unitățile cu unități CMR noi. Când voi avea noua unitate, voi folosi și un pool de oglindă.

Va multumesc tuturor!

Puncte:1
drapel ca

As a first-order approximation raidz provides the random performances of a single disk, which for a 7.2K HDD are about 70 IOPS. Your test shows 50% less IOPS (ie: ~30 vs ~70) and this can be explained with the relatively large recordsize you selected.

Especially for random writes, any recordsize larger than 4KB is going to face considerable read/modify/write penalty. Please note that I am not advocating for using such a small recordsize on mechanical disks as it commands a very high metadata overhead, high fragmentation and (almost) no compression. As a reference, when using HDDs I leave the default (128KB) recordsize even for virtualization hosts.

You can do the following to improve performance:

  • use mirror vs raidz where applicable (but you only have 3 disks, preventing the use of mirroring+striping)
  • use RAW image files rather than QCOW2 (if QCOW2 files really are required, be sure to preallocate their metadata)
  • try setting sync=disabled (but be sure to understand that in case of sudden power loss your system will lose up to 5s of written data)
Philip Szalla avatar
drapel pk
Vă mulțumesc pentru răspuns și scuzați-mă pentru răspunsul meu întârziat! Am scos o unitate din sistem și am creat un pool de oglindă. Acest lucru a îmbunătățit viteza de citire cu aproximativ 30%, așa cum era de așteptat. Dar vitezele de scriere nu s-au schimbat :(

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.