7za'da çoklu kullanım desteği


18

(Bunu önce serverfault'ta yayınladım, ama sonra muhtemelen buraya ait olduğunu fark ettim.)

7za (p7zip) 9.20 kullanarak çok büyük bir metin dosyasını sıkıştırmaya çalışıyorum. -Mmt seçeneğinin bir etkisi yok gibi görünüyor. -Mmt = açık ve -mmt = 2 denedim. Bu 8 çekirdekli bir makinedir. Bir kişi argüman olarak -m0 = lzma2 eklemeyi önerdi, ama bu bana E_INVALIDARG veriyor. Bunun nasıl yapılacağını bilen var mı?

Bunun bir etkisi yoktur:

7za a -mx=9 -mmt=2 -p myarchive.zip bigfile.txt

Ve bu bir hatayla başarısız olur:

7za a -m0=lzma2 -mx=9 -mmt=2 -p myarchive.zip bigfile.txt


7-Zip (A) [64] 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18
p7zip Version 9.20 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,8 CPUs)
Scanning

Creating archive release_20120601-1-http.zip



System error:
E_INVALIDARG

Ben seçenek basitçe olduğuna inanıyoruz -mmt, değil -mmt=2. -mx9Her ikisi de işe yarayabilse de , doğru sözdiziminin olduğuna inanıyorum .
Atılım

Teşekkürler, ancak -mmt seçeneği olmadan hala sadece bir iş parçacığı kullanır. Docs.bugaco.com/7zip/MANUAL/switches/method.htm#ZipMultiThread'e göre , -mmt = N ile kullanılacak iş parçacığı sayısını belirleyebilirsiniz.
Brian L

Yine de tek dişli olmasına rağmen LZMA / Deflate kullanmanızı tavsiye ederim. Eğer iken belki bzip2 ile artan sıkıştırma hızı olsun, bu kadar az verimli düz metin sıkıştırılması ve tek iş parçacıklı varyantları yavaş LZMA / Deflate muadillerine göre olduğunda.
Atılım

@Breakthrough: BZip2 genellikle bağlantınızda gösterildiği gibi DEFLATE'ten daha iyi sıkıştırma sağlar. Aynı zamanda LZMA'dan (sıkıştırırken) çok, çok daha hızlı.
Dennis

Yanıtlar:


25

Göre -m (Set sıkıştırma yöntemi) anahtarı # ZipMultiThread - 7Zip manuel ve dokümantasyon , mtiçin varsayılan on, bu yüzden hiç belirtmek için gerek yoktur.

Bununla birlikte, 7zip'in DEFLATE algoritmasını uygulaması çoklu iş parçacığını desteklemez!

Daha önce keşfettiğiniz gibi,

7za a archive.zip bigfile

sadece bir çekirdek kullanır.

Ancak .zipdosyalar her dosyayı ayrı ayrı sıkıştırır. Birden fazla dosyayı sıkıştırırken , çoklu iş parçacığı seçeneği çekirdek başına bir dosyayı aynı anda sıkıştırır.

Deneyin ve göreceksiniz

7za a archive.zip bigfile1 ... bigfileN

mevcut tüm Nçekirdekleri kullanacaktır .

Tek bir dosyanın sıkıştırılmasını hızlandırmak istiyorsanız, iki seçeneğiniz vardır:

  1. bigfileParçalar halinde bölün .

  2. Farklı bir sıkıştırma algoritması kullanın.

    Örneğin, 7zip'in BZip2 algoritmasını uygulaması çoklu iş parçacığını destekler.

    Sözdizimi:

    7za a -mm=BZip2 archive.zip bigfile
    

Ayrıca, sözdizimi hatası, bir .zipkap için LZM Algoritmasını kullanma girişiminizden kaynaklanır . Bu mümkün değil.

.zipBağlayıcılar için olası algoritmalar DEFLATE (64), BZip2'dir ve sıkıştırma yoktur.

LZM Algoritmasını kullanmak istiyorsanız, bir .7zkap kullanın . Bu kapsayıcı ayrıca şu algoritmaları da işler: PPMd, BZip2, DEFLATE, BCJ, BCJ2 ve sıkıştırma yok.


@Dennis OP'nin LZMA (2) kullandığını düşündüm. Her ne kadar kabul etsem de, sezgisel olarak ( Lempel-Ziv kodlamasının çalışma şekli nedeniyle ), LZMA veya Deflate'i çok işitmek çok zor olurdu (Huffman kodlaması ile sadece LZMA).
Atılım

1
@Breakthrough: İlk başta ben de öyle. (Cevabımın revizyonlarına göz atın.) Sözdizimi hatasının nedeni buydu. LZMA sıkıştırmasını bir .zipkapla kullanamazsınız .
Dennis

@Dennis ah, temizlediğin için teşekkürler. OP'nin bir .ZIPkap kullandığını görmedim .
Atılım

Bekleyin, bu yüzden sadece kabın dosya uzantısını .7z olarak değiştirirsem farklı bir sonuç elde edeceğim?
Brian L

3
@BrianL yerleşik bir "teşekkürler" düğmesi var. Yukarı bakan bir ok gibi görünüyor;)
nhinkle

5

Bu eski bir soru, belirli bir sorunun cevabı değil, sorunun ruhuna bir cevap (Bir zip formatını sıkıştırmak için tüm çekirdeklerin kullanılması)

pigz (.zip seçeneğiyle paralel gzip)

pigz -K -k archive.zip bigfile txt

Bu, aynı sıkıştırma seviyesi için 7x daha hızlı zip uyumlu bir dosya verecektir.

Tekli ve çoklu çekirdekler kullanarak zip uyumlu ve zip olmayan kompresörlerin hızlı karşılaştırmaları.

fedora 20 1.0gb txt dosyasını sıkıştırmak için i7-2600k duvar saatleri

67s (120mb) 7za (zip,1 thread)
15s (141mb) 7za -mx=4 (zip,1 thread)
17s (132mb) zip (zip,1 thread)
 5s (131mb) pigz -K -k (zip,8 threads)
 9s (106mb) bsc (libbsc.com) (not zip,8 threads)
 5s (130mb) zhuff -c2 (not zip,8 threads)
 2s (149mb) zhuff (not zip,8 threads)

dekompres duvar süreleri

4.2s unzip -t
2.0s pigz -t
5.1s bsc d
0.5s zhuff -d

pbzip2 veya pixz yaparken neden pigz?
salla

gzip, bzip2'den çok, çok daha hızlıdır, bu nedenle ekstra sıkıştırma her zaman buna değmez.
jesjimher

0

Sadece -mmt [N + 1] kullanın

Örneğin: -mmt2 bir iş parçacığı için, -mmt9 bir iş parçacığı için


-1

Doğrulanmış ve test edilmiş: 7za üzerinde çoklu iş parçacığı kullanmak için parametre "-mmt #" değil "-mmt = #" olmalıdır, eşittir işareti koymak yoksaymayı sağlar.

Nasıl keşfettim? Herhangi bir parametre olmadan 7z çalıştırdıktan sonra, parametreler hakkında bilgi gösterir, anahtarlarda "-mmt [N]" der, "-mmt = [N]"

Eğer iyi anlarsam, "-mmt = 2" yazdığınız parametre yanlış yazılmış olabilir ve "-mmt2" olabilir, eşittir işareti olmadan.

İyi anlıyorum emin değilim, benim ingilizce gerçekten kötü.

Bu arada, neden sadece "7z" yerine "7za" kullanıyorsunuz?

Yani parametre test etmek için ben benchkmarks yapmak için komutlar bir dizi çalıştırın ve bazı belgelerde yazım hatası hatası doğruladı. Doğru parametre eşittir işareti olmadan yazılmalıdır.

Tek bir iş parçacığıyla 7z ile bir karşılaştırma ölçütü yapma komutu: 7z b -mmt1

Sadece iki iş parçacığı olan 7z ile bir karşılaştırma ölçütü yapma komutu: 7z b -mmt2

Sadece iki iş parçacığı ile 7za ile bir kıyaslama yapma komutu: 7za b -mmt2

Tek bir iş parçacığıyla 7za ile bir kıyaslama yapma komutu: 7za b -mmt1

Z-mmt # ˋ parametresinde ne 7z ne de 7za için eşit bir işaret yoktur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.