Hello, Alexander!
On April, 16 2013 at 13:23 you wrote to Alexey Markov:

??>> Собственно, сабж. Конкретнее: вот есть у меня текстовый файл
??>> размером в гигабайт, и 10 раз в секунду к нему дописывается
??>> ещё по 100 байт (открыли файл, дописали, закрыли). Какой объём
??>> будет подвергаться сжатию на ZFS - весь файл; индивидуальные
??>> кусочки по 100 байт; хвост файла, находящийся в последнем блоке?

AY> Cow подразумевает обновление только измененного блока плюс того
AY> блока где инфа о блоках. Это было бы логично :)

Дело в том, что у ZFS динамический размер блока, по-умолчанию - от
512 байт до 128 килобайт. Судя по доке, сжатие происходит только в
том случае, если сжатый кусок файла потом может уместиться в блоке
меньшего размера, чем раньше. И вот тут возникает проблема: если у
нас к файлу добавляются маленькие кусочки (как это обычно бывает с
логами), то очень скоро весь огромный файл будет представлять собой
последовательность сжатых блоков минимального размера. И выигрыш от
сжатия таких блоков тоже будет минимальный.

Меня этот вопрос интересует с чисто практической точки зрения: есть
у меня сервер, где огромные логи пишутся именно таким способом, и я
хочу выяснить для себя, будет ли какая-то польза от включения сжатия
на разделе с этими логами, или это только приведёт к потерям времени
проца на пережатие одних и тех же маленьких блоков.

Жаль, что в Инете нет внятного описания механизма принятия решения о
сжатии блоков в ZFS. Это многое прояснило бы... :-/

P.S. "Включи и попробуй" - хороший и самоочевидный, но конкретно в
моём случае неприменимый совет. Поэтому и ищу ответ аналитическим
путём.

--
WBR, Alexey Markov.

Ответить