сжатие zstd происходит на одном потоке (mkinitcpio -P)
COMPRESSION_OPTIONS=(--ultra -22)
так выглядит мой конфиг для сжатия.
на скрине виден параметр -T0, который говорит работать одним потоком. его я изменить никак не могу, это некий дефолт. всё что имеется по zstd -help не помогло.
явно где то есть другие настройки мимо /etc, но что то не нахожу
так выглядит мой конфиг для сжатия.
на скрине виден параметр -T0, который говорит работать одним потоком. его я изменить никак не могу, это некий дефолт. всё что имеется по zstd -help не помогло.
явно где то есть другие настройки мимо /etc, но что то не нахожу
По вики вот так:
По умолчанию mkinitcpio использует zstd; имейте в виду, что сжатие zstd работает в многопоточном режиме (с опцией -T0, которая запускает столько же потоков, сколько ядер в процессоре).
Там же, чуть ниже -- COMPRESSION_OPTIONS трогать вообще не рекомендуют.
Примечание: Эту опцию можно не трогать: mkinitcpio сам позаботится о том, чтобы любой поддерживаемый метод сжатия имел необходимые флаги для создания рабочего образа. Кроме того, неправильное использование этого параметра может привести к незагружаемой системе, если ядро не сможет распаковать результирующий архив.
Другими словами процесс полностью автоматизирован и вики не советует вмешиваться.
По умолчанию mkinitcpio использует zstd; имейте в виду, что сжатие zstd работает в многопоточном режиме (с опцией -T0, которая запускает столько же потоков, сколько ядер в процессоре).
Там же, чуть ниже -- COMPRESSION_OPTIONS трогать вообще не рекомендуют.
Примечание: Эту опцию можно не трогать: mkinitcpio сам позаботится о том, чтобы любой поддерживаемый метод сжатия имел необходимые флаги для создания рабочего образа. Кроме того, неправильное использование этого параметра может привести к незагружаемой системе, если ядро не сможет распаковать результирующий архив.
Другими словами процесс полностью автоматизирован и вики не советует вмешиваться.
дело в том, что мне нужно сжатие, и оно работает, но только с одним потоком. причина: не достаточно места на esp разделе при использовании реализации загрузки системы efistubvall: Другими словами процесс полностью автоматизирован и вики не советует вмешиваться
с компрессией места достаточно, но эта самая компрессия требует больше времени для сжатия. делалось бы это на восьми потоках вместо одного, думаю выигрыш был бы раза в четыре. собственно про это и тема форумаALiEN:Ну добавьте место и наблюдайте поведение mkinitcpio.
Немного пояснения.
Согласно man zstd
Обрати внимание на фразу - This modifier does nothing if zstd is compiled without multithread support
Кстати, zstd -T0 == zstdmt (zstdmt is equivalent to zstd -T0)
Согласно 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.
В части количества физических/логических ядер рекомендую https://russianblogs.com/article/95901449556/igor:делалось бы это на восьми потоках вместо одного
Кстати, zstd -T0 == zstdmt (zstdmt is equivalent to zstd -T0)
Ошибки не исчезают с опытом - они просто умнеют
Добавочная информация для размышления ...
Если включен 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 секунд.
Если включен 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 секунд.
Ошибки не исчезают с опытом - они просто умнеют
речь идёт о команде mkinitcpio -P (см. заголовок темы)vasek: EDIT Немного поэкспериментировал (с подсчетом потоков):
- насколько понял, zstd собран с поддежкой мультипоточности .... работает одинаково и pzstd -p 20 и zstd -T20
- но похоже мало влияет на время ... чтобы сравнить нужен большой файл, чтобы сжимался хотя бы около 10 - 20 секунд.
1. Даже с дефолтными настройками, ничего не меняя, у тебя должно быть 4 потока ... если я правильно понял твой cpuigor:речь идёт о команде mkinitcpio -P (см. заголовок темы)
2. Если решил изменить дефолтные настройки, то нужно это делать правильно.
Ошибки не исчезают с опытом - они просто умнеют
да, должно быть как минимум 4 потока, но работает один из восьми. в первом посте прикреплял скрин. решил вопрос тем, что из пресет убрал fallback. теперь для него ничего не создаётся, и надобность в компрессии отпала. теперь пока до компрессии дело дойдёт, пройдут годыvasek:1. Даже с дефолтными настройками, ничего не меняя, у тебя должно быть 4 потока ... если я правильно понял твой cpuigor:речь идёт о команде mkinitcpio -P (см. заголовок темы)
2. Если решил изменить дефолтные настройки, то нужно это делать правильно.
На скрине видно 2 потока, а были ли еще потоки и ниже по тексту, не известно ... то есть как настроена система/железа не понятно.igor:должно быть как минимум 4 потока, но работает один из восьми. в первом посте прикреплял скрин
Лучше фильтровать вывод 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
Ошибки не исчезают с опытом - они просто умнеют
видимо под моим одним потоком, понимается дословно. на самом деле имеется ввиду, что загружен любой из них. потом другой. нет такого как при компиляции пакета, все потоки на 100%vasek: На скрине видно 2 потока, а были ли еще потоки и ниже по тексту, не известно ... то есть как настроена система/железа не понятно.
Родительский процесс mkinitcpio, а zstd похоже будет дочерним ... это к тому, что желательно тщательнее проанализировать что там за потоки.igor:видимо под моим одним потоком, понимается дословно. на самом деле имеется ввиду, что загружен любой из них. потом другой. нет такого как при компиляции пакета, все потоки на 100%
Но раз уже это тебе не нужно, то забудем и закроем тему.
Ошибки не исчезают с опытом - они просто умнеют
увидел свой давний пост, решил закрыть тему. есть информация, что zstd сжимает файлы одним потоком, которые размером пол гига. если файл более этого размера, подключается второй поток. и так далее. такой огромный initrams наврядли существует в природе, отсюда и результат. (как то в чате телеграм обсуждали)