On Sat, May 31, 2008 at 11:44:52PM +0400, Dmitry V. Levin wrote: > On Sat, May 31, 2008 at 10:58:47PM +0400, Alexey Tourbin wrote: > > Предварительное тестирование rsyncable gzdio показало, что эффект > > от rsyncable deflate есть, и лучше всего он проявляется при > > незначительном изменении пакетов; кроме того, пакет должен содержать > > достаточно большие файлы (если пакет целиком состоит из маленьких > > файлов, то rsyncability резко падает). > > > > Но одиночные тесты не выявляют "реального положения вещей"; требуется > > более широкое тестирование с привлечением "реальных данных" за некоторый > > промежуток времени. > > > > Предлагаю протестировать rsyncability двух каталогов: > > /ALT/archive/Sisyphus/2008/03/01/files/x86_64/RPMS > > /ALT/archive/Sisyphus/2008/04/01/files/x86_64/RPMS > > > > Методика тестирования следующая: > > 1) Из каталогов парами выбираются файлы, у которых совпадает > > имя пакета %{NAME}, но при этом не совпадает имя файла > > %name-%version-%release.x86_64.rpm. > > 2) Для каждой пары пакетов извлекается cpio архив и перепаковывается > > с помощью rsyncable gzdio из нового rpmio. > > 3) Отсекаются маленькие пакеты: оба перепакованных архива должны быть > > больше 32K. > > 4) Запускается rsync, который диагностирует степень "совпадения" двух > > перепакованных архивов. > > Тогда, наверное, надо сравнить ещё и размер rsyncable deflate, нынешний > не-rsyncable deflate и lzma для этих двух групп пакетов. Что касается rsyncable deflate vs common deflate, то ответ простой: коэффициент сжатия в среднем не изменяется. Я прицепил таблицу deflate.txt: файл-2 gzip-9-размер rsyncable-gzdio-размер ------ ------------- ---------------------- $ cut -f2 deflate.txt |sum 2434968 $ cut -f3 deflate.txt |sum 2437193 $ perl -le 'print 2437193/2434968*100' 100.091376970868 $ Разница в сжатии менее одной десятой процента, что при 1360 файлах можно в значительной степени списать на статистическую погрешность. Сжатие дело тонкое! #!/bin/sh -efu packages "$1" >pkg1 packages "$2" >pkg2 join -t$'\t' -j 1 -o '0 1.3 2.3' pkg1 pkg2 |awk -F'\t' '$2!=$3' >pkg12 while read -r pkg f1 f2; do rpm2cpio "$2/$f2" |gzip -9 >cpio1.gz rpm2cpio "$2/$f2" |./gzdio >cpio2.gz s1=$(du -b cpio1.gz |awk '{print int($1/1024+0.5)}') s2=$(du -b cpio2.gz |awk '{print int($1/1024+0.5)}') [ "$s1" -gt 32 ] && [ "$s2" -gt 32 ] || continue echo $f2$'\t'$s1$'\t'$s2 done