Hey all.. nieuw in dit forum.
Dit is een vraag over hoe je in FreeNAS/ZFS de queuedepth in kan stellen (kan beperken).
Heb obv FreeNAS een NAS opgezet tbv grote collectie audiofiles (2-3 mio).
1e NAS... en ook nieuw met FreeNAS/ZFS.
Prachtig project. Mooie uitdaging om een NAS op te zetten waarmee je redelijk vlot door deze massa audio-files moet kunnen 'ploegen' ...

(ik werk via een direct (via 10Gb lijn) gekoppelde PC aan het samenstellen en opschonen etc van de collectie; files en folders 'in alle hoeken' worden gelezen en geschreven en geherschreven etc....).
Heb de transferspeed, het lezen/schrijven van files/folders ondertussen wel goed in orde (ca 500MB/s maar gaat naar ca 750MB/s).
Maar het 'tags lezen' gaat nog erg langzaam. (denk 30 tags per sec)(bij 2 VDEVs).
De 'tags' bestaat dus uit de standaard file-info (filenaam, etc) maar ook inhoudinfo als 'artiestnaam' etc.
Ik merk dat de standaard file-info's wél in de ZFS-metadata zitten (die komen dus in ARC en lezen/schrijven erg vlot).
Maar het overige deel ('artiestnaam' etc) zit niet de metadata vlgns mij. En die moeten dus vanuit de diskpool gelezen/geschreven.
Die 'tagdata' staat dus op het 1e block van de file. En dan volgen er nog zeg 20 blocks van die zelfde file, daarna komt de volgende file, het volgende tags-block dat gelezen moet worden.
Dit tags lezen/schrijven gaat dus volgens mij hierdoor altijd 'random' (de blocks sluiten nooit aan).
Dus elke read/write krijgt de volle latency.
En die latency is erg hoog (60-70ms) bij hoge queuedepths.
Ik ken de tabellen met de QD/latency en QD/IOPS-waardes.
Dus... mijn opzet was om de queuedepth te beperken.
En dan een optimum op te zoeken waarbij de file-transfer nog steeds goede speed houd maar dit tags lezen ook wat vlotter gaat.
De Tunables die ik daarvoor gevonden heb, die doen echter niks (werken niet of ik doe iets verkeerd of er is nog iets anders dat de speed fiks belemmert....).
Ik heb sync op disabled dus alleen maar async writes/reads.
Dus ik heb in de Tunables op mijn systeem opgenomen (als een ‘sysctl’):
- vfs.zfs.vdev_async_write_max_active (10)
- vfs.zfs.vdev_async_read_max_active (3).
Maar ik krijg de indruk dat deze tunable niks doet; dat het systeem altijd naar max queuedepth van 32 gaat (met bijhorende hoge latency).
Als ik die queuedepth hier verander naar 1 of naar 32 is er geen enkel verschil in de r/w snelheid (ik check dat door een aantal testfolders in te lezen en te timen (nadat NAS en werkstation steeds zijn gereboot).
Als ik met camcontrol kijk (per disk) naar wat de ‘maxtags’ zijn dan staat deze op ‘255’ (bij welke instelling van max_active dan ook).
Dat is dus de default instelling, die 255.
(Ik check dat via de shell met: ‘camcontrol maxtags daX –v’)
Ik heb ook 2 SSD's nu nog direct op de moederbord sata-poortjes en deze hebben magtags32.
Ik vermoed dat de disk-controller (lsi 9217-8i / 2308) die max 255 toewijst aan de disks.
(ik vermoed dat er een max van 600 geldt voor de controller-totaal en 255 per disk).
Dus.... vraag:
1)
Hoe stel je normaliter de max queue-depth in op FreeNAS/ZFS?
2)
Is dat camcontrol command de aangewezen methode om de queue-depth te checken of is er een betere manier?
Hieronder uiteraard de systeem-info.
(systeem is nog niet definitief maar in testfase; draait nog enkel met testdata erop)
Alvast dank!
Gerard
Systeem-info:
FreeNAS v 12
SuperMicro X8DTL-iF
Dual Intel Xeon X5670 CPU's (3Ghz - 6c/12t)
4x 8GB ECC-RAM
IT-flashed LSI 9217-8i/2308 disk-controller (komt een 16poorts voor)
DiskPool van 2x 4x 8TB WD-Red hard-disks (2x Z2-VDEV) (gaat naar 2x 6 disks)
2x 120GB SSD (tbv metadata-VDEV)
NIC: 10Gb Emulex dual-port SFP+
Werkstation obv Windows, via SFP-kabel/10Gb met NAS verbonden.
Data-sets instellingen:
Dedup off
Compression on
Atime on
Prefetch on
Blocksize 1MB (meeste files ca 10MB danwel ca 35MB)
(tagdata-size ca 100kB)