Я использую cat largeFile.iso | lz4 -10 -, и это происходит довольно медленно (30 МБ/с?).

Используя htop, я вижу, что для 100% используется только одно ядро? Есть ли какие-либо дополнительные параметры, которые мне нужно указать? Кажется, я не могу найти никакой соответствующей информации об этом в lz4 --help.

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

3
Chris Stryczynski 4 Ноя 2019 в 18:43
Если просто стримить, то на какой скорости? lz4 -1 должно быть быстрее FWIW... :)
 – 
rogerdpack
24 Мар 2021 в 23:33

1 ответ

Лучший ответ

Я не верю, что обычная программа lz4 использует более одного ядра. Можно было бы разделить ввод на несколько частей, сжать эти части параллельно, а затем объединить сжатые части. Это было сделано для других компрессоров, например, с помощью программы pigz.

Неясно, есть ли большое преимущество в этом для lz4, поскольку компрессор довольно быстрый, и поэтому скорость ввода-вывода, вероятно, будет ограничивать общую скорость сжатия.

6
icarus 4 Ноя 2019 в 09:29
1
Это, похоже, противоречит странице github: «LZ4 — это алгоритм сжатия без потерь, обеспечивающий скорость сжатия> 500 МБ/с на ядро, масштабируемый с помощью многоядерного процессора». Как тогда это "масштабируемость с многоядерностью"?
 – 
Chris Stryczynski
4 Ноя 2019 в 13:56
Глядя в исходный код на машине с Debian, нет ссылок ни на pthread, ни на fork, которые являются вероятными способами создания дополнительных процессов.
 – 
icarus
4 Ноя 2019 в 18:07
3
Вы правы - lz4 cli в настоящее время не предлагает эту функциональность по умолчанию (по крайней мере, на данный момент). github.com/lz4/lz4/issues/807
 – 
Chris Stryczynski
4 Ноя 2019 в 21:33
Для подписчиков в этой проблеме github говорится, что он «многопоточный», но CLI по умолчанию этого не делает ... и ссылки на некоторые из них.
 – 
rogerdpack
24 Мар 2021 в 23:32