Netzkompetenz

Blog mit Snippets, Tipps und Tricks rund um Webprogrammierung der Taywa aus Zürich

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.

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
# ashift 9
$ zfs list
NAME USED AVAIL REFER MOUNTPOINT
tank 742M 324G 741M /tank
# ashift 12
$ zfs list
NAME USED AVAIL REFER MOUNTPOINT
tank 1.08G 324G 1.08G /tank
# 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.

$ zfs list
NAME USED AVAIL REFER MOUNTPOINT
tank 2.82G 322G 2.82G /tank
# ashift 12
zfs list
NAME USED AVAIL REFER MOUNTPOINT
tank 2.88G 322G 2.88G /tank
# 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.

# ashift 9
root@nara /tank # zfs list
NAME USED AVAIL REFER MOUNTPOINT
tank 5.28G 320G 5.28G /tank
# ashift 12
zfs list
NAME USED AVAIL REFER MOUNTPOINT
tank 5.67G 319G 5.67G /tank
# 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.

Autor: am
Themen: Allgemein / Server / Ubuntu

TrackBack URL

Hinterlasse einen Kommentar, wir freuen uns über jedes Feedback.