On Fri, May 30, 2008 at 01:56:10AM +0400, Dmitry V. Levin wrote: > On Fri, May 30, 2008 at 01:31:14AM +0400, Alexey Tourbin wrote: > [...] > > У меня есть идея. Для выбора точек синхронизации (gzflush) можно > > использовать не только "слепой" rsync hint, но и cpio hint -- как > > только мы видим cpio magic "070707", мы знаем, что через несколько > > байтов будет mtime и потом пойдёт имя и содержимое файла. То есть > > sync можно делать в месте окончания очередного cpio header. > > Это заметно снизит степень сжатия, когда в архиве много маленьких файлов? Можно оценить деградацию сжатия от уменьшения deflate блока. $ rpm2cpio /ALT/Sisyphus/files/x86_64/RPMS/glibc-core-2.5.1-alt5.x86_64.rpm |gzip -9 |wc -c 1488757 $ gcc -DBUFSIZE=$((8*1024)) gztest.c -lz $ rpm2cpio /ALT/Sisyphus/files/x86_64/RPMS/glibc-core-2.5.1-alt5.x86_64.rpm |./a.out |wc -c 1488040 $ gcc -DBUFSIZE=$((4*1024)) gztest.c -lz $ rpm2cpio /ALT/Sisyphus/files/x86_64/RPMS/glibc-core-2.5.1-alt5.x86_64.rpm |./a.out |wc -c 1506758 $ gcc -DBUFSIZE=$((2*1024)) gztest.c -lz $ rpm2cpio /ALT/Sisyphus/files/x86_64/RPMS/glibc-core-2.5.1-alt5.x86_64.rpm |./a.out |wc -c 1544170 $ gcc -DBUFSIZE=$((1*1024)) gztest.c -lz $ rpm2cpio /ALT/Sisyphus/files/x86_64/RPMS/glibc-core-2.5.1-alt5.x86_64.rpm |./a.out |wc -c 1598928 $ Здесь deflate блок создаётся на каждые 8K, 4K, 2K, 1K входного потока. Потери составляют 0%, 1.2%, 3.7%, 7.4%. На данных, которые сжимаются лучше, потери могут быть выше.