Почему 7z использует недостаточно ЦП?

Вопрос или проблема

CentOS 9. 3 vCPU VM с 4 Гб ОЗУ.

Я запускаю задание cron с использованием 7z для сжатия 35 Гб данных в 150 файлах 7za a -mx=9 -mmt=3 ...

Использование ОЗУ – 18%, диск имеет очень небольшую очередь, средняя загрузка ЦПУ – 61%. Почему не 100%? Как найти узкое место?

sar -p -d 1 10
Linux 5.14.0-80.el9.x86_64 (logger)       30/04/22        _x86_64_        (3 CPU)

16:50:10          tps     rkB/s     wkB/s     dkB/s   areq-sz    aqu-sz     await     %util DEV
16:50:11         0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00 sda

16:50:11          tps     rkB/s     wkB/s     dkB/s   areq-sz    aqu-sz     await     %util DEV
16:50:12         0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00 sda

16:50:12          tps     rkB/s     wkB/s     dkB/s   areq-sz    aqu-sz     await     %util DEV
16:50:13        39.00  33832.00      0.00      0.00    867.49      0.04      0.95      1.90 sda

16:50:13          tps     rkB/s     wkB/s     dkB/s   areq-sz    aqu-sz     await     %util DEV
16:50:14         2.00      0.00     24.00      0.00     12.00      0.00      0.50      0.10 sda

16:50:14          tps     rkB/s     wkB/s     dkB/s   areq-sz    aqu-sz     await     %util DEV
16:50:15         0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00 sda

16:50:15          tps     rkB/s     wkB/s     dkB/s   areq-sz    aqu-sz     await     %util DEV
16:50:16         0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00 sda

16:50:16          tps     rkB/s     wkB/s     dkB/s   areq-sz    aqu-sz     await     %util DEV
16:50:17         0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00 sda

16:50:17          tps     rkB/s     wkB/s     dkB/s   areq-sz    aqu-sz     await     %util DEV
16:50:18         0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00 sda

16:50:18          tps     rkB/s     wkB/s     dkB/s   areq-sz    aqu-sz     await     %util DEV
16:50:19         2.00      0.00     12.00      0.00      6.00      0.00      0.50      0.20 sda

16:50:19          tps     rkB/s     wkB/s     dkB/s   areq-sz    aqu-sz     await     %util DEV
16:50:20         0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00 sda

Среднее:          tps     rkB/s     wkB/s     dkB/s   areq-sz    aqu-sz     await     %util DEV
Среднее:         4.30   3383.20      3.60      0.00    787.63      0.00      0.91      0.22 sda
sar -p -u 1 10
Linux 5.14.0-80.el9.x86_64 (logger)       30/04/22        _x86_64_        (3 CPU)

16:50:26        CPU     %user     %nice   %system   %iowait    %steal     %idle
16:50:27        all     60.20      0.00      0.99      0.00      0.00     38.82
16:50:28        all     61.54      0.00      0.67      0.00      0.00     37.79
16:50:29        all     60.87      0.00      0.33      0.00      0.00     38.80
16:50:30        all     59.26      0.00      1.01      0.00      0.00     39.73
16:50:31        all     60.20      0.00      1.00      0.00      0.00     38.80
16:50:32        all     62.79      0.00      0.00      0.00      0.00     37.21
16:50:33        all     63.46      0.00      1.00      0.00      0.00     35.55
16:50:34        all     64.88      0.00      0.67      0.00      0.00     34.45
16:50:35        all     63.04      0.00      0.66      0.00      0.00     36.30
16:50:36        all     62.88      0.00      0.33      0.00      0.00     36.79
Среднее:        all     61.91      0.00      0.67      0.00      0.00     37.42

ИЗМЕНЕНИЕ Я нашел этот документ: https://documentation.help/7-Zip/method.htm
и там говорится: “Сжатие LZMA использует только 2 потока.” что объясняет наблюдаемое мной на CentOS. Но на Windows оно использует 24 потока с LZMA… Почему?

Загадка разгадана: 7za a -mx=9 -mmt=4 – обратите внимание на 4 потока, хотя у ВМ только 3 vCPU.

Теперь используется 100% ЦПУ.

Помог автору 7z: https://sourceforge.net/p/p7zip/discussion/383043/thread/15831e05/#576a/740e/7944

Ответ или решение

Ваша проблема с недостаточной загрузкой CPU при использовании 7z для сжатия файлов на CentOS 9 была эффективно решена с помощью настройки параметров командной строки.

Исходная команда, которую вы использовали:

7za a -mx=9 -mmt=3 ...

устанавливает уровень сжатия до максимума (-mx=9) и ограничивает использование потоков до 3 (-mmt=3). Однако, как вы правильно заметили и подтвердили документом, 7-Zip использует только два потока для метода сжатия LZMA. Эта настройка была причиной того, что CPU использовался не на полную мощность и оставался на уровне около 61%.

Решение заключалось в изменении команды сжатия на следующую:

7za a -mx=9 -mmt=4 ...

Здесь -mmt=4 указывает использовать 4 потока. Хотя ваша виртуальная машина имеет 3 виртуальных процессора, система может эффективно распределить нагрузку по потокам, что позволило CPU работать на пределе своих возможностей, и в результате вы достигли 100% загрузки CPU.

Если вы хотите поэкспериментировать с производительностью в будущем или столкнетесь с подобными проблемами, вы можете использовать несколько команд для диагностики, например:

  1. sar для мониторинга использования ресурсов системы:

    sar -p -u 1 10

    Это поможет вам собрать данные о загрузке CPU, памяти и диска в реальном времени.

  2. top или htop для более интерактивного отображения текущей загрузки системы и процессов.

Если есть необходимость, вы можете продолжить экспериментировать с разными параметрами сжатия, чтобы найти оптимальный баланс между скорость выполнения и размером итогового файла. Однако, помните, что некоторые комбинации параметров могут не поддерживаться, так что всегда проверяйте документацию для получения актуальной информации.

Если возникнут дополнительные вопросы или понадобятся рекомендации по оптимизации, не hesitate to ask!

Оцените материал
Добавить комментарий

Капча загружается...