Femme schreef op dinsdag 26 juli 2011 @ 11:50:
Een gedeelte van de storage op de server zal via NFS of SMB file sharing toegankelijk moeten zijn maar de opslag die ik in de Mac Pro nodig heb hoeft alleen maar voor deze machine toegankelijk te zijn en wil ik liever mounten als een block level device (en zou idealiter ook gemount moeten kunnen worden op de MBA als de Mac Pro uit staat).
Oke, maar wees je bewust van de nadelen van block-level storage zoals via iSCSI. Dan mis je dus bepaalde voordelen van het ZFS filesystem. Je mist file-based checksumming en bescherming tegen filesystem corruptie. ZFS kan dan wel consistent zijn, maar je Mac gebruikt dan gewoon HFS op de block-level storage dus daar kan nog steeds dingen mee misgaan. Je kunt niet sommige directories comprimmeren en andere niet, je kunt niet sommige folders copies=2 meegeven, enzovoorts. Voor ZFS is al je storage dan één grote file of volume (ZVOL). Je mist dus een deel van de unieke ZFS features. Ook heb je extra perforamnce overhead; je client filesystem stuurt flush commando's en moet consistent blijven; en je ZFS filesystem moet ook consistent blijven. Met zo'n setup zul je sterk moeten vertrouwen op een goede SLOG device; anders zal het enorm traag worden! Je kunt onder moderne ZFS wel de 'sync' optie op disabled zetten, maar dan loop je het risico je client filesystem te corrumperen, en dat moet je dus niet doen.
Mijn ervaring met file sharing onder Windows en SMB in Linux is dat het compleet ruk presteert op gigabit ethernet. Ik mag een gat in de lucht springen als ik eens een piek bereik van 70MB/s maar meestal gaat er niet meer dan 25-40MB/s over het lijntje. Dit terwijl ik verhalen lees dat iSCSI over gigabit wel snelheden haalt die ongeveer gelijk staan aan de bandbreedte van de interface.
Mijn ervaringen zijn anders. In het verleden heb ik inderdaad brakke Samba performance, en NFS kan ook problemen krijgen doordat remote locking gebruikt wordt. Maar beide problemen zijn relatief gemakkelijk op te lossen. Moderne Samba releases ondersteunen nu asynchronous I/O dus een soort NCQ voor SMB/CIFS-shares; dat scheelt enorm qua snelheid. Ik krijg nu gewoon 100-110MB/s read performance over gigabit; tegen de theoretische max aan dus.
Als ik gewoon via de command-line fatsoenlijk inzicht kan krijgen hoe m'n opslag is geconfigureerd vind ik het prima om via de command-line te werken.
ZFS werkt erg makkelijk met commando's dus dat gaat wel lukken denk ik. In het begin misschien wat onwennig, na een tijdje weet je je weg vast wel te vinden.

Met Comstar in OpenSolaris kan ik een fibre channel of iSCSI storage array maken met onderliggend een ZFS-volume (of hoe je dat ook noemt) als opslag. Ik vraag me alleen af of dat ook beide tegelijkertijd mogelijk is (zelfde volume exposen via FC én iSCSI over ethernet) zou ik zou kunnen mounten via FC op de Mac Pro of (als het volume niet is gemound op de Mac Pro) iSCSI over ethernet op de MacBook Air.
Dat zou moeten kunnen lijkt me. Zo lang je maar een software iSCSI-target gebruikt (istgt onder FreeBSD). Dan kun je die naar een ZVOL wijzen en gebruiken voor zowel je FC en software iSCSI over ethernet. Ik heb echter alleen ervaring met dat laatste.
Wellicht kan ik beter kijken naar een 16-poorts sas-controller (of een extra 8-poorts controller naast een onboard controller) voor erbij.
Ik raad aan om alleen 8-poort adapters te gebruiken omdat die meer bandbreedte per poort hebben. LSI 1068E of SAS2008 (USAS2-L8e) zijn interessante kandidaten. Beide controllers vind je ook onboard op diverse SuperMicro bordjes. Dan begin je dus al met 6+8=14 SATA poorten.
Ik wil sowieso ssd's gaan gebruiken. Ik heb ook nog een Vertex 120GB die ik in de L2ARC zou kunnen stoppen.
Femme schreef op woensdag 27 juli 2011 @ 03:08:
Ik wil iets hebben waarmee ik een stel ssd's als cache kan inzetten voor een groter array van laagtoerige harde schijven zodat het geheel goed presteert ondanks goedkope harde schijven.
De combinatie low-rpm + SSD is één van de core features van ZFS; zo haal je het beste uit beide technieken. Low-rpm HDDs zijn goed in sequential I/O en SSDs voor de random read + random write.
ZFS ondersteunt:
L2ARC (zeg maar een soort level2 SRAM cache als je vergelijkt met CPU->RAM)
Level2 ARC (Adaptive Replacement Cache) is een coole feature die Intel hedendaags naar Windows probeert te krijgen onder de naam SRT (Smart Response Technology). In feite laat je de HDDs grote bestanden lezen en alle kleine bestanden (random reads) worden vanaf de SSDs getrokken. In tegenstelling tot SRT heeft ZFS een groot voordeel: het weet wanneer data corrupt is, dus L2ARC is compleet veilig. Als je SSD corrupte data terug stuurt dan leest ZFS deze alsnog van de HDD en corrigeert de corruptie. Dus L2ARC kun je veilig gebruiken.
Dingen die je moet weten:
- L2ARC slurpt RAM! Afhankelijk van de grootte van de I/O's heb je meerdere gigabytes RAM nodig per 50GB L2ARC ofzoiets. Moet even opzoeken hoe veel precies.
- L2ARC kan prima in RAID0; dat doet ZFS zelf als je meerdere L2ARC devices gebruikt.
- L2ARC devices gaan per pool; heb je meerdere pools dan kun je partities gebruiken om de SSDs meerdere caches te onderhouden.
- L2ARC kan je pool nooit corrupt maken of anderzins in gevaar brengen
- L2ARC heb je vooral veel random read (qd=32) nodig; alle SSDs zijn dus geschikt behalve JMicron/Toshiba die geen NCQ ondersteunen. Ook je Mtrons zijn denk ik niet erg geschikt om deze reden.
SLOG (Separate LOG of 'ZFS intent log' (ZIL) device)
Waar L2ARC er is om random reads te versnellen, is een SLOG device er om random writes én sequential writes te versnellen. Dat laatste omdat de metadata van ZFS naar de SLOG wordt geschreven, zodat de hardeschijven pure sequential write kunnen doen en geen random writes tussendoor krijgen die de performance omlaag halen.
- Het is niet zo dat álle writes via de SLOG gaan; alleen 'synchronous writes' gaan via de SLOG. Dat is dus ZFS metadata en sync writes via bijvoorbeeld iSCSI die je client/applicaties dus versturen. Denk bijvoorbeeld aan databases die erg veel flush commando's sturen.
- SLOG betekent dat je normale HDD disks géén ZFS Intent Log (ZIL) meer bevatten; je haalt dus een veiligheidsfeature weg en brengt die onder in een aparte device. Dit is potentiëel gevaarlijk. Vóór ZFS versie 19 is een corrupte ZIL het einde van alle data op een pool. Corrupte of missing ZIL = byebye data. Vanaf versie 19 kun je met dataverlies enkele transaction groups terug draaien en alsnog je pool gebruiken, maar duidelijk is dat je een betrouwbare SLOG wilt hebben.
- Mirroren van SLOG kan maar neemt niet alle risico's weg; corruptie van SSDs kan tegelijktijdig gebeuren bij een stroomfailure. Ik raad aan altijd SSDs met supercapacitors te gebruiken voor SLOG, zoals de Intel 320 SSD.
- Je kunt je SLOG net als L2ARC stripen door meerdere SLOGs toe te voegen
- SLOG devices krijgen random writes en sequential writes; nooit reads. Alleen reads na een stroomfailure.
Je kunt prima meerdere SSDs gebruiken voor zowel SLOG als L2ARC. Dat is mijn favoriete setup. Dus bijvoorbeeld:
SSD1: L2ARC + SLOG voor pool1, L2ARC+SLOG voor pool2
SSD2: L2ARC + SLOG voor pool1, L2ARC+SLOG voor pool2
SSD3: L2ARC + SLOG voor pool1, L2ARC+SLOG voor pool2
SSD4: L2ARC + SLOG voor pool1, L2ARC+SLOG voor pool2
Zo haal je het maximale uit je meerdere SSDs. Merk wel op dat Solaris niet veilig je SSD voor meerdere taken kan gebruiken. Onder Solaris platform zou je dus moeten gebruiken:
SSD1: L2ARC voor pool1
SSD2: L2ARC voor pool2
SSD3: SLOG voor pool1
SSD4: SLOG voor pool2
In deze config is je L2ARC en SLOG dus 4x zo langzaam, omdat je geen (ZFS) striping toepast.