Betriebssysteme > Solaris/x86 und OpenSolaris

Kompression funktioniert nicht (richtig)

<< < (3/4) > >>

dominik:
Bentsch:

Hast auch was reinkopiert? Nur eine dumme Frage, weil ohne was reinzukopieren zeigt er immer 1.00x an


--- Zitat ---# zfs create tank/test
# zfs set compression=on tank/test
# zfs get compression tank/test
NAME                     PROPERTY     VALUE                    SOURCE
tank/test  compression  on                       local
# zfs get compressratio tank/test
NAME                     PROPERTY       VALUE                    SOURCE
tank/test  compressratio  1.00x                    -

--- Ende Zitat ---

Gruss
Dominik

Bentsch:
Keine dumme, eine absolut berechtigte Frage :-) Ja, ich habe die Testdatei in jedes Filesystem einmal kopiert. Hier noch mal die Schritte dieses Tests:
1. Drei Dateisysteme erstellt, eines ohne Kompression, eines mit Standardkompression, eines mit gzip. zfs get compression zeigt die richtigen Werte, also off, on und gzip.
2. Die Testdatei mit dem Befehl dd if=/dev/zero of=/path/to/testfile bs=1024 count=1048576 im unkomprimierten Filesystem erstellt.
3. Von dort per Kopieren und Einfügen in die anderen zwei Dateisysteme eingefügt
4. zfs get compressratio zeigt für alle drei Dateisystem 1.00x an

dominik:
Seltsame Sache. Kann das hier so nachvollziehen (Solaris 10 Update 6):


--- Zitat ---# dd if=/dev/zero of=/tmp/test.dmp bs=1024 count=1048576
1048576+0 records in
1048576+0 records out
# cp /tmp/test.dmp /tank/test
# zfs get compressratio tank/test
NAME                     PROPERTY       VALUE                    SOURCE
# ls -al
total 7
drwxr-xr-x   2 root     root           3 Feb  2 14:10 .
drwxr-xr-x   3 root     root           3 Feb  2 08:58 ..
-rw-r--r--   1 root     root     1073741824 Feb  2 14:10 test.dmp
root@sbsubs180 # du -sh
   2K   .
# tar cf test.tar /usr/openwin
# zfs get compressratio tank/test
NAME                     PROPERTY       VALUE                    SOURCE
tank/test  compressratio  1.28x                    -
# rm test.tar
# zfs get compressratio tank/test
NAME                     PROPERTY       VALUE                    SOURCE
tank/test  compressratio  1.00x                    -

--- Ende Zitat ---

Vielleicht liegt es daran, dass das leere File so stark komprimiert werden kann, dass die Anzeige "unsinnige" Werte ausgeben würde? Evtl. kann da ein Blick in den Sourcecode helfen.


Gruss
Dominik

batschul:

--- Zitat von: Bentsch am 02. Februar 2009, 12:42:34 ---Keine dumme, eine absolut berechtigte Frage :-) Ja, ich habe die Testdatei in jedes Filesystem einmal kopiert. Hier noch mal die Schritte dieses Tests:
1. Drei Dateisysteme erstellt, eines ohne Kompression, eines mit Standardkompression, eines mit gzip. zfs get compression zeigt die richtigen Werte, also off, on und gzip.
2. Die Testdatei mit dem Befehl dd if=/dev/zero of=/path/to/testfile bs=1024 count=1048576 im unkomprimierten Filesystem erstellt.
3. Von dort per Kopieren und Einfügen in die anderen zwei Dateisysteme eingefügt
4. zfs get compressratio zeigt für alle drei Dateisystem 1.00x an

--- Ende Zitat ---

pfiffiges beispiel ;-), /dev/zero ist hier der schluessel

also wenn kompression nicht angeschaltet ist wird ZFS all die bloecke fuer die 0en allokieren und schreiben

aber, wenn kompression angeschaltet ist (per default nur fuer meta daten an) dann ist mit diesem
beispiel alles anders.

Die komprimierung findet im SPA (storage pool allocator) statt, in der write I/O pipeline,
dh. wir nehmen den write, komprimieren den block and da alles 0en sind, kehren wir sofort
wieder zurueck mit einem zero block pointer (kein block allociert/zu schreiben),
dies passiert fuer alle bloecke in dieser 'testfile' datei.

Das resultat ist das wir eine dnode fuer die datei ondisk anlegen welche keine data blocks hat.
die "groesse" der datei ist im data teil znode_phys innerhalb der dnode gespeichert.

hth
frankB

claus:
Da ich zwar überhaupt keine Ahnung von ZFS habe, aber neugierig bin, möchte ich mal was fragen:

Heisst das, dass die Kompression gar nicht stattfindet, weil das File gar nicht geschrieben, sondern lediglich der Platz allokiert wird?

Claus

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln