PMR/CMR "desktop grade" disk se 7200 ot/min dá nějakých 75 random IOps, a moc neškáluje při seřazení požadavků.
Enterprise disky (blahé paměti Seagate Cheetah, WD Raptor a další SCSI/SAS 10-15k RPM) uměly nativně tuším něco jako 150 random IOps, a při seřazení požadavků ještě trochu škálovaly (někam ke 300 IOps per spindle? už nevím).
Šindelové disky jsou zřejmě docela svinstvo - ale pravda je, že "enterprise šindelové" jsem v ruce nedržel, možná jsou trochu poladěné.
Pokud pod "chytrý" FS typu ZFS vložíte blokový HW RAID, oberete ZFS o část příležitostí k optimalizaci IOps, pokud Vám o toto jde. RAID5 je rychlý při čtení a sekvenčním zápisu, naopak při random zápisu umí být hnusně pomalý.
Před poměrně mnoha lety jsme prodávali nějaké DAS RAIDy, řekněme do 16 nebo 24 disků. (Mou oblíbenou značkou řadičů je dodnes Areca.) Bylo to v dobách, kdy se rozjela určitá skupina internetových služeb, kde hejno drobných sosačů v divokém internetu cucají každý svůj soubor, a cucají ho sice sekvenčně, ale relativně pomalu. V té době nebylo snadné najít/poskládat webový server, který by zařídil smysluplný read-ahead per soubor = aby se soubory (před)načítaly po blocích dostatečně velkých na to, aby se průchodnost v MBps blížila sekvenčnímu stropu jednotlivých disků i při worst-case IOps (zmíněných cca 75 pro levné nešindelové točivé disky). Zavelet to kernelu paušálně nešlo. Je na to odjakživa nějaké ioctl() na otevřený soubor, ale webservery si o to neuměly říct. Nevím, zda se situace v dnešní době někam pohnula. Každopádně mi tehdy tvrdil jeden odcházející zákazník, že jim tenhle problém vyřešilo právě ZFS.
Odbočím maličko od původního dotazu:
Nedávno jsem pro nenáročnou interní potřebu a vlastní potěchu/vzdělání řešil, jak navrstvit QEMU VM na hostitele (HV), ve kterém chci snapshoty, aspoň trochu komfortní SW RAID0, možnost expanze kapacity v HV a nějaké trochu úsporné ukládání QCOW images. Po relativně dlouhém bádání jsem to navrstvil takto:
Ve virtuálu Linux, virtio blokové zařízení mountuji s podporou discard
VM images podávám QEMU, se zapnutým mapováním discard na sparse file (QCOW image)
BTRFS subvolume pro každý virtuál, v něm jeden či více VM images, které k danému virtuálu patří
BTRFS s potlačeným COW (aby VM image přepisoval in-place, jenom při uloupnutí snapshotu na omezenou dobu jede COW)
MD RAID 1 (při expanzi kapacity bych musel přidat další MD RAID) - je to nakonec menší opruz, než BTRFS RAID
holé disky (JBOD) - nemám bohužel failure LEDky
Při kopírování VM images je potřeba dát pozor, aby se zachoval sparse charakter souborů. Jsou na to zaklínadla pro cp a dd. Toto najde využití při testování variantních změn konfigurace uvnitř VM, při hledání odkdy se vleče skryté poškození čehosi apod. Backup a restore sparse souborů umí například Borg. Snapshot se dělá nikoli z jednotlivého souboru "QCOW image", ale z BTRFS subvolume (jako prostý adresář, ale s touhle čarovnou schopností navíc). Je to způsob, jak zálohovat debilní VM, jehož obsah nedává smysl zálohovat nějak interně/nativně.
Má to vespod jenom dva disky na data (další dva v mirroru slouží čistě pro boot HV).
Když startuje jediný virtuál, je to pěkně svižné - ale kdyby jich startovalo deset simultánně (nikoli ze sdíleného systémového image), byla by to asi smutná podívaná. Padesát VM? Děsivá představa. Virtuály možná nejlíp startovat a típat naschvál sekvenčně. A to se bavím jenom o startu a vypnutí. Pokud virtuály potřebují nějaké nenulové nekešovatelné IOps ke svému životu, je to na točivých discích asi smuténka. Samozřejmě důsledně všechny oddíly mountuju s opšnou noatime.
Počítám, že to co jsem uplácal holýma rukama, by takový Proxmox mohl umět komfortně a bez namáčení.
A tohle vše nejspíš už zhruba 20 let jde postavit na DM volume manageru, jak už někdo zmínil přede mnou. Err... nevím jak passthrough pro "-o discard => sparse image" skrz QEMU, to je tuším relativní novinka.
Veliká cache (jedno na jaké vrstvě) má šanci pomoct pro čtená data, pokud se do ní vejdou. Pro write-back je přínos v podstatě maličký, protože v mixu zápisových operací se vyskytuje poměrně velké množství bariérových operací (seřazení) a dokonce tvrdých synců. Tuším na některých vrstvách lze zakázat bariérové operace (FS mount option? block device?), což Vám dá možnost naplnit celou RAMku write-back bufferem, ale přijdete tím o důležitou záruku konzistence dat na disku (pro případ pádu stroje) a nakonec pokud těch zápisových IOps je i tak v průměru prostě moc, tak po zaplnění cache začnou VM guesti drhnout i tak, bariéry nebariéry. Protože prostým seřazením operací velkého škálování nedosáhnete (otestováno) pokud zápisy přesně nenavazují.
Ten pokrok je stejně svinstvo. Za starých časů si študáci na hraní stavěli servery pro přístup přes telnet a IRC, kde vesele chatovalo třeba 200 lidí. Každý měl spotřebu pár desítek kB RAM. Dneska má člověk na hraní 50 virtuálů :-)