[devel] comprehensive rsyncability test

Alexey Tourbin =?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Сб Май 31 22:58:47 MSD 2008


Предварительное тестирование 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, который диагностирует степень "совпадения" двух
перепакованных архивов.

Полный результат приведён в таблице, которую я прицепил к письму.
Таблица подразумевает следующий заголовок.

файл-1   размер-1   файл-2   размер-2   послано   скочено   speedup
------   --------   ------   --------   -------   -------   -------

Последние три поля из диагностики rsync.  Размеры округляются
до килобайтов.

$ wc -l <rsyncability.txt
1360
$

Всего мы рассматриваем 1360 штук x86_64 пакетов, которые обновились
с 1 марта по 1 апреля 2008 года.

$ awk '$NF>2' rsyncability.txt |wc -l
211
$

Из них достаточно большим значением speedup (синхронизация вдвое
быстрее, чем простое скачивание) обладают 211 пакетов.

$ sum() { perl -MList::Util=sum -ln0 -e 'print sum split'; }
$ cut -f4 rsyncability.txt |sum
2433627
$

Общий размер новых пакетов 2.32G.

$ cut -f6 rsyncability.txt |sum
1643033
$

При этом rsync скачал 1.57G.

$ cut -f5 rsyncability.txt |sum    
14017
$

Нужно также понимать, что rsync не только что-то скачал,
но и послал 13.7M (оверхед протокола при поиске совпадающих кусков;
опция --block-size здесь влияет).

ТАКИМ ОБРАЗОМ, я считаю, что эта ситуация в какой-то степени отражает
"реальное положение вещей".  А именно, если бы мы просто скачивали
"новые файлы за март", то мы скачали бы 2.32G.  Если же мы
синхронизировали "новые файлы за март" со "старыми домартовскими
файлами", то мы скачали бы где-то 1.6G (напоминаю, что совсем маленькие
пакеты исключены из рассмотрения).  Этот расчёт сделан в предположении,
что как старые предмартовские файлы, так и новые файлы за март УЖЕ
запакованы при помощи rsyncable gzdio.

Вот код скрита (gzdio.c и rsync-shell были в одном из предыдущих писем,
packages из пакета qa-robot).

test-dirs:
#!/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
	rsync --block-size 1024 -v -e ./rsync-shell foo:cpio2.gz cpio1.gz >out
	sent=$(awk '$1=="sent"{print int($2/1024+.5)}' out)
	received=$(awk '$4=="received"{print int($5/1024+.5)}' out)
	speedup=$(awk '$5=="speedup"{print$7}' out)
	echo $f1$'\t'$s1$'\t'$f2$'\t'$s2$'\t'$sent$'\t'$received$'\t'$speedup
done <pkg12
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : rsyncability.txt.bz2
Тип     : application/x-bzip2
Размер  : 25050 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20080531/8e58ec8f/attachment-0004.bin>
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип     : application/pgp-signature
Размер  : 197 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20080531/8e58ec8f/attachment-0005.bin>


Подробная информация о списке рассылки Devel