Мені здається, що мені потрібно стиснути декілька дуже великих файлів (80 ГБ ГБ), і я здивований (відсутність) швидкості, яку демонструє моя система. Я отримую близько 500 МБ / хв швидкість перетворення; використовуючи top
, я, здається, використовую єдиний процесор приблизно на 100%.
Я впевнений, що це не (просто) швидкість доступу до диска, оскільки створення tar
файлу (саме так створено файл 80G) зайняло всього кілька хвилин (можливо, 5 чи 10), але через 2 години моя проста команда gzip все ще не зроблено.
Підсумовуючи:
tar -cvf myStuff.tar myDir/*
Знадобиться <5 хвилин, щоб створити файл з гудроном 87 G
gzip myStuff.tar
Потрібно дві години та 10 хвилин, створивши поштовий файл 55G.
Моє запитання: Це нормально? Чи є певні варіанти gzip
прискорити роботу? Чи було б швидше об'єднати команди та використовувати tar -cvfz
? Я бачив посилання на pigz
- Паралельне впровадження GZip - але, на жаль, я не можу встановити програмне забезпечення на машині, яку я використовую, тому це не є для мене варіантом. Дивіться, наприклад, це попереднє запитання .
Я маю намір спробувати деякі з цих варіантів самостійно та обробити їх, але цілком ймовірно, що я не потрапляю на "магічну комбінацію" варіантів. Я сподіваюся, що хтось на цьому веб-сайті знає правильний трюк, щоб прискорити справи.
Коли у мене будуть результати інших випробувань, я оновлю це питання, але якщо у когось є особливо хороший трюк, я б дуже вдячний за це. Можливо, gzip просто займає більше часу на обробку, ніж я зрозумів ...
ОНОВЛЕННЯ
Як було обіцяно, я спробував наведені нижче прийоми: змінити кількість стиснення та змінити призначення файлу. Я отримав такі результати для дьогтю, який був близько 4,1 Гб:
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
Так що так, зміна прапора з типового -6
на найшвидший -1
дає мені 30% швидкість, з (за моїми даними) навряд чи будь-якими змінами розміру zip-файлу. Незалежно від того, я використовую той самий диск або інший, це істотно не має різниці (мені доведеться запустити це кілька разів, щоб отримати будь-яку статистичну значимість).
Якщо когось цікавить, я створив ці орієнтири часу, використовуючи наступні два сценарії:
#!/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
І другий сценарій ( 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
Три речі, які слід зазначити:
- Використання,
/usr/bin/time
а неtime
, оскільки вбудована командаbash
має набагато менше можливостей, ніж команда GNU - Я не переймався використанням
--format
опції, хоча це полегшило б читати файл журналу - Я використовував сценарій в сценарії, оскільки,
time
здавалося, працював лише над першою командою в трубопровідній послідовності (тому я зробив це схожим на одну команду ...).
З усього цього вивченого, мої висновки є
- Пришвидшіть роботу з
-1
прапором (прийнята відповідь) - Значно більше часу витрачається на стиснення даних, ніж на читання з диска
- Інвестуйте у швидше програмне забезпечення стиснення (
pigz
здається, хороший вибір). - Якщо у вас є кілька файлів для стиснення, ви можете скласти кожну
gzip
команду в свою власну нитку і використовувати більше доступних процесорів (убогихpigz
)
Дякую всім, хто допоміг мені навчитися всьому цьому!
$> gzip -c myStuff.tar | pv -r -b > myStuff.tar.gz
покаже вам, як швидко ваша машина стискає матеріал. side-note2: збережіть результат на інший диск.
man
сторінці, і я не читав цього далеко (тому що це відсортовано за "командою однієї літери", яка є -#
) . Це навчить мене RTFM! Це буде наступне, що я спробую!
pigz
та запускати його звідки завгодно, щоб створити його, не встановлюючи його. Якщо компілятора немає, ви можете перехресно його компілювати на іншому комп'ютері, хоча це починає докладати більше зусиль, ніж це може коштувати. (Я думаю, залежно від того, наскільки сильно вам потрібна ця компресія для швидшого запуску, я думаю.)