|
ru.unix.bsd- RU.UNIX.BSD ------------------------------------------------------------------ From : Vlad Gnatov 2:5020/400 15 Jan 2007 16:46:20 To : Eugene Grosbein Subject : Re: создание/удаление миллиона файлов -------------------------------------------------------------------------------- Eugene Grosbein пишет: EG>>>>> Скорость создания - 666 файлов в секунду против 10000 на четверке. EG>>>>> то есть 6% от прежней. Вот это прогресс... EG>>> SATA? TQ работает? VG>> Как я и предполагал, дело совсем не в железе. VG>> Алокатор dirhash тупой. Т.к. dirhash при resize создается заново, VG>> то начиная с некоторого размера линейное увеличение невыгодно. EG> Ты говоришь немножко о другой проблеме. У меня еще до расширения EG> хеша скорость создания первых 10000 файлов - 666 штук в секунду. EG> От чего это может быть, такие тормоза? Я шо тилипат? Попробуйте максимально исключить влияние железа. Т.е. создайте диск в памяти и проверьте на нем. p.s. Пока рекорд 35 сек на похаканом алокаторе. Обычные сигейты ST3400620AS, ST3320620A. p.p.s. Также можете заменить скрипт программой: #include <sys/types.h> #include <sys/stat.h> #include <sys/sysctl.h> #include <fcntl.h> #include <unistd.h> #include <stdio.h> #include <time.h> int main(void) { static time_t tval; int fd, n, btime, spent, i, j; int count = 50; int step = 20000; size_t len; int mem; len = sizeof(mem); if (mkdir("d", 0700) < 0) perror("mkdir"); sysctlbyname("vfs.ufs.dirhash_expandratio", &mem, &len, NULL, 0); printf("vfs.ufs.ufs.dirhash_expandratio=%d\n", mem); sysctlbyname("vfs.ufs.dirhash_maxmem", &mem, &len, NULL, 0); printf("vfs.ufs.dirhash_maxmem=%d\n", mem); printf("creating...\n"); btime = time(&tval); n = spent = 0; for (i=1; i<=count; i++) { for (j=1; j<=step; j++) { char name[10]; sprintf(name, "d/%d.%d", i, j); fd = open(name, O_CREAT, 0600); close(fd); } n += step; spent = time(&tval) - btime; printf("created %d: %d sec, %d files/sec, ", n, spent, n/spent); sysctlbyname("vfs.ufs.dirhash_mem", &mem, &len, NULL, 0); printf("vfs.ufs.dirhash_mem=%d\n", mem); } printf("removing...\n"); btime = time(&tval); for (i=1; i<=count; i++) { for (j=1; j<=step; j++) { char name[10]; sprintf(name, "d/%d.%d", i, j); unlink(name); } } if (rmdir("d") < 0) perror("rmdir"); spent = time(&tval) - btime; printf("removed: %d sec, %d files/sec\n", spent, (count * step) / spent); return(0); } -- Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru --- ifmail v.2.15dev5.3 * Origin: Talk.ru (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/6488e9db0617.html, оценка из 5, голосов 10
|