Na czym mam polegać na lbzip2 lub pbzip2?

10

Ponieważ bzip2 twierdzi, że najlepiej kompresuje (pod względem wielkości), postanowiłem go użyć. Działający serwer może zaoferować 24 (wirtualne) procesory (4 prawdziwe X5650 @ 2,67 GHz) - dlatego postanowiłem poszukać wariantów równoległych.
Używając debian stable- przepraszam, ale znalazłem tutaj najlepsze mecze w askubuntu - postanowiłem przyjrzeć się bliżej pbzip2i lbzip2.
Ale co wybrać? W rzeczywistości stabilna pbzip2jest w wersji 1.1.1-1i lbzip2wersji 0.23-1. To może kosmetycznie mieć tendencję pbzip2- ale lbzip2mówi, że jest nawet szybsze na komputerach jednordzeniowych. Z drugiej strony pbzip2twierdzi, że jest całkowicie kompatybilny bzip2 v1.0.2.
Dodatkowo mam pewne wartości czasowe dużego lokalnego zadania:
Używanielbzip2

Command being timed: "tar -cjf /tmp/mapleTAsicherung.lbzip2.tar /bin /etc /lib /lib32 /opt /sbin /selinux /usr"
    User time (seconds): 2134.32
    System time (seconds): 39.24
    Percent of CPU this job got: 2099%
    Elapsed (wall clock) time (h:mm:ss or m:ss): 1:43.51
    Average shared text size (kbytes): 0
    Average unshared data size (kbytes): 0
    Average stack size (kbytes): 0
    Average total size (kbytes): 0
    Maximum resident set size (kbytes): 1509088
    Average resident set size (kbytes): 0
    Major (requiring I/O) page faults: 0
    Minor (reclaiming a frame) page faults: 1054467
    Voluntary context switches: 153901
    Involuntary context switches: 235285
    Swaps: 0
    File system inputs: 0
    File system outputs: 3460632
    Socket messages sent: 0
    Socket messages received: 0
    Signals delivered: 0
    Page size (bytes): 4096
    Exit status: 0  

Za pomocą pbzip2

    Command being timed: "tar -cjf /tmp/mapleTAsicherung.pbzip2.tar /bin /etc /lib /lib32 /opt /sbin /selinux /usr"
    User time (seconds): 3158.18
    System time (seconds): 59.80
    Percent of CPU this job got: 2095%
    Elapsed (wall clock) time (h:mm:ss or m:ss): 2:33.56
    Average shared text size (kbytes): 0
    Average unshared data size (kbytes): 0
    Average stack size (kbytes): 0
    Average total size (kbytes): 0
    Maximum resident set size (kbytes): 1436320
    Average resident set size (kbytes): 0
    Major (requiring I/O) page faults: 0
    Minor (reclaiming a frame) page faults: 477683
    Voluntary context switches: 151326
    Involuntary context switches: 339246
    Swaps: 0
    File system inputs: 0
    File system outputs: 3460536
    Socket messages sent: 0
    Socket messages received: 0
    Signals delivered: 0
    Page size (bytes): 4096
    Exit status: 0

Czego należy użyć? Jakie są główne różnice? W tej chwili mam tendencję do lbzip2.

Bastian Ebeling
źródło
1
Szybka uwaga: pliki skompresowane za pomocą zwykłego bzip2 nie zwiększą wydajności po rozpakowaniu za pomocą pbzip2. Jednak pbzip2 archiwizuje kompatybilność wsteczną - można je zdekompresować za pomocą narzędzia jednowątkowego lub równoległego.
STW,

Odpowiedzi:

11

Oto podstawowy pomysł, jak je ocenić.

Weź duży tarball, z którym zwykle pracujesz. Skompresuj go za pomocą bzip2, pbzip2, lbzip2. Zmierz czasy (zegar ścienny) i zapisz wszystkie dane wyjściowe w różnych plikach. To da ci trzy razy i trzy rozmiary plików.

Następnie iteruj wszystkie trzy pliki wyjściowe (tj. Wyjścia kompresji bzip2, pbzip2, lbzip2) i dekompresuj je za pomocą wszystkich trzech narzędzi (bzip2, pbzip2 i lbzip2). To da ci kolejne dziewięć razy.

Ponownie uruchom dwanaście testów pod jakimś profilerem i uzyskaj maksymalne wykorzystanie pamięci (wirtualnej i RSS) dla każdego z nich. Ponownie da to 12 wartości. (Jeśli twój Linux jest skonfigurowany tak, by nie przesadzać, to interesujesz się VSZ. W przeciwnym razie zależy ci na RSS).

Utwórz tabelę z 12 wierszami dla tych punktów danych - skompresowane rozmiary col1: 3, czasy kompresji col2: 3/9 czasów dekompresji, memy szczytowe col3: 12 - i wybierz to, co najbardziej Ci odpowiada. Powinieneś wziąć pod uwagę, jak często kompresujesz, a jak często dekompresujesz.

Używam lbzip2-0.23, ale napisałem to, więc się nie liczy.

Wreszcie, bez względu na to, który z nich okaże się najlepszy dla Ciebie, zawsze zapisz sumę kontrolną nieskompresowanego archiwum, a także zweryfikuj zapisany plik przed zadeklarowaniem wykonania kopii zapasowej.

FILES=...
OUTDIR=/mnt/archive
BZ2_UTIL=...

(
  tar -c -- $FILES \
  | tee >(sha256sum >"$OUTDIR"/myfiles.tar.sha256) \
  | pv -c -N plain 2>/dev/tty \
  | "$BZ2_UTIL" \
  | pv -c -N compr 2>/dev/tty \
  > "$OUTDIR"/myfiles.tar.bz2
) 2>"$OUTDIR"/myfiles.err

"$BZ2_UTIL" -dc -- "$OUTDIR"/myfiles.tar.bz2 \
| sha256sum -c -- "$OUTDIR"/myfiles.tar.sha256
Lacos
źródło
4

Zrobiłem kilka testów porównawczych dla bzip2 vs pbzip2 i lbzip2 wraz z lzip i plzip na http://vbtechsupport.com/1614/ . Lubię ulepszenia prędkości dla lbzip2, o ile masz wystarczającą ilość pamięci.

p4guru
źródło