On Sun, Jun 01, 2008 at 01:57:22AM +0400, Dmitry V. Levin wrote: > On Sun, Jun 01, 2008 at 01:32:39AM +0400, Alexey Tourbin wrote: > [...] > > Что касается rsyncable deflate vs common deflate, то ответ простой: > > коэффициент сжатия в среднем не изменяется. > > Я ожидал, что rsyncable deflate не может показать лучший коэффициент > сжатия, чем обычный deflate. Однако в приложенном файле довольно много > случаев, когда rsyncable deflate сильнее... Это связано с cpio hints -- дело в том, что мы пытаемся начинать новый deflate блок на границе файлов, когда начинается новый файл. Рассмотрим пример. В cpio подряд идут ELF файл размером 8K и дальше текстовый файл размером 8K. "Слепое" разбиение на блоки в deflate этого не понимает, в результате ELF и текстовый файл попадут в один и тот же deflate блок. Дальше надо знать, что такое частотное кодирование и Huffman tree. В ELF файле встречаются все поряд символы с достаточно равномерными вероятностями; а в текстовом файле встречаются только ASCII буквы, и вероятности появления букв (в английском тексте) хорошо известны (они неодинаковые). В начале каждого deflate блока идёт Huffman tree, и если мы делаем sync на границе binary file/text file, то последующий текстовый кусок сожмётся гораздо более эффективно.