Эти простые сценарии тестируют различные библиотеки сжатия zlib для параллельного компрессора pigz. Параллельное сжатие может использовать несколько ядер, имеющихся в современных компьютерах, для быстрого сжатия данных. Этот метод можно комбинировать с CloudFlare zlib, который ускоряет сжатие с использованием других функций современного оборудования. Здесь я адаптировал скрипт для оценки сжатия .gz изображений мозга в формате NIfTI. Такие инструменты, как AFNI и FSL, обычно сохраняют образы NIfTI с использованием сжатия gzip (файлы .nii.gz). Современные методы МРТ, такие как многодиапазонная, позволяют получить огромные наборы данных, поэтому на сжатие этих изображений уходит много времени.
На графике ниже показана производительность pigz по сравнению с однопоточной pigz по умолчанию, так что «1» указывает на эквивалентную производительность. Производительность показана для трех уровней сжатия: быстрого (3, базовое значение 35 секунд), по умолчанию (6, 50 секунд) и медленного (9, 183 секунды). Горизонтальная ось показывает количество потоков, предназначенных для сжатия. При более низких уровнях сжатия (1) все инструменты работают относительно быстро, при этом чтение и запись с диска являются фактором, ограничивающим скорость. На более высоких уровнях сжатия сочетание нескольких потоков и улучшений CloudFlare значительно повышает производительность по сравнению с gzip по умолчанию. В качестве тестовой системы использовался 24-ядерный (48 потоков) процессор Intel Xeon Platinum 8260:
На следующем графике показано, как каждый инструмент использует предпочтительное количество потоков на 4-ядерном (8-поточном) компьютере для сжатия популярного корпуса Silesia. Все версии pigz превосходят системный однопоточный gzip. Видно, что современный формат zstd доминирует над более старым и простым gzip. gzip получил широкое распространение во многих областях (например, при визуализации мозга он используется для NIfTI, NRRD и AFNI). Простота формата gzip означает, что разработчикам легко включить поддержку в свои инструменты. Таким образом, gzip занимает важную нишу в сообществе. Однако современные форматы, разработанные для современного оборудования и использующие новые технологии, имеют свои преимущества.
Скрипт 5decompress.sh
позволяет нам сравнивать скорость распаковки. Декомпрессия происходит быстрее, чем сжатие. Однако распаковка gzip не может использовать несколько потоков и обычно выполняется медленнее, чем современные форматы сжатия. В этом тесте все инструменты gz распаковывают эти данные. Напротив, bzip2 и ztd распаковывают данные, которые были сжаты до меньшего размера. Скорость в мегабайтах в секунду рассчитывается на основе распакованного размера. Для более компактного сжатия обычно используются более сложные алгоритмы, поэтому сравнение форматов затруднено. Несмотря на это, среди инструментов gz zlib-ng демонстрирует превосходную производительность распаковки:
Скорость (МБ/с) | pigz-CF | свинья-нг | pigz-Sys | gzip | pbzip2 | pbzip2 |
---|---|---|---|---|---|---|
Декомпрессия | 278 | 300 | 274 | 244 | 122 | 236 |
Запустите тест с помощью следующей команды:
1compile.sh
2test.sh
5decompress.sh
1compile.sh
загрузит и создаст копии pigz, используя различные варианты zlib (система, CloudFlare, ng). Он также загружает образцы изображений для проверки сжатия, в частности образцы МРТ-сканирований, которые копируются в папку corpus
. Сначала вы должны запустить этот сценарий один раз, перед другими сценариями. Все остальные скрипты могут запускаться независимо друг от друга.2test.sh
сравнивает скорость различных версий pigz, а также однопоточного gzip системы. Вы можете заменить файлы в папке corpus
на более репрезентативные для вашего набора данных.3slowtest.sh
загружает корпус Silesia и проверяет скорость сжатия. Этот корпус популярен: бенчмарк 1, бенчмарк 2, бенчмарк 3.4verify.sh
тестирует сжатие и распаковку каждого метода, гарантируя, что они смогут хранить данные без потерь.5decompress.sh
оценивает скорость распаковки. В целом формат gzip медленно сжимается, но быстро распаковывается (особенно по сравнению с форматами, разработанными в то же время). Однако распаковка gzip происходит медленно по сравнению с современным zstd. Более того, хотя сжатие gzip может выиграть от параллельной обработки, распаковка — нет. Важной особенностью этого сценария является то, что каждый вариант zlib добавляет сжатые файлы в корпус тестирования, а затем каждый инструмент тестируется на этом полном корпусе. Это гарантирует, что мы сравниваем схожие задачи, поскольку некоторые методы сжатия zlib могут создавать файлы меньшего размера за счет создания файлов, которые распаковываются медленнее.6speed_size.sh
сравнивает различные варианты pigz с gzip, zstd и bzip2 для сжатия корпуса Silesia. Каждый инструмент тестируется на разных уровнях сжатия, но всегда с использованием предпочтительного количества потоков. blocksize
, соответствующий количеству потоков для сжатия. Этот репозиторий включает сценарий test_mgzip.py
для оценки этого инструмента.