|
|
ru.unix.bsd- RU.UNIX.BSD ------------------------------------------------------------------ From : Eugene Grosbein 2:5006/1 13 Oct 2002 00:21:03 To : Valentin Nechayev Subject : Re: INN -------------------------------------------------------------------------------- EG>> Как я люблю такие задачи, с миллионом файлов одном каталоге. EG>> Под такую задачу систему и настроить не грех. VN> И как? VN> root@iv:/usr/src/sys/i386/conf##sysctl vfs.ufs VN> vfs.ufs.dirhash_minsize: 2560 VN> vfs.ufs.dirhash_maxmem: 2097152 VN> vfs.ufs.dirhash_mem: 66615 VN> vfs.ufs.dirhash_docheck: 0 VN> Hа машине 256M оперативки. OK, VN> root@iv:/usr/src/sys/i386/conf##sysctl vfs.ufs.dirhash_maxmem=8388608 VN> vfs.ufs.dirhash_maxmem: 2097152 -> 8388608 Вот этого достаточно. Сейчас у меня достаточно железа, чтобы провести полный тест с миллионом. Скрипт переписал для возможности следить, что происходит. Очень занимательно :-) #!/bin/sh create() { echo creating... stamp=`date +%s` jot $count 1 | while read j do jot $step 1 | while read i do echo -n >> $j.$i 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 } remove() { echo -n removing... cd .. stamp=`date +%s` rm -rf d spent=$((`date +%s`-$stamp)) echo "removed: $spent sec, `echo "$count*$step/$spent" | bc` files/sec" } mkdir d cd d n=0 step=20000 # создаем пачками по 20000 за раз count=50 # 50 пачек, итого миллион sysctl vfs.ufs.dirhash_maxmem create remove # EOF Результат, скрипт пущен не от рута: vfs.ufs.dirhash_maxmem: 8388608 creating... created 20000: 2 sec, 10000 files/sec, vfs.ufs.dirhash_mem: 192064 created 40000: 4 sec, 10000 files/sec, vfs.ufs.dirhash_mem: 328549 created 60000: 6 sec, 10000 files/sec, vfs.ufs.dirhash_mem: 450564 created 80000: 9 sec, 8888 files/sec, vfs.ufs.dirhash_mem: 634613 created 100000: 11 sec, 9090 files/sec, vfs.ufs.dirhash_mem: 634613 created 120000: 14 sec, 8571 files/sec, vfs.ufs.dirhash_mem: 909660 created 140000: 17 sec, 8235 files/sec, vfs.ufs.dirhash_mem: 909660 created 160000: 21 sec, 7619 files/sec, vfs.ufs.dirhash_mem: 1323257 created 180000: 23 sec, 7826 files/sec, vfs.ufs.dirhash_mem: 1323257 created 200000: 25 sec, 8000 files/sec, vfs.ufs.dirhash_mem: 1323257 created 220000: 28 sec, 7857 files/sec, vfs.ufs.dirhash_mem: 1323257 created 240000: 33 sec, 7272 files/sec, vfs.ufs.dirhash_mem: 1942626 created 260000: 36 sec, 7222 files/sec, vfs.ufs.dirhash_mem: 1942626 created 280000: 38 sec, 7368 files/sec, vfs.ufs.dirhash_mem: 1942626 created 300000: 40 sec, 7500 files/sec, vfs.ufs.dirhash_mem: 1942626 created 320000: 43 sec, 7441 files/sec, vfs.ufs.dirhash_mem: 1942626 created 340000: 52 sec, 6538 files/sec, vfs.ufs.dirhash_mem: 2873222 created 360000: 54 sec, 6666 files/sec, vfs.ufs.dirhash_mem: 2873222 created 380000: 57 sec, 6666 files/sec, vfs.ufs.dirhash_mem: 2873222 created 400000: 59 sec, 6779 files/sec, vfs.ufs.dirhash_mem: 2873222 created 420000: 61 sec, 6885 files/sec, vfs.ufs.dirhash_mem: 2873222 created 440000: 63 sec, 6984 files/sec, vfs.ufs.dirhash_mem: 2873222 created 460000: 66 sec, 6969 files/sec, vfs.ufs.dirhash_mem: 2873222 created 480000: 84 sec, 5714 files/sec, vfs.ufs.dirhash_mem: 4268088 created 500000: 86 sec, 5813 files/sec, vfs.ufs.dirhash_mem: 4268088 created 520000: 88 sec, 5909 files/sec, vfs.ufs.dirhash_mem: 4268088 created 540000: 91 sec, 5934 files/sec, vfs.ufs.dirhash_mem: 4268088 created 560000: 93 sec, 6021 files/sec, vfs.ufs.dirhash_mem: 4268088 created 580000: 95 sec, 6105 files/sec, vfs.ufs.dirhash_mem: 4268088 created 600000: 97 sec, 6185 files/sec, vfs.ufs.dirhash_mem: 4268088 created 620000: 99 sec, 6262 files/sec, vfs.ufs.dirhash_mem: 4268088 created 640000: 102 sec, 6274 files/sec, vfs.ufs.dirhash_mem: 4268088 created 660000: 104 sec, 6346 files/sec, vfs.ufs.dirhash_mem: 4268088 created 680000: 107 sec, 6355 files/sec, vfs.ufs.dirhash_mem: 4268088 created 700000: 109 sec, 6422 files/sec, vfs.ufs.dirhash_mem: 4268088 created 720000: 146 sec, 4931 files/sec, vfs.ufs.dirhash_mem: 6359873 created 740000: 148 sec, 5000 files/sec, vfs.ufs.dirhash_mem: 6359873 created 760000: 150 sec, 5066 files/sec, vfs.ufs.dirhash_mem: 6359873 created 780000: 153 sec, 5098 files/sec, vfs.ufs.dirhash_mem: 6359873 created 800000: 155 sec, 5161 files/sec, vfs.ufs.dirhash_mem: 6359873 created 820000: 157 sec, 5222 files/sec, vfs.ufs.dirhash_mem: 6359873 created 840000: 159 sec, 5283 files/sec, vfs.ufs.dirhash_mem: 6359873 created 860000: 162 sec, 5308 files/sec, vfs.ufs.dirhash_mem: 6359873 created 880000: 164 sec, 5365 files/sec, vfs.ufs.dirhash_mem: 6359873 created 900000: 167 sec, 5389 files/sec, vfs.ufs.dirhash_mem: 6359873 created 920000: 169 sec, 5443 files/sec, vfs.ufs.dirhash_mem: 6359873 created 940000: 171 sec, 5497 files/sec, vfs.ufs.dirhash_mem: 6359873 created 960000: 174 sec, 5517 files/sec, vfs.ufs.dirhash_mem: 6359873 created 980000: 176 sec, 5568 files/sec, vfs.ufs.dirhash_mem: 6359873 created 1000000: 179 sec, 5586 files/sec, vfs.ufs.dirhash_mem: 6359873 removing...removed: 134 sec, 7462 files/sec Тут на хорошо видно, как dirhash скачкообразно забирает по 50% дополнительной памяти, когда хеши переполняются. В этом месте наблюдается очень нехороший эффект: в это время, пока dirhash инициализирует новую память структурами, все процессы встают. Даже top, запущенный через rtprio, замирает. Последний такой скачек после 700 тысяч файлов длился аж 40 секунд и именно из-за этих скачков падала средняя скорость создания файлов, а пока память есть, она заполняется с константной скоростью, последние 20000 созданы за 3 секунды, как и третья порция. Это хороший плюс. Стоит отметить, что rm -rf существенно по разному ведет себя для рута (euid) и для обычного юзера. От рута он работает вдвое дольше у меня и ест вдвое больше памяти. Это связано с какими-то тонкостями работы с fts, а точнее сказать с "толстостями" :-) Hо и от обычного юзера для миллиона он скушал 123M памяти. Похоже, память ест не он сам, а fts. find -delete ведет себя не лучше. Железо: Celeron 900E, 320M, диск IBM 40G ATA100 в режиме ATA33+tags, noasync+softupdates, раздел 15G с 1.5Gb и 3.5 миллионов inode свободных. Hа async не тестировал. Итого: три минуты на создание и чуть больше двух на удаление миллиона файлов в одном каталоге. Практически все время system time, диск, как и прежде, при создании почти не дергался, при удалении softupdates сбрасывали изменения пачками, тут скорость диска тоже имела некоторое значение. Hеобязательно ядро хачить. Хотя с затыками надо что-то делать, после четверти миллиона (на чем год назад я остановился :) затыки уже существенные в момент скачка. Eugene --- slrn/0.9.7.4 (FreeBSD) * Origin: Svyaz Service JSC (2:5006/1@fidonet) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/88696a89a69e.html, оценка из 5, голосов 10
|