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 tardosya 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 -cvfzmu? 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 -6en -1hı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/timeolduğundantime, bunun yerine kullanmakbash - Her ne
--formatkadar günlük dosyasının okunmasını kolaylaştıracak olmasına rağmen bu seçeneği kullanmıyorum - Sadece bir komut
timedizisinde 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
-1Bayrakla 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 (
pigziyi bir seçim gibi görünüyor). - Sıkıştırmak için birden fazla dosyanız varsa, her bir
gzipkomutu 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.gzmakinenizin malzemelerini ne kadar hızlı sıkıştırdığını gösterir. 2. not2: sonucu farklı bir diske kaydedin.
mansayfadaki 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!
pigzonu 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.)