Сжатие JFS
Все данные могут перед записью на диск автоматически сжиматься с помощью алгоритма Lempel-Zev (LZ), а при чтении - автоматически разворачиваться. Алгоритм LZ основан на замене встречающихся последовательностей символов на указатель на первое вхождение последовательности. Применение этого алгоритма позволяет сэкономить в среднем около 50 процентов дискового пространства.
Данные файловых систем сжимаются на уровне отдельных логических блоков. Сжатие данных в более крупных блоках (например, во всей совокупности логических блоков выбранного файла) привело бы к менее эффективному использованию дискового пространства. Сжатие отдельных логических блоков файла позволяет существенно ускорить выполнение операций неупорядоченного поиска и обновления данных.
Алгоритм сжимает данные блоками по 4096 байт (1 страница) и сохраняет сжатые данные в виде минимально необходимой последовательности непрерывных участков. Очевидно, что если в файловой системе используются непрерывные участки дискового пространства по 4 КБ, сжатие данных не приведет к экономии дискового пространства. Таким образом, при использовании сжатия данных в файловой системе должны применяться фрагменты размером менее 4096 байт.
Несмотря на то, что сжатие данных в общем случае позволяет более эффективно использовать место на диске, в файловой системе все же может оставаться неиспользуемое пространство:
- В связи с тем, что степень сжатия блоков размером 4096 байт заранее неизвестна, файловая система резервирует для данных полный блок. Ненужные участки диска освобождаются после сжатия, однако такая процедура предварительного выделения памяти может привести к более раннему появлению сообщений о нехватке места.
- Свободное место необходимо для работы команды defragfs.
Помимо увеличения числа операций ввода-вывода и фрагментации свободного пространства, при использовании файловых систем со сжатием данных следует также учитывать следующие факторы, влияющие на производительность:
- Низкая скорость работы с файловой системой может быть прямым следствием использования алгоритмов сжатия/разворачивания данных. Если время сжатия и разворачивания данных сравнительно велико, то применение функций сжатия может оказаться нецелесообразным, особенно в коммерческой среде, когда данные должны предоставляться очень быстро.
- При первом изменении для всех логических блоков файловой системы со сжатием выделяется по 4096 байт дискового пространства; после записи логического блока на диск это пространство перераспределяется. Такое перераспределение требует затрат дополнительных ресурсов, которых можно избежать в файловых системах без сжатия данных.
- Для сжатия каждого байта данных необходимо в среднем 50 циклов CPU, а для разворачивания - в среднем 10 циклов. Таким образом, сжатие данных увеличивает нагрузку на процессор.
- Процесс сжатия JFS (jfsc) kproc работает с фиксированным приоритетом, равным 30, поэтому ресурсы CPU, на котором работает kproc, во время сжатия могут оказаться недоступными для процессов, работающих с меньшим приоритетом.