dadv: (Default)
Choose your future ([personal profile] dadv) wrote2010-11-20 01:06 am
Entry tags:

Миллиончик

Вздумалось повторить старый тест по созданию/удалению миллиона файлов в одном каталоге на текущем софте/железе. Чуть поправил старый скрипт, запустил:

% 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