Kendimi çok sayıda büyük dosya (80-ish GB) sıkıştırmak zorunda buluyorum ve sistemimin sergilediği (eksikliği) hızında şaşırdım. Yaklaşık 500 MB / dak dönüşüm hızı alıyorum; kullanarak top
, yaklaşık% 100 bir tek CPU kullanıyor gibiyim.
(Sadece) disk erişim hızı olmadığından eminim, çünkü bir tar
dosya oluştururken (80G dosyası bu şekilde oluşturuldu) sadece birkaç dakika (belki 5 veya 10) sürdü, fakat 2 saatten daha sonra benim basit gzip komutum hala bitmiş değil.
Özetle:
tar -cvf myStuff.tar myDir/*
87 G tar dosyası oluşturmak için <5 dakika sürdü
gzip myStuff.tar
55G zip dosyası oluşturmak iki saat 10 dakika sürdü.
Sorum şu: Bu normal mi? gzip
İşleri hızlandırmak için belirli seçenekler var mı? Komutları birleştirmek ve kullanmak daha hızlı olur tar -cvfz
mu? pigz
- GZip'in Paralel Uygulaması - referansını gördüm , ancak ne yazık ki kullandığım makineye yazılım yükleyemiyorum, bu benim için bir seçenek değil. Örneğin, bu önceki soruya bakınız .
Bu seçeneklerden bazılarını kendim denemek ve onları zamanlamak niyetindeyim - ancak seçeneklerin "sihirli kombinasyonunu" vurmama ihtimalim yüksek. Bu sitedeki birisinin işleri hızlandırmak için doğru numarayı bildiğini umuyorum.
Mevcut diğer denemelerin sonuçlarına ulaştığımda, bu soruyu güncelleyeceğim - ancak eğer özellikle iyi bir numara varsa, çok memnun olurum. Belki de gzip benim düşündüğümden daha fazla işlem sürüyor ...
GÜNCELLEŞTİRME
Söz verdiğim gibi, aşağıda önerilen ipuçlarını denedim: sıkıştırma miktarını ve dosyanın hedefini değiştirin. Yaklaşık 4.1 GB olan bir katran için aşağıdaki sonuçları aldım:
flag user system size sameDisk
-1 189.77s 13.64s 2.786G +7.2s
-2 197.20s 12.88s 2.776G +3.4s
-3 207.03s 10.49s 2.739G +1.2s
-4 223.28s 13.73s 2.735G +0.9s
-5 237.79s 9.28s 2.704G -0.4s
-6 271.69s 14.56s 2.700G +1.4s
-7 307.70s 10.97s 2.699G +0.9s
-8 528.66s 10.51s 2.698G -6.3s
-9 722.61s 12.24s 2.698G -4.0s
Evet, bayrak varsayılandan -6
en -1
hızlıya değiştirmek, bana% 30'luk bir hız kazandırdı (verilerim için) zip dosyasının boyutunda neredeyse hiçbir değişiklik olmadı. Aynı diski veya başka bir diski kullanıp kullanmamamın aslında hiçbir önemi yoktur (herhangi bir istatistiksel anlamlılık elde etmek için bunu birkaç kez çalıştırmam gerekir).
Herhangi biri ilgileniyorsa, aşağıdaki iki komut dosyasını kullanarak bu zamanlama ölçütlerini oluşturdum:
#!/bin/bash
# compare compression speeds with different options
sameDisk='./'
otherDisk='/tmp/'
sourceDir='/dirToCompress'
logFile='./timerOutput'
rm $logFile
for i in {1..9}
do /usr/bin/time -a --output=timerOutput ./compressWith $sourceDir $i $sameDisk $logFile
do /usr/bin/time -a --output=timerOutput ./compressWith $sourceDir $i $otherDisk $logFile
done
Ve ikinci senaryo ( compressWith
):
#!/bin/bash
# use: compressWith sourceDir compressionFlag destinationDisk logFile
echo "compressing $1 to $3 with setting $2" >> $4
tar -c $1 | gzip -$2 > $3test-$2.tar.gz
Dikkat edilmesi gereken üç şey:
- Yerine komutu yerine GNU komutundan daha az seçeneğe sahip
/usr/bin/time
olduğundantime
, bunun yerine kullanmakbash
- Her ne
--format
kadar günlük dosyasının okunmasını kolaylaştıracak olmasına rağmen bu seçeneği kullanmıyorum - Sadece bir komut
time
dizisinde sadece ilk komutta çalıştığı göründüğü için bir komut dosyasında bir script kullandım (bu yüzden tek bir komut gibi görünmesini sağladım ...).
Bütün bu öğrenilenlerle, sonuçlarım
-1
Bayrakla işleri hızlandır (kabul edilen cevap)- Verileri sıkıştırmak, diskten okumak yerine çok daha fazla zaman harcıyor
- Daha hızlı sıkıştırma yazılımına yatırım yapın (
pigz
iyi bir seçim gibi görünüyor). - Sıkıştırmak için birden fazla dosyanız varsa, her bir
gzip
komutu kendi başlığına koyabilir ve mevcut CPU'nun (zavallı adamınpigz
) daha fazlasını kullanabilirsiniz.
Tüm bunları öğrenmeme yardım eden herkese teşekkürler!
$> gzip -c myStuff.tar | pv -r -b > myStuff.tar.gz
makinenizin malzemelerini ne kadar hızlı sıkıştırdığını gösterir. 2. not2: sonucu farklı bir diske kaydedin.
man
sayfadaki sonuncusu , ve o kadar okumadım (çünkü 'tek harfli komut' ile sıralanır -#
) . Bu bana RTFM'ye öğretecek! Bu deneyeceğim bir sonraki şey olacak!
pigz
onu kurmadan , derlemeniz ve çalıştığınız yerden çalıştırabilmeniz için çalıştırabilirsiniz. Derleyici yoksa, başka bir bilgisayarda çapraz derleme yapabilir, ancak buna değecek kadar çaba sarf etmeye başlayabilirsiniz. (Bu sıkıştırmanın daha hızlı çalışması için ne kadar fena ihtiyacınız olduğuna bağlı olarak, sanırım.)