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 для этих двух групп пакетов. Далее я прицепил таблицу файл-2 gzdio-размер lzdio(2)-размер lzma-5-размер ------ ------------ --------------- ------------- $ cut -f2 lzma.txt |sum 2433627 $ Общий размер новых файлов, перепакованных с помощью rsyncable deflate, прежний -- 2.32G. $ cut -f3 lzma.txt |sum 1960275 $ cut -f4 lzma.txt |sum 1819361 $ Если те же самые файлы сжать с помощью 'lzma -2' или 'lzma -5', то получим 1.87G и 1.73G соответственно. Напомню, что при синхронизации rsync скачал 1.57G. Несколько точнее, разница между 1.57G и 1.73G в данном случае 172M. #!/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 "$1/$f1" |./gzdio >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 rpm2cpio "$2/$f2" |./lzdio >cpio2.lz-2 rpm2cpio "$2/$f2" |./lzma -5 >cpio2.lz-5 s3=$(du -b cpio2.lz-2 |awk '{print int($1/1024+0.5)}') s4=$(du -b cpio2.lz-5 |awk '{print int($1/1024+0.5)}') echo $f2$'\t'$s2$'\t'$s3$'\t'$s4 done