Superuser

Autor Thema: Kompression funktioniert nicht (richtig)  (Gelesen 7536 mal)

Bentsch

  • Gast
Kompression funktioniert nicht (richtig)
« am: 02. Januar 2009, 10:58:58 »
Hallo,

ich bin noch ein ziemlicher Solaris-Neuling und habe seit einigen Monaten einen OpenSolaris-Server laufen, auf den mit Windows- und Mac-Systemen zugegriffen wird. Und ich habe es bisher nicht geschafft, dass die Kompression mit ZFS richtig funktioniert.

Derzeit habe ich auf meinem System (OpenSolaris 2008.11, Asus P5W DH Deluxe-Mainboard, Core 2 Duo 5300, 4 GB RAM) mit einem RAID-Z1 aus 5 Platten mit je einem 1 TB eine Kompressionsrate von 1.00 bis 1.01. Die Kompression ist also aktiviert, aber der Kompressionsfaktor ist immer in einem niedrigen einstelligen Prozentbereich. Ich habe alle Optionen getestet, ob Standard-lzjb oder gzip, das Ergebnis sieht immer ähnlich schlecht aus. So sehe ich zwar, dass das System mit der Kompression bei gzip-9 deutlich mehr beschäftigt ist als wenn ich mit lzjb komprimiere, aber dann bekomme ich beispielsweise einen Faktor von 1.03 statt 1.02 mit gzip.

Und natürlich versuche ich nicht, bereits komprimierte Dateien noch einmal zu komprimieren und bekomme deshalb einen so schlechten Wert. Den meisten Platz brauchen unkomprimierte Audio- und Videodateien, und auch beim Rest der mehreren 10.000 Dateien handelt es sich um "Standarddateien" wie Textdateien, Bilder, pdfs ...

Als Beispiel habe ich eben einen Ordner mit 600 MB an Audiodateien im .wav-Format einmal mit lzjb und einmal mit gzip-9 komprimiert. Mit lzjb hat er gar nicht komprimiert und einen Faktor von 1.00, mit gzip-9 habe ich eine Kompression von 1.02 erreicht. (In Windows bekomme ich mit WinRAR die halbe Dateigröße)

Es ist mir also ein Rätsel, warum ich die Kompression aktivieren kann, sie dann aber trotzdem nicht funktioniert. Ich habe die Sache mit der Kompression mit RAID-Z1 und  RAID-Z2 getestet, auf OS 2008.5 und OS 2008.11, mit Dutzenden file systems und allen Kompressionsoptionen, bekomme aber immer das gleiche Ergebnis. Hat jemand nen Vorschlag, was ich noch versuchen könnte oder woran es liegen könnte?

Danke im Voraus,
Beni

sonnenblen.de - Das unabhängige Sun User Forum

Kompression funktioniert nicht (richtig)
« am: 02. Januar 2009, 10:58:58 »

Offline linus83

  • Sobl Bachelor
  • ***
  • Beiträge: 144
Re: Kompression funktioniert nicht (richtig)
« Antwort #1 am: 15. Januar 2009, 08:39:10 »
komprimiert zfs auch nachträglich alles, wenn man auf einen vorhandenen Dateisystem die Kompression anschaltet? Das müsste mal ausprobieren. Wenn ich Zeit habe, werde ich es mal machen, aber leider nur auf USB-Sticks, das sollte aber kein Unterschied sein.

Gruß

Offline dominik

  • Sobl Bachelor
  • ***
  • Beiträge: 182
  • Me, myself & I
    • Meine Heimseite
Re: Kompression funktioniert nicht (richtig)
« Antwort #2 am: 15. Januar 2009, 11:45:51 »
linus:

Nein, tut es nicht. Allerdings macht ZFS ein copy-on-write, das heisst wenn Du die Kompression einschaltest, werden alle neu geschriebenen Blöcke komprimiert.


Gruss
Dominik

Offline erisch

  • Moderatoren
  • Sobl Guru
  • *****
  • Beiträge: 758
  • TurboSPAAAAAG
    • erisch.homeunix.net
Re: Kompression funktioniert nicht (richtig)
« Antwort #3 am: 15. Januar 2009, 13:18:32 »
gzip und Konsorten sind Entropiecodierer, damit lassen sich auch unkomprimierte Video/Audidaten nicht effektiv komprimieren. Dafuer braucht man Kodiersysteme mit Dekorrelationsalgorithmen (JPEG fuer Bilder z.B.). Das laesst sich aber in ne Disk-Compression nicht einbauen.

Wenn RAR das besser macht liegt das vielleicht daran, dass die quasi-intelligent kodieren, allerdings glaube ich nicht, dass das fuer on-the-fly compression geeignet ist (jedes mal 100% CPU last beim Diskzugriff)

Mfg. Erisch

Offline linus83

  • Sobl Bachelor
  • ***
  • Beiträge: 144
Re: Kompression funktioniert nicht (richtig)
« Antwort #4 am: 15. Januar 2009, 14:54:26 »
Also dann kann das "Problem" darin liegen, das die Kompression evtl. zu einen spätern Zeitpunkt eingeschaltet wurde und schon Daten auf den Datenträger waren. Dann braucht es sehr viele neue Blöcke, damit was merkt.

Ich habe zumindest gelesen, dass bis zu einen Faktor von 5 bei log-Files drin ist. Ein Kumpel macht das und ist eigenlich sehr zufrieden. Was er erreicht muss ich mal erfragen. Gut reiner Text lässt sich auch mit einfachen Verfahren recht gut komprimieren.

Offline erisch

  • Moderatoren
  • Sobl Guru
  • *****
  • Beiträge: 758
  • TurboSPAAAAAG
    • erisch.homeunix.net
Re: Kompression funktioniert nicht (richtig)
« Antwort #5 am: 15. Januar 2009, 15:22:45 »
mein Post bezog sich eher auf den Ursprungs-Post

Bentsch

  • Gast
Re: Kompression funktioniert nicht (richtig)
« Antwort #6 am: 18. Januar 2009, 09:56:39 »
Die Kompression habe ich immer aktiviert, bevor ich die Dateien kopiere, daran kann es also nicht liegen.

erisch: Dass ich bei solchen Dateien keinen Faktor 2,3 oder 5 erwarten kann, weiß ich, aber die Kompression macht ja fast gar nichts, egal bei welchen Dateien. Ich habe wie gesagt nicht nur Audio- und Videodateien im file system, und trotzdem zeigt er mir bei der compressratio einen Wert von 1.00 an. Weil er selbst Dateien, die sich ziemlich gut komprimieren lassen sollten, mit nur wenigen Prozent komprimiert. Gibt es vielleicht so was wie ne gut geeignete Testdatei zum Download, mit der ich meine Kompressionsrate mit jemand anderem vergleichen könnte?

Offline dominik

  • Sobl Bachelor
  • ***
  • Beiträge: 182
  • Me, myself & I
    • Meine Heimseite
Re: Kompression funktioniert nicht (richtig)
« Antwort #7 am: 19. Januar 2009, 08:23:15 »
Zitat
root@sbsubs170 # zfs get compressratio zonedata_sbsubs170/ubs175_oradata
NAME                               PROPERTY       VALUE                              SOURCE
zonedata_sbsubs170/ubs175_oradata  compressratio  2.36x                              -

Das sind die Werte einer Oracle 10 OLTP Datenbank mit eingeschalteter ZFS compression.

Und hier noch das Zone-Root (Sol10U6) der gleichen Installation:

Zitat
root@sbsubs170 # zfs get compressratio zonehome_sbsubs170/ubs175_zone
NAME                            PROPERTY       VALUE                           SOURCE
zonehome_sbsubs170/ubs175_zone  compressratio  1.57x                           -


Gruss
Dominik

Offline erisch

  • Moderatoren
  • Sobl Guru
  • *****
  • Beiträge: 758
  • TurboSPAAAAAG
    • erisch.homeunix.net
Re: Kompression funktioniert nicht (richtig)
« Antwort #8 am: 21. Januar 2009, 16:52:13 »
Gibt es vielleicht so was wie ne gut geeignete Testdatei zum Download, mit der ich meine Kompressionsrate mit jemand anderem vergleichen könnte?

dd if=/dev/zero of=/path/to/testfile bs=1024 count=1048576

gibt dir ne 1GB grosse Datei voll mit Nullen, laesst sich also prima komprimieren.

Mfg. Erisch

Bentsch

  • Gast
Re: Kompression funktioniert nicht (richtig)
« Antwort #9 am: 02. Februar 2009, 08:50:36 »
erisch, danke für den Tipp. Ich habe für diesen Test drei neue Dateisysteme erstellt, ein unkomprimiertes, eines mit der Standardkompression und eines mit gzip-5. Mit zfs get compression bekomme ich entsprechend die Werte compression=off, "on" und "gzip". Ich habe die Testdatei im unkomprimierten Dateisystem erstellt und danach in die zwei anderen kopiert. Und jeweils zeigt er mir eine compressratio von 1.00 an ...  ???

sonnenblen.de - Das unabhängige Sun User Forum

Re: Kompression funktioniert nicht (richtig)
« Antwort #9 am: 02. Februar 2009, 08:50:36 »

Offline dominik

  • Sobl Bachelor
  • ***
  • Beiträge: 182
  • Me, myself & I
    • Meine Heimseite
Re: Kompression funktioniert nicht (richtig)
« Antwort #10 am: 02. Februar 2009, 09:01:15 »
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                    -

Gruss
Dominik

Bentsch

  • Gast
Re: Kompression funktioniert nicht (richtig)
« Antwort #11 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

Offline dominik

  • Sobl Bachelor
  • ***
  • Beiträge: 182
  • Me, myself & I
    • Meine Heimseite
Re: Kompression funktioniert nicht (richtig)
« Antwort #12 am: 02. Februar 2009, 14:17:00 »
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                    -

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

  • Gast
Re: Kompression funktioniert nicht (richtig)
« Antwort #13 am: 03. Februar 2009, 18:46:30 »
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

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

  • Gast
Re: Kompression funktioniert nicht (richtig)
« Antwort #14 am: 03. Februar 2009, 21:09:59 »
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