сжатие zstd происходит на одном потоке (mkinitcpio -P)

Системные сервисы и системы инициализации: systemd, sysvinit и другие


Ответить
igor
Аватара пользователя
Сообщения: 43
Зарегистрирован: 16.08.2022

#

COMPRESSION_OPTIONS=(--ultra -22)
так выглядит мой конфиг для сжатия.
на скрине виден параметр -T0, который говорит работать одним потоком. его я изменить никак не могу, это некий дефолт. всё что имеется по zstd -help не помогло.
явно где то есть другие настройки мимо /etc, но что то не нахожу
Cкрытый текст
Изображение
vall
Аватара пользователя
Администрация
Сообщения: 541
Зарегистрирован: 09.08.2022

#

По вики вот так:
По умолчанию mkinitcpio использует zstd; имейте в виду, что сжатие zstd работает в многопоточном режиме (с опцией -T0, которая запускает столько же потоков, сколько ядер в процессоре).

Там же, чуть ниже -- COMPRESSION_OPTIONS трогать вообще не рекомендуют.
Примечание: Эту опцию можно не трогать: mkinitcpio сам позаботится о том, чтобы любой поддерживаемый метод сжатия имел необходимые флаги для создания рабочего образа. Кроме того, неправильное использование этого параметра может привести к незагружаемой системе, если ядро не сможет распаковать результирующий архив.

Другими словами процесс полностью автоматизирован и вики не советует вмешиваться.
igor
Аватара пользователя
Сообщения: 43
Зарегистрирован: 16.08.2022

#

vall: Другими словами процесс полностью автоматизирован и вики не советует вмешиваться
дело в том, что мне нужно сжатие, и оно работает, но только с одним потоком. причина: не достаточно места на esp разделе при использовании реализации загрузки системы efistub
ALiEN
Аватара пользователя
Сообщения: 61
Зарегистрирован: 23.08.2022

#

igor:причина: не достаточно места
Ну добавьте место и наблюдайте поведение mkinitcpio.

🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

igor
Аватара пользователя
Сообщения: 43
Зарегистрирован: 16.08.2022

#

ALiEN:Ну добавьте место и наблюдайте поведение mkinitcpio.
с компрессией места достаточно, но эта самая компрессия требует больше времени для сжатия. делалось бы это на восьми потоках вместо одного, думаю выигрыш был бы раза в четыре. собственно про это и тема форума
vall
Аватара пользователя
Администрация
Сообщения: 541
Зарегистрирован: 09.08.2022

#

igor:с компрессией места достаточно
Выходит, что больше места выделить не получается. И, действительно, вопрос сводится именно к параметрам COMPRESSION_OPTIONS.
vasek
Сообщения: 358
Зарегистрирован: 31.08.2022

#

Немного пояснения.
Согласно man zstd
-T#, --threads=#: Compress using # working threads (default: 1). If # is 0, attempt to detect  and  use the number of physical CPU cores. In all cases, the nb of threads is capped to ZSTDMT_NBWORKERS_MAX, which is either 64 in 32-bit mode, or  256  for  64-bit  environ          ments. This modifier does nothing if zstd is compiled without multithread support.
...
--auto-threads={physical,logical} (default: physical): When  using  a  default  amount  of threads  via  -T0,  choose the default based on the number of detected physical or logical cores.
Обрати внимание на фразу - This modifier does nothing if zstd is compiled without multithread support
igor:делалось бы это на восьми потоках вместо одного
В части количества физических/логических ядер рекомендую https://russianblogs.com/article/95901449556/

Кстати, zstd -T0 == zstdmt (zstdmt is equivalent to zstd -T0)

Ошибки не исчезают с опытом - они просто умнеют

vasek
Сообщения: 358
Зарегистрирован: 31.08.2022

#

Добавочная информация для размышления ...
Если включен Hyper-Threading, то при использовании zstd -T0 (или zstdmt) количество потоков (Thread Count) в два раза больше количества физических ядер (Core Count).
Мое железо
- статус Hyper-Threading
cat /sys/devices/system/cpu/smt/active
1
(0 - Hyper-Threading отключен, 1 - Hyper-Threading включен)
- количество cpu cores
cat /proc/cpuinfo | grep "cpu cores"| uniq
cpu cores : 2
То есть количество потоков (Thread Count) == 4 … что можно узнать и из вывода
sudo dmidecode -t processor | grep Count
Core Count: 2
Thread Count: 4
То есть при использовании zstd -T0 (или zstdmt) у меня будет только 4 потока.
А вот скомпилирован ли zstd с многопоточностью - вопрос. Сам zstd основательно не изучал, а потому ничего сказать не могу.
Но в составе zstd помимо zstdmt имеется еще одна интересная утилита:
pzstd - инструмент командной строки, который выполняет многопоточное сжатие и распаковку.
Согласно pzstd --help --- -p, --processes # : number of threads to use for (de)compression (default:<numcpus>)
Собрана ли pzstd в отличии от zstd с многопоточностью ... или это таже самая zstd … ???
Нужно разбираться ...

EDIT Немного поэкспериментировал (с подсчетом потоков):
- насколько понял, zstd собран с поддежкой мультипоточности .... работает одинаково и pzstd -p 20 и zstd -T20
- но похоже мало влияет на время ... чтобы сравнить нужен большой файл, чтобы сжимался хотя бы около 10 - 20 секунд.

Ошибки не исчезают с опытом - они просто умнеют

igor
Аватара пользователя
Сообщения: 43
Зарегистрирован: 16.08.2022

#

vasek: EDIT Немного поэкспериментировал (с подсчетом потоков):
- насколько понял, zstd собран с поддежкой мультипоточности .... работает одинаково и pzstd -p 20 и zstd -T20
- но похоже мало влияет на время ... чтобы сравнить нужен большой файл, чтобы сжимался хотя бы около 10 - 20 секунд.
речь идёт о команде mkinitcpio -P (см. заголовок темы)
vasek
Сообщения: 358
Зарегистрирован: 31.08.2022

#

igor:речь идёт о команде mkinitcpio -P (см. заголовок темы)
1. Даже с дефолтными настройками, ничего не меняя, у тебя должно быть 4 потока ... если я правильно понял твой cpu
2. Если решил изменить дефолтные настройки, то нужно это делать правильно.

Ошибки не исчезают с опытом - они просто умнеют

igor
Аватара пользователя
Сообщения: 43
Зарегистрирован: 16.08.2022

#

vasek:
igor:речь идёт о команде mkinitcpio -P (см. заголовок темы)
1. Даже с дефолтными настройками, ничего не меняя, у тебя должно быть 4 потока ... если я правильно понял твой cpu
2. Если решил изменить дефолтные настройки, то нужно это делать правильно.
да, должно быть как минимум 4 потока, но работает один из восьми. в первом посте прикреплял скрин. решил вопрос тем, что из пресет убрал fallback. теперь для него ничего не создаётся, и надобность в компрессии отпала. теперь пока до компрессии дело дойдёт, пройдут годы
vasek
Сообщения: 358
Зарегистрирован: 31.08.2022

#

igor:должно быть как минимум 4 потока, но работает один из восьми. в первом посте прикреплял скрин
На скрине видно 2 потока, а были ли еще потоки и ниже по тексту, не известно ... то есть как настроена система/железа не понятно.
Лучше фильтровать вывод htop, для чего после запуска htop:
- нажать Shift+H (включить многопоточность)
- далее F4 (включить фильтр) и прописать имя исследуемого процесса, в данном случае zstd
- будут показаны все потоки данного процесса.
... Или просто запустить команду: ps -efL | grep <name_process> | wc -l ... из полученного количества вычесть 1 - это и будет количество потоков.
Например,
ps -efL | grep tilix | wc -l
5 .... 5 - 1 = 4 потока tilix
ps -efL | grep firefox | wc -l
267 .... 267 - 1 = 266 потока firefox

Ошибки не исчезают с опытом - они просто умнеют

igor
Аватара пользователя
Сообщения: 43
Зарегистрирован: 16.08.2022

#

vasek: На скрине видно 2 потока, а были ли еще потоки и ниже по тексту, не известно ... то есть как настроена система/железа не понятно.
видимо под моим одним потоком, понимается дословно. на самом деле имеется ввиду, что загружен любой из них. потом другой. нет такого как при компиляции пакета, все потоки на 100%
vasek
Сообщения: 358
Зарегистрирован: 31.08.2022

#

igor:видимо под моим одним потоком, понимается дословно. на самом деле имеется ввиду, что загружен любой из них. потом другой. нет такого как при компиляции пакета, все потоки на 100%
Родительский процесс mkinitcpio, а zstd похоже будет дочерним ... это к тому, что желательно тщательнее проанализировать что там за потоки.
Но раз уже это тебе не нужно, то забудем и закроем тему.

Ошибки не исчезают с опытом - они просто умнеют

igor
Аватара пользователя
Сообщения: 43
Зарегистрирован: 16.08.2022

#

увидел свой давний пост, решил закрыть тему. есть информация, что zstd сжимает файлы одним потоком, которые размером пол гига. если файл более этого размера, подключается второй поток. и так далее. такой огромный initrams наврядли существует в природе, отсюда и результат. (как то в чате телеграм обсуждали)
Ответить