ZFS ashift testing
Für neue Server testen wir ZFS als Storage Option. Einige Dinge muss man bei ZFS beim erstellen des zpools festlegen, die sich später ohne löschen der Daten nicht ändern lassen.
Ein Parameter davon ist ashift, damit legt man die Blockgrösse fest. Je kleiner die Blockgrösse desto weniger Platz brauchen ganz kleine Dateien. Je grösser die Blockgrösse desto schnell lassen sich viel Daten auf einmal lesen.
Heutzutage wird oft ashift=12 empfohlen für Festplatten, die meisten Festplatten haben heute 4096 bytes (ashift=12, 2^12) Sektorgrössen. Im Netz wird oft auch ashift=13 für SSD’s empfohlen.
Hier einige Beispiele wie verschiedene ashift Werte den Platzverbrauch beeinflussen.
Getestet wurde:
– ashift 9, 512 bytes block size
– ashift 12, 2048 bytes block size
– ashift 13, 4096 bytes block size
This post in english is here.
Testdaten
linux source code
Hier wird als Beispiel der linux source code bentutzt. Ich benutze drei Kopien des source codes.
1 2 3 |
tar xf /tmp/linux-4.0.tar.xz cp -Ra linux-4.0/ linux-4.0.1 cp -Ra linux-4.0/ linux-4.0.2 |
1 2 3 4 |
# ashift 9 $ zfs list NAME USED AVAIL REFER MOUNTPOINT tank 742M 324G 741M /tank |
1 2 3 4 |
# ashift 12 $ zfs list NAME USED AVAIL REFER MOUNTPOINT tank 1.08G 324G 1.08G /tank |
1 2 3 4 |
# ashirt 13 $ zfs list NAME USED AVAIL REFER MOUNTPOINT tank 1.54G 323G 1.54G /tank |
Mit sehr vielen kleinen Files spart man wesentlich Platz mit ashift=9. Mit ashift=13 braucht man doppelt soviel Platz gegenüber ashift=9.
RAW Imagefile
Hier findet der Test mit einem qemu raw image file statt.
1 2 3 |
$ zfs list NAME USED AVAIL REFER MOUNTPOINT tank 2.82G 322G 2.82G /tank |
1 2 3 4 |
# ashift 12 zfs list NAME USED AVAIL REFER MOUNTPOINT tank 2.88G 322G 2.88G /tank |
1 2 3 4 |
# ashift 13 zfs list NAME USED AVAIL REFER MOUNTPOINT tank 2.94G 322G 2.94G /tank |
Beispiel Daten aus dem Betrieb
Die Testdaten bestehen aus einigen Django Projekten, typo3 Projekten und linux binaries.
1 2 3 4 |
# ashift 9 root@nara /tank # zfs list NAME USED AVAIL REFER MOUNTPOINT tank 5.28G 320G 5.28G /tank |
1 2 3 4 |
# ashift 12 zfs list NAME USED AVAIL REFER MOUNTPOINT tank 5.67G 319G 5.67G /tank |
1 2 3 4 |
# ashift 13 zfs list NAME USED AVAIL REFER MOUNTPOINT tank 6.13G 319G 6.13G /tank |
Fazit
Ich werde auch ashift=12 für SSDs benutzen. Mit ashift=13 verliert man zuviel Platz auf dem eher knappen Platz einer SSD.