Introdução
Este é um artigo sobre uma nova ferramenta em Linux que tem por nome Lrzip.
Novo, num sentido alargado, porque já vai na versão 0.6 e os métodos que pode usar para compressão já existiam no passado.
No entanto, é uma ferramenta que melhorou bastante na última release, usa pelo menos um método não muito conhecido e tem como objectivos uma grande compressão em ficheiros grandes e aproveitar o máximo de recursos que a máquina tem.
A compressão de grandes ficheiros está no nome “Long Range ZIP“.
Lrzip funciona de uma maneira parecida a rzip, que também incluo neste artigo, pelo facto de fazer duas passagens pelo ficheiro que se quer comprimir, mas ao contrário do rzip, o lrzip não tem a limitação de 900 MB no primeiro passo para encontrar informação duplicada e este limite pode ser maior que a memória que o computador tem.
No segundo passo, o rzip comprime em bzip2, enquanto o lrzip torna-se um “canivete suíço” ao poder usar bzip2, lzo, lzma e zpaq.
De referir também que o autor do lrzip é o um developer do kernel, conhecido por ter criado o scheduler Linux de processador BFS, que apesar de não estar incorporado no kernel, estou a usar no sistema de testes.
Por último, de referir que estou a testar compressores genéricos “lossless” e não especializados, como pngout para os ficheiros png e também não tenho em conta se são arquivadores ou não, visto que usei o tar antes das compressões.
Hardware utilizado nos testes
O hardware utilizado neste teste pode ser considerado banal ou normal e que é uma solução que está acessível a grande parte das pessoas.
Na verdade, não tive grande escolha no hardware usado para este benchmark, mas olhando pelo lado positivo, não uso nada de exótico.
Resumindo, é um Intel Core 2 Duo, 4 GB de Ram e um disco de portátil de 5400 rotações.
Alguns benchmarks, têm melhores resultados com melhor hardware, como é o caso do lrzip, mas é um facto que não posso mudar.
Sei perfeitamente que em muitos testes fico limitado pelo processador, tamanho da memória RAM e acesso ao disco. É algo que fica como aviso a quem ler este texto.
Aqui ficam os detalhes:
nemesis11@debian1:~/$ lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit CPU(s): 2 Thread(s) per core: 1 Core(s) per socket: 2 CPU socket(s): 1 NUMA node(s): 1 Vendor ID: GenuineIntel CPU family: 6 Model: 15 Stepping: 13 CPU MHz: 1995.078 L1d cache: 32K L1i cache: 32K L2 cache: 2048K
nemesis11@debian1:/$ cat /proc/meminfo MemTotal: 3961220 kB SwapTotal: 976892 kB Hugepagesize: 2048 kB DirectMap4k: 8192 kB DirectMap2M: 4087808 kB
nemesis11@debian1:/# lshw *-cpu description: CPU product: Intel(R) Core(TM)2 Duo CPU T5870 @ 2.00GHz vendor: Intel Corp. physical id: 0 bus info: cpu@0 version: Intel(R) Core(TM)2 Duo CPU T5870 @ 2.00GHz slot: Intel(R) Genuine processor size: 2000MHz capacity: 2GHz width: 64 bits clock: 200MHz capabilities: fpu fpu_exception wp vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx x86-64 constant_tsc arch_perfmon pebs bts rep_good nopl aperfmperf pni dtes64 monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm lahf_lm ida *-cache:0 description: L2 cache physical id: 1 slot: Internal Cache size: 2MiB capacity: 2MiB capabilities: asynchronous internal write-back unified *-cache:1 description: L1 cache physical id: 3 slot: Internal Cache size: 32KiB capacity: 32KiB capabilities: asynchronous internal write-back data *-cache description: L1 cache physical id: 2 slot: Internal Cache size: 32KiB capacity: 32KiB capabilities: asynchronous internal write-back instruction *-memory description: System Memory physical id: 4 slot: System board or motherboard size: 4GiB *-bank:0 description: SODIMM DDR2 Synchronous 667 MHz (1.5 ns) product: M2N2G64TU8HD5B-3C vendor: Nanya physical id: 0 serial: D4C60A5A slot: Top size: 2GiB width: 64 bits clock: 667MHz (1.5ns) *-bank:1 description: SODIMM DDR2 Synchronous 667 MHz (1.5 ns) product: M2N2G64TU8HD5B-3C vendor: Nanya physical id: 1 serial: E1C60A5A slot: Bottom size: 2GiB width: 64 bits clock: 667MHz (1.5ns) *-storage description: SATA controller product: ICH9M/M-E SATA AHCI Controller vendor: Intel Corporation physical id: 1f.2 bus info: pci@0000:00:1f.2 logical name: scsi0 logical name: scsi1 version: 03 width: 32 bits clock: 66MHz capabilities: storage msi pm ahci_1.0 bus_master cap_list emulated configuration: driver=ahci latency=0 resources: irq:46 ioport:70e8(size=8) ioport:70fc(size=4) ioport:70e0(size=8) ioport:70f8(size=4) ioport:7000(size=32) memory:d8904000-d89047ff *-disk description: ATA Disk product: WDC WD2500BEVT-6 vendor: Western Digital physical id: 0 bus info: scsi@0:0.0.0 logical name: /dev/sda version: 13.0 serial: WD-WXEX08RR8584 size: 232GiB (250GB) capabilities: partitioned partitioned:dos configuration: ansiversion=5 signature=ba01319f *-volume:3 description: EXT4 volume vendor: Linux physical id: 4 bus info: scsi@0:0.0.0,4 logical name: /dev/sda4 logical name: / version: 1.0 serial: 734c793b-65d6-4d85-9550-bfde482a5269 size: 230GiB capacity: 230GiB capabilities: primary journaled extended_attributes large_files huge_files dir_nlink recover extents ext4 ext2 initialized configuration: created=2011-04-02 11:01:36 filesystem=ext4 lastmountpoint=/ modified=2011-05-18 08:34:26 mount.fstype=ext4 mount.options=rw,noatime, errors=remount-ro,user_xattr,acl,barrier=1,data=ordered mounted=2011-06-12 10:34:32 state=mounted