Сжатие для улучшения производительности записи жесткого диска

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

Чтобы поддерживать все направления, добавьте явный атрибут screenOrientation к вашей записи манифеста активности: user или sensor, в зависимости от того, хотите ли вы поддерживать блокировку ориентации устройства пользователем или нет.

10
задан jesterjunk 21 October 2015 в 10:26
поделиться

12 ответов

Это зависит от большого количества факторов, и я не думаю, что существует один корректный ответ. Это сводится к этому:

Можно ли сжать необработанные данные быстрее, чем необработанная производительность записи дисковых времен степень сжатия, которой Вы достигаете (или несколько в скорости, которую Вы пытаетесь получить), учитывая пропускную способность ЦП, которую Вы имеете в наличии для выделения этой цели?

Учитывая сегодняшние относительно высокие уровни записи данных в 10-х Мегабайтов/секунда это - довольно высокое препятствие для преобладания. На грани некоторых из других ответов Вы должны были бы, вероятно, иметь легко сжимаемые данные и должны будете просто сравнить их с некоторым тестом экспериментов типа обоснованности и узнать.

Относительно определенного мнения (предположение!?) к точке о дополнительных ядрах. Если Вы распараллеливаете сжатие данных и сохраняете ядро (ядра) питаемым - с высокой степенью сжатия текста, вероятно, что такая техника принесла бы некоторые плоды. Но это - просто предположение. В единственном потоковом приложении, чередующемся между записями на диск и операциями сжатия, это кажется гораздо менее вероятным мне.

1
ответ дан 3 December 2019 в 15:36
поделиться

Да, это было верно в течение по крайней мере 10 лет. Существуют бумаги операционных систем об этом. Я думаю, что Chris Small, возможно, работал над некоторыми из них.

Для скорости, gzip/zlib сжатие на более низких уровнях качества довольно быстро; если это не достаточно быстро, можно попробовать FastLZ. Быстрый способ использовать дополнительное ядро состоит в том, чтобы только использовать popen(3) отправить вывод через gzip.

4
ответ дан 3 December 2019 в 15:36
поделиться

Да, да, да, абсолютно.

Взгляд на него этот путь: возьмите свою максимальную непрерывную скорость записи на диск в мегабайтах в секунду. (Разрешение и мера это, время огромный fwrite или что-то.) Скажем, 100mb/s. Теперь возьмите свою скорость ЦП в мегагерце; скажем, 3 ГГц = 3000 МГц. Разделите скорость ЦП на скорость записи на диск. Это - количество циклов, которые ЦП тратит неактивный, который можно потратить на байт на сжатие. В этом случае 3000/100 = 30 циклов на байт.

Если бы у Вас был алгоритм, который мог бы сжать Ваши данные на 25% для эффективной скорости записи 125mb/s, то у Вас было бы 24 цикла на байт для выполнения их в, и это в основном было бы свободно, потому что ЦП не будет делать ничего больше так или иначе при ожидании диска для взбалтывания. 24 цикла на байт = 3 072 цикла на 128-байтовую строку кэша, легко достигнутую.

Мы делаем это все время при чтении оптических сред.

Если у Вас есть неактивное второе ядро, это еще легче. Просто рука от журнала буферизует к потоку того ядра, и это может взять, пока этому нравится сжимать данные, так как это не делает ничего больше! Единственный хитрый бит - Вы, хотят на самом деле иметь кольцо буферов так, чтобы Вы не сделали, чтобы производитель распараллелил (тот, делающий журнал) ожидающий на взаимном исключении буфера, который содержит потребительский поток (тот, пишущий это в диск).

8
ответ дан 3 December 2019 в 15:36
поделиться

Центральные процессоры быстрее росли с более быстрой скоростью, чем доступ жесткого диска. Даже назад в 80-х много сжатых файлов могли быть считаны от диска и несжатыми за меньшее время, чем он взял для чтения исходного (несжатого) файла. Это не будет изменяться.

Обычно, хотя, в эти дни compression/de-compression обрабатывается на более низком уровне, чем Вы записали бы, например, в слое базы данных I/O.

Относительно полноценности второго ядра только рассчитывает, если бы система будет также делать значительное количество других вещей - и Ваша программа должна была бы быть многопоточной для использования в своих интересах дополнительного ЦП.

2
ответ дан 3 December 2019 в 15:36
поделиться

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

3
ответ дан 3 December 2019 в 15:36
поделиться

Если это - просто текст, то сжатие могло определенно помочь. Просто выберите алгоритм сжатия и настройки, которые делают сжатие дешевым. "gzip" является более дешевым, чем "bzip2", и у обоих есть параметры, которые можно настроить для одобрения скорости или степени сжатия.

1
ответ дан 3 December 2019 в 15:36
поделиться

Регистрация данных в двоичной форме может быть быстрым улучшением. Вы запишете меньше в диск, и ЦП потратит числа преобразования меньшего количества времени для отправки текстовых сообщений. Не может быть полезно, если люди собираются быть чтением журналов, но они не смогут считать сжатые журналы также.

2
ответ дан 3 December 2019 в 15:36
поделиться

Это раньше было чем-то, что могло улучшить производительность в довольно многих приложениях путь назад когда. Я предположил бы, что сегодня это, менее вероятно, окупится, но это могло бы при Вашем определенном обстоятельстве, особенно если данные, которые Вы регистрируете, легко сжимаемы,

Однако как прокомментированный Shog9:

Эмпирические правила не собираются помогать Вам здесь. Это - Ваш диск, Ваш ЦП и Ваши данные. Настройте тестовый сценарий, и пропускная способность меры и загрузка ЦП с и без сжатия - видят, стоит ли это компромисса.

0
ответ дан 3 December 2019 в 15:36
поделиться

Windows уже поддерживает сжатие файлов в NTFS, поэтому все, что вам нужно сделать, это установить флаг «Сжатый» в атрибутах файла. Затем вы можете измерить, того стоило оно того или нет.

2
ответ дан 3 December 2019 в 15:36
поделиться

The Filesystems and storage lab from Stony Brook published a rather extensive performance (and energy) evaluation on file data compression on server systems at IBM's SYSTOR systems research conference this year: paper at ACM Digital Library, presentation.

The results depend on the

  • used compression algorithm and settings,
  • the file workload and
  • the characteristics of your machine.

For example, in the measurements from the paper, using a textual workload and a server environment using lzop with low compression effort are faster than plain write, but bzip and gz aren't.

In your specific setting, you should try it out and measure. It really might improve performance, but it is not always the case.

3
ответ дан 3 December 2019 в 15:36
поделиться

Если вы ограничены вводом-выводом, сохраняя читаемый человеком текст на жесткий диск, я ожидаю, что сжатие сократит общее время выполнения.

Если у вас простаивающее ядро ​​с частотой 2 ГГц и относительно быстрый жесткий диск со 100 МБ / с для потоковой передачи, Для уменьшения вдвое общего времени записи в журнал требуется сжатие не менее 2: 1 и не более примерно 10 циклов ЦП на один несжатый байт, чтобы компрессор обдумывал данные. С двухканальным процессором это (очень примерно) 20 инструкций на байт.

Я вижу, что LZRW1-A (один из самых быстрых алгоритмов сжатия) использует от 10 до 20 инструкций на байт и сжимает типичный английский текст примерно 2: 1. В верхнем конце (20 инструкций на байт) вы находитесь прямо на границе между ограничением ввода-вывода и ограничением ЦП. На среднем и нижнем уровнях вы все еще ограничены вводом-выводом, поэтому есть несколько доступных циклов (немного) для более сложного компрессора, чтобы немного дольше обдумывать данные.

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

Вы можете рассмотреть возможность создания сжатого раздела, сохранения данных в этом разделе (позволяя драйверу устройства сжать их) и сравнения скорости с вашей исходной скоростью. Это может занять меньше времени и с меньшей вероятностью приведет к появлению новых ошибок, чем изменение вашей программы и связывание в алгоритме сжатия.

Я вижу список сжатых файловых систем, основанный на FUSE , и слышал, что NTFS также поддерживает сжатые разделы.

1
ответ дан 3 December 2019 в 15:36
поделиться

Если эта конкретная машина часто связана IO, еще один способ ускорить его - установить RAID-массив. Это даст ускорение каждой программе и каждому виду данных (даже несжимаемым данным).

Например, популярная конфигурация RAID 1+0 с 4 дисками дает ускорение почти в 2 раза.

Почти столь же популярная конфигурация RAID 5, с теми же 4 дисками, дает ускорение почти в 3 раза.

Создать RAID-массив со скоростью, в 8 раз превышающей скорость одного диска, относительно просто.

С другой стороны, высокие коэффициенты сжатия, по-видимому, не так просты. Сжатие "всего лишь" 6,30 к одному даст вам денежный приз за побитие текущего мирового рекорда по сжатию (приз Хаттера).

1
ответ дан 3 December 2019 в 15:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: