Главная страница


ru.unix.bsd

 
 - RU.UNIX.BSD ------------------------------------------------------------------
 From : Vlad Gnatov                          2:5020/400     15 Jan 2007  08:07:33
 To : Eugene Grosbein
 Subject : Re: создание/удаление миллиона файлов
 -------------------------------------------------------------------------------- 
 
 Eugene Grosbein пишет:
 
 EG>>> Сейчас запустил тот же самый скрипт на FreeBSD 6.2-PRE, Pentium-D
 EG>>> 2x2.8Gb,
 EG>>> 1Gb RAM, диск WDC 80G WD800JB-00FMA0 в режиме ATA100 (без TQ),
 EG>>> noasync+softupdates, раздел UFS2, 22G с 2Gb и 2.5 миллионов inode
 EG>>> свободных, ядро SMP, vfs.ufs.dirhash_maxmem: 8388608.
 EG>>> Скорость создания - 666 файлов в секунду против 10000 на четверке.
 EG>>> то есть 6% от прежней. Вот это прогресс...
 VG>> И снова, шо я делаю нетак?
 VG>> (Все тот же RELENG_6, x2 4200, 4G, sg 320G ST3320620A)
 VG>> $mount |grep garbage3
 VG>> /dev/ad8s1d on /mnt/garbage3 (ufs, local, with quotas, soft-updates)
 EG> SATA? TQ работает?
 
 Как я и предполагал, дело совсем не в железе.
 
 Алокатор dirhash тупой. Т.к. dirhash при resize создается заново,
 то начиная с некоторого размера линейное увеличение невыгодно.
 
 С этим можно бороться как поправив алгоритм, так и более простым
 хаком, увеличив expand ratio. 
 
 - --- ufs/ufs/ufs_dirhash.c
 +++ ufs_dirhash.c.new
 @@ -79,7 +79,9 @@
  static int ufs_dirhashcheck = 0;
  SYSCTL_INT(_vfs_ufs, OID_AUTO, dirhash_docheck, CTLFLAG_RW,
 &ufs_dirhashcheck,
      0, "enable extra sanity tests");
 -
 +static int ufs_dirhashexpandratio = 150; /* ($var * 3 + 1) / 2 */
 +SYSCTL_INT(_vfs_ufs, OID_AUTO, dirhash_expandratio, CTLFLAG_RW, 
 &ufs_dirhashexpandratio,
 +    0, "dirhash expand ratio in percents");
  
  static int ufsdirhash_hash(struct dirhash *dh, char *name, int namelen);
  static void ufsdirhash_adjfree(struct dirhash *dh, doff_t offset, int diff);
 @@ -150,15 +152,19 @@
     if (ip->i_effnlink == 0)
   return (-1);
  
 +   /* if expandratio below minimal set him to default */
 +   if (ufs_dirhashexpandratio < 110 )
 +  ufs_dirhashexpandratio = 150;
 +
     vp = ip->i_vnode;
     /* Allocate 50% more entries than this dir size could ever need. */
     KASSERT(ip->i_size >= DIRBLKSIZ, ("ufsdirhash_build size"));
     nslots = ip->i_size / DIRECTSIZ(1);
 -   nslots = (nslots * 4 + 1) / 2;
 +   nslots = (nslots * ufs_dirhashexpandratio) / 100;
     narrays = howmany(nslots, DH_NBLKOFF);
     nslots = narrays * DH_NBLKOFF;
     dirblocks = howmany(ip->i_size, DIRBLKSIZ);
 -   nblocks = (dirblocks * 4 + 1) / 2;
 +   nblocks = (dirblocks * ufs_dirhashexpandratio) / 100;
  
     memreqd = sizeof(*dh) + narrays * sizeof(*dh->dh_hash) +
   narrays * DH_NBLKOFF * sizeof(**dh->dh_hash) +
 default:
 (нужно быть осторожным, играясь с expandratio: если следующая итерация
 dirhash_mem невлезет в dirhash_maxmem, вместо улучшения получим
 катастрофическое падения производительности)
 
 $./testm
 vfs.ufs.dirhash_maxmem: 15000000
 vfs.ufs.dirhash_expandratio=150
 creating...  
 created 20000: 1 sec, 20000 files/sec, vfs.ufs.dirhash_mem: 2142441
 created 40000: 2 sec, 20000 files/sec, vfs.ufs.dirhash_mem: 2272652
 created 60000: 3 sec, 20000 files/sec, vfs.ufs.dirhash_mem: 2388738
 created 80000: 4 sec, 20000 files/sec, vfs.ufs.dirhash_mem: 2579625
 created 100000: 5 sec, 20000 files/sec, vfs.ufs.dirhash_mem: 2563757
 created 120000: 6 sec, 20000 files/sec, vfs.ufs.dirhash_mem: 2882232
 created 140000: 7 sec, 20000 files/sec, vfs.ufs.dirhash_mem: 2882232
 created 180000: 9 sec, 20000 files/sec, vfs.ufs.dirhash_mem: 3360971
 created 200000: 10 sec, 20000 files/sec, vfs.ufs.dirhash_mem: 3360971
 created 220000: 11 sec, 20000 files/sec, vfs.ufs.dirhash_mem: 3360971
 created 240000: 12 sec, 20000 files/sec, vfs.ufs.dirhash_mem: 3360971
 created 260000: 14 sec, 18571 files/sec, vfs.ufs.dirhash_mem: 4078567
 created 280000: 15 sec, 18666 files/sec, vfs.ufs.dirhash_mem: 4078567
 created 300000: 16 sec, 18750 files/sec, vfs.ufs.dirhash_mem: 4078567
 created 320000: 17 sec, 18823 files/sec, vfs.ufs.dirhash_mem: 4078567
 created 340000: 18 sec, 18888 files/sec, vfs.ufs.dirhash_mem: 4078567
 created 360000: 19 sec, 18947 files/sec, vfs.ufs.dirhash_mem: 4078567
 created 380000: 23 sec, 16521 files/sec, vfs.ufs.dirhash_mem: 5154961
 created 400000: 24 sec, 16666 files/sec, vfs.ufs.dirhash_mem: 5154961
 created 420000: 25 sec, 16800 files/sec, vfs.ufs.dirhash_mem: 5154961
 created 440000: 25 sec, 17600 files/sec, vfs.ufs.dirhash_mem: 5154961
 created 460000: 26 sec, 17692 files/sec, vfs.ufs.dirhash_mem: 5154961
 created 480000: 27 sec, 17777 files/sec, vfs.ufs.dirhash_mem: 5154961
 created 500000: 28 sec, 17857 files/sec, vfs.ufs.dirhash_mem: 5158421
 created 520000: 29 sec, 17931 files/sec, vfs.ufs.dirhash_mem: 5158421
 created 540000: 30 sec, 18000 files/sec, vfs.ufs.dirhash_mem: 5158421
 created 560000: 37 sec, 15135 files/sec, vfs.ufs.dirhash_mem: 6772498
 created 580000: 38 sec, 15263 files/sec, vfs.ufs.dirhash_mem: 6772498
 created 600000: 39 sec, 15384 files/sec, vfs.ufs.dirhash_mem: 6772498
 created 620000: 40 sec, 15500 files/sec, vfs.ufs.dirhash_mem: 6772498
 created 640000: 40 sec, 16000 files/sec, vfs.ufs.dirhash_mem: 6772498
 created 660000: 41 sec, 16097 files/sec, vfs.ufs.dirhash_mem: 6772498
 created 680000: 42 sec, 16190 files/sec, vfs.ufs.dirhash_mem: 6772498
 created 700000: 43 sec, 16279 files/sec, vfs.ufs.dirhash_mem: 6772498
 created 720000: 44 sec, 16363 files/sec, vfs.ufs.dirhash_mem: 6772498
 created 740000: 45 sec, 16444 files/sec, vfs.ufs.dirhash_mem: 6772498
 created 760000: 46 sec, 16521 files/sec, vfs.ufs.dirhash_mem: 6772498
 created 780000: 47 sec, 16595 files/sec, vfs.ufs.dirhash_mem: 6772498
 created 800000: 48 sec, 16666 files/sec, vfs.ufs.dirhash_mem: 6772498
 created 820000: 61 sec, 13442 files/sec, vfs.ufs.dirhash_mem: 9195155
 created 840000: 62 sec, 13548 files/sec, vfs.ufs.dirhash_mem: 9195155
 created 860000: 63 sec, 13650 files/sec, vfs.ufs.dirhash_mem: 9195155
 created 880000: 64 sec, 13750 files/sec, vfs.ufs.dirhash_mem: 9195155
 created 900000: 65 sec, 13846 files/sec, vfs.ufs.dirhash_mem: 9195155
 created 920000: 66 sec, 13939 files/sec, vfs.ufs.dirhash_mem: 9195155
 created 940000: 67 sec, 14029 files/sec, vfs.ufs.dirhash_mem: 9195155
 created 960000: 68 sec, 14117 files/sec, vfs.ufs.dirhash_mem: 9195155
 created 980000: 69 sec, 14202 files/sec, vfs.ufs.dirhash_mem: 9195155
 created 1000000: 70 sec, 14285 files/sec, vfs.ufs.dirhash_mem: 9195155
 removing...removed: 46 sec, 21739 files/sec
 $./testm
 vfs.ufs.dirhash_maxmem: 15000000
 vfs.ufs.dirhash_expandratio=200
 creating...
 created 20000: 1 sec, 20000 files/sec, vfs.ufs.dirhash_mem: 1688793
 created 40000: 2 sec, 20000 files/sec, vfs.ufs.dirhash_mem: 1821145
 created 60000: 3 sec, 20000 files/sec, vfs.ufs.dirhash_mem: 2085849
 created 80000: 4 sec, 20000 files/sec, vfs.ufs.dirhash_mem: 2085849
 created 100000: 5 sec, 20000 files/sec, vfs.ufs.dirhash_mem: 2615257
 created 120000: 6 sec, 20000 files/sec, vfs.ufs.dirhash_mem: 2615257
 created 140000: 7 sec, 20000 files/sec, vfs.ufs.dirhash_mem: 2615257
 created 160000: 8 sec, 20000 files/sec, vfs.ufs.dirhash_mem: 2615257
 created 180000: 8 sec, 22500 files/sec, vfs.ufs.dirhash_mem: 2615257
 created 200000: 10 sec, 20000 files/sec, vfs.ufs.dirhash_mem: 3674073
 created 220000: 11 sec, 20000 files/sec, vfs.ufs.dirhash_mem: 3674073
 created 240000: 12 sec, 20000 files/sec, vfs.ufs.dirhash_mem: 3674073
 created 280000: 14 sec, 20000 files/sec, vfs.ufs.dirhash_mem: 3674073
 created 300000: 15 sec, 20000 files/sec, vfs.ufs.dirhash_mem: 3674073
 created 320000: 16 sec, 20000 files/sec, vfs.ufs.dirhash_mem: 3674073
 created 340000: 17 sec, 20000 files/sec, vfs.ufs.dirhash_mem: 3674073
 created 360000: 18 sec, 20000 files/sec, vfs.ufs.dirhash_mem: 3674073
 created 380000: 21 sec, 18095 files/sec, vfs.ufs.dirhash_mem: 5791705
 created 400000: 22 sec, 18181 files/sec, vfs.ufs.dirhash_mem: 5791705
 created 420000: 23 sec, 18260 files/sec, vfs.ufs.dirhash_mem: 5791705
 created 440000: 24 sec, 18333 files/sec, vfs.ufs.dirhash_mem: 5791705
 created 460000: 25 sec, 18400 files/sec, vfs.ufs.dirhash_mem: 5791705
 created 480000: 25 sec, 19200 files/sec, vfs.ufs.dirhash_mem: 5791705
 created 500000: 26 sec, 19230 files/sec, vfs.ufs.dirhash_mem: 5791705
 created 520000: 27 sec, 19259 files/sec, vfs.ufs.dirhash_mem: 5791705
 created 540000: 28 sec, 19285 files/sec, vfs.ufs.dirhash_mem: 5791705
 created 560000: 29 sec, 19310 files/sec, vfs.ufs.dirhash_mem: 5791705
 created 580000: 30 sec, 19333 files/sec, vfs.ufs.dirhash_mem: 5791705
 created 600000: 31 sec, 19354 files/sec, vfs.ufs.dirhash_mem: 5791705
 created 620000: 32 sec, 19375 files/sec, vfs.ufs.dirhash_mem: 5791705
 created 640000: 33 sec, 19393 files/sec, vfs.ufs.dirhash_mem: 5791705
 created 660000: 34 sec, 19411 files/sec, vfs.ufs.dirhash_mem: 5791705
 created 680000: 35 sec, 19428 files/sec, vfs.ufs.dirhash_mem: 5791705
 created 700000: 36 sec, 19444 files/sec, vfs.ufs.dirhash_mem: 5791705
 created 720000: 47 sec, 15319 files/sec, vfs.ufs.dirhash_mem: 10061489
 created 740000: 48 sec, 15416 files/sec, vfs.ufs.dirhash_mem: 10061489
 created 760000: 49 sec, 15510 files/sec, vfs.ufs.dirhash_mem: 10061489
 created 780000: 50 sec, 15600 files/sec, vfs.ufs.dirhash_mem: 10061489
 created 800000: 51 sec, 15686 files/sec, vfs.ufs.dirhash_mem: 10061489
 created 820000: 52 sec, 15769 files/sec, vfs.ufs.dirhash_mem: 10061489
 created 840000: 54 sec, 15555 files/sec, vfs.ufs.dirhash_mem: 10061489
 created 860000: 55 sec, 15636 files/sec, vfs.ufs.dirhash_mem: 10061489
 created 880000: 56 sec, 15714 files/sec, vfs.ufs.dirhash_mem: 10061489
 created 900000: 57 sec, 15789 files/sec, vfs.ufs.dirhash_mem: 10061489
 created 920000: 58 sec, 15862 files/sec, vfs.ufs.dirhash_mem: 10061489
 created 940000: 58 sec, 16206 files/sec, vfs.ufs.dirhash_mem: 10061489
 created 960000: 59 sec, 16271 files/sec, vfs.ufs.dirhash_mem: 10061489
 created 980000: 60 sec, 16333 files/sec, vfs.ufs.dirhash_mem: 10061489
 created 1000000: 61 sec, 16393 files/sec, vfs.ufs.dirhash_mem: 10061489
 removing...removed: 44 sec, 22727 files/sec
 $./testm
 vfs.ufs.dirhash_maxmem: 15000000
 vfs.ufs.dirhash_expandratio=300
 creating...
 created 20000: 1 sec, 20000 files/sec, vfs.ufs.dirhash_mem: 1740061
 created 40000: 2 sec, 20000 files/sec, vfs.ufs.dirhash_mem: 1740061
 created 60000: 2 sec, 30000 files/sec, vfs.ufs.dirhash_mem: 2186749
 created 80000: 3 sec, 26666 files/sec, vfs.ufs.dirhash_mem: 2186749
 created 100000: 4 sec, 25000 files/sec, vfs.ufs.dirhash_mem: 2186749
 created 120000: 5 sec, 24000 files/sec, vfs.ufs.dirhash_mem: 2186749
 created 140000: 6 sec, 23333 files/sec, vfs.ufs.dirhash_mem: 3526813
 created 160000: 7 sec, 22857 files/sec, vfs.ufs.dirhash_mem: 3526813
 created 180000: 8 sec, 22500 files/sec, vfs.ufs.dirhash_mem: 3526813
 created 200000: 9 sec, 22222 files/sec, vfs.ufs.dirhash_mem: 3526813
 created 220000: 10 sec, 22000 files/sec, vfs.ufs.dirhash_mem: 3526813
 created 240000: 11 sec, 21818 files/sec, vfs.ufs.dirhash_mem: 3526813
 created 260000: 12 sec, 21666 files/sec, vfs.ufs.dirhash_mem: 3526813
 created 280000: 12 sec, 23333 files/sec, vfs.ufs.dirhash_mem: 3526813
 created 300000: 13 sec, 23076 files/sec, vfs.ufs.dirhash_mem: 3526813
 created 320000: 14 sec, 22857 files/sec, vfs.ufs.dirhash_mem: 3526813
 created 340000: 15 sec, 22666 files/sec, vfs.ufs.dirhash_mem: 3526813
 created 360000: 18 sec, 20000 files/sec, vfs.ufs.dirhash_mem: 7548036
 created 380000: 19 sec, 20000 files/sec, vfs.ufs.dirhash_mem: 7548036
 created 400000: 20 sec, 20000 files/sec, vfs.ufs.dirhash_mem: 7548036
 created 420000: 21 sec, 20000 files/sec, vfs.ufs.dirhash_mem: 7548036
 created 440000: 22 sec, 20000 files/sec, vfs.ufs.dirhash_mem: 7548036
 created 460000: 23 sec, 20000 files/sec, vfs.ufs.dirhash_mem: 7548036
 created 480000: 24 sec, 20000 files/sec, vfs.ufs.dirhash_mem: 7548036
 created 500000: 25 sec, 20000 files/sec, vfs.ufs.dirhash_mem: 7548036
 created 520000: 26 sec, 20000 files/sec, vfs.ufs.dirhash_mem: 7548036
 created 540000: 27 sec, 20000 files/sec, vfs.ufs.dirhash_mem: 7548036
 created 560000: 28 sec, 20000 files/sec, vfs.ufs.dirhash_mem: 7548036
 created 580000: 28 sec, 20714 files/sec, vfs.ufs.dirhash_mem: 7548036
 created 600000: 29 sec, 20689 files/sec, vfs.ufs.dirhash_mem: 7548036
 created 620000: 30 sec, 20666 files/sec, vfs.ufs.dirhash_mem: 7548036
 created 640000: 31 sec, 20645 files/sec, vfs.ufs.dirhash_mem: 7548036
 created 660000: 32 sec, 20625 files/sec, vfs.ufs.dirhash_mem: 7548036
 created 680000: 33 sec, 20606 files/sec, vfs.ufs.dirhash_mem: 7548036
 created 700000: 34 sec, 20588 files/sec, vfs.ufs.dirhash_mem: 7548036
 created 720000: 35 sec, 20571 files/sec, vfs.ufs.dirhash_mem: 7548036
 created 740000: 36 sec, 20555 files/sec, vfs.ufs.dirhash_mem: 7548036
 created 760000: 37 sec, 20540 files/sec, vfs.ufs.dirhash_mem: 7548036
 created 780000: 37 sec, 21081 files/sec, vfs.ufs.dirhash_mem: 7548036
 created 800000: 38 sec, 21052 files/sec, vfs.ufs.dirhash_mem: 7548036
 created 820000: 40 sec, 20500 files/sec, vfs.ufs.dirhash_mem: 7548036
 created 840000: 40 sec, 21000 files/sec, vfs.ufs.dirhash_mem: 7548036
 created 860000: 42 sec, 20476 files/sec, vfs.ufs.dirhash_mem: 7548036
 created 880000: 43 sec, 20465 files/sec, vfs.ufs.dirhash_mem: 7548036
 created 900000: 44 sec, 20454 files/sec, vfs.ufs.dirhash_mem: 7548036
 created 920000: 45 sec, 20444 files/sec, vfs.ufs.dirhash_mem: 7548036
 created 940000: 46 sec, 20434 files/sec, vfs.ufs.dirhash_mem: 7548036
 created 960000: 47 sec, 20425 files/sec, vfs.ufs.dirhash_mem: 7548036
 created 980000: 48 sec, 20416 files/sec, vfs.ufs.dirhash_mem: 7548036
 created 1000000: 49 sec, 20408 files/sec, vfs.ufs.dirhash_mem: 7548036
 removing...removed: 45 sec, 22222 files/sec
 -- 
 Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
 --- ifmail v.2.15dev5.3
  * Origin: Talk.ru (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Re: создание/удаление миллиона файлов   Vlad Gnatov   15 Jan 2007 08:07:33 
 создание/удаление миллиона файлов   Alex Semenyaka   15 Jan 2007 12:55:10 
 Re: создание/удаление миллиона файлов   Vlad Gnatov   16 Jan 2007 17:59:44 
 Re: создание/удаление миллиона файлов   Sergey Matveychuk   17 Jan 2007 11:50:34 
 создание/удаление миллиона файлов   Alex Semenyaka   23 Jan 2007 11:23:02 
 Re: создание/удаление миллиона файлов   Vlad Gnatov   24 Jan 2007 18:10:06 
Архивное /ru.unix.bsd/6488754b9fb0.html, оценка 3 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional