Миллиончик
2010-11-20 01:06Вздумалось повторить старый тест по созданию/удалению миллиона файлов в одном каталоге на текущем софте/железе. Чуть поправил старый скрипт, запустил:% create_files create remove
vfs.ufs.dirhash_maxmem: 16777216
creating...
created 50000: 2 sec, 25000 files/sec, vfs.ufs.dirhash_mem: 2798073
created 100000: 4 sec, 25000 files/sec, vfs.ufs.dirhash_mem: 2982122
created 150000: 7 sec, 21428 files/sec, vfs.ufs.dirhash_mem: 3257169
created 200000: 9 sec, 22222 files/sec, vfs.ufs.dirhash_mem: 3670766
created 250000: 12 sec, 20833 files/sec, vfs.ufs.dirhash_mem: 4290135
created 300000: 15 sec, 20000 files/sec, vfs.ufs.dirhash_mem: 4290135
created 350000: 19 sec, 18421 files/sec, vfs.ufs.dirhash_mem: 5219701
created 400000: 21 sec, 19047 files/sec, vfs.ufs.dirhash_mem: 5219701
created 450000: 24 sec, 18750 files/sec, vfs.ufs.dirhash_mem: 5219701
created 500000: 27 sec, 18518 files/sec, vfs.ufs.dirhash_mem: 5219701
created 550000: 32 sec, 17187 files/sec, vfs.ufs.dirhash_mem: 6614566
created 600000: 34 sec, 17647 files/sec, vfs.ufs.dirhash_mem: 6614566
created 650000: 37 sec, 17567 files/sec, vfs.ufs.dirhash_mem: 6614566
created 700000: 40 sec, 17500 files/sec, vfs.ufs.dirhash_mem: 6614566
created 750000: 49 sec, 15306 files/sec, vfs.ufs.dirhash_mem: 8706349
created 800000: 51 sec, 15686 files/sec, vfs.ufs.dirhash_mem: 8706349
created 850000: 54 sec, 15740 files/sec, vfs.ufs.dirhash_mem: 8706349
created 900000: 56 sec, 16071 files/sec, vfs.ufs.dirhash_mem: 8706349
created 950000: 59 sec, 16101 files/sec, vfs.ufs.dirhash_mem: 8706349
created 1000000: 61 sec, 16393 files/sec, vfs.ufs.dirhash_mem: 8706349
removing...removed: 44 sec, 22727 files/sec
Из плюсов: замираний системы при расширении UFS_DIRHASH больше нет.
Машинка 2006 года: Intel D975XBX с Pentium-D dualcore 2.8Ghz, 6GB памяти, контроллер ICH7R, на нём два диска Seagate и WD по 500GB.
Софт: FreeBSD 8.1-STABLE/i386 (доступно 3.5GB из 6), диски побиты пополам на слайсы, вторые половинки дисков собраны в gmirror, поверх него gcache с размером блока 128K (MAXPHYS), по нему gjournal, внутри записана bsdlabel, внутри один раздел с файловой системой, созданной командой newfs -J -L test /dev/cache/ca1.journala
Смонтирована в async, df показывает:
Filesystem Size Used Avail Capacity iused ifree %iused Mounted on /dev/ufs/test 202G 8.0K 186G 0% 4 27M 0% /mnt/tmpТекущая редакция скрипта:
#!/bin/sh
create() {
cd $subdir || exit 1
echo creating...
stamp=`date +%s`
jot $count 1 | while read j
do
jot $step 1 | while read i
do
if [ -n "$copyfile" ]; then
cp "$copyfile" $j.$i
else
echo -n >> $j.$i
fi
done
n=$(($n+$step))
spent=$((`date +%s`-$stamp))
echo created $n: $spent sec, `echo $n/$spent | bc` files/sec, \
`sysctl vfs.ufs.dirhash_mem`
done
cd ..
}
remove() {
echo -n removing...
stamp=`date +%s`
rm -rf $subdir
spent=$((`date +%s`-$stamp))
echo "removed: $spent sec, `echo "$count*$step/$spent" | bc` files/sec"
}
subdir=test
[ -d $subdir ] || mkdir -p $subdir
n=0
step=50000
count=20
#step=1000
#count=1000
sysctl vfs.ufs.dirhash_maxmem
case "$1" in
/*) copyfile="$1"; shift ;;
esac
[ "$1" = "create" ] && shift && create
[ "$1" = "remove" ] && shift && remove