Monday, November 1, 2010

Эксперимент с ZFS

Тут заимел проблему, а я решил провести небольшой эксперимент:

const int FOLDER_IN_FOLDER_DEPTH = 24;
const int ELEMENTS_IN_FOLDER = 4096;
char** folders;

void create_folders(int _depth)
{
    int rv;
    if(_depth >= FOLDER_IN_FOLDER_DEPTH)
    {
        return;
    }

    for(int subfolder = 0; subfolder < ELEMENTS_IN_FOLDER; ++subfolder)
    {
        rv = mkdir(folders[subfolder], S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
        if(rv)
        {
            printf("Error: %d", rv);
        }
        chdir(folders[subfolder]);
        create_folders(_depth+1);
        chdir("..");
    }
}


Запустил на
rezdm@rezdm-sol:~$ uname -a
SunOS rezdm-sol 5.11 snv_111b i86pc i386 i86pc Solaris


Работало приблизительно так:

CPU states: 63.1% idle, 4.7% user, 32.2% kernel, 0.0% iowait, 0.0% swap


Бежало 76 минут, недобежало до конца (только элементы первого "рутового" фолдера, и то не все), попытался сделать rezdm@rezdm-sol:~$ find . -type d | wc -l. Долго бежало, но устал ждать. Попытался удалить, бежало 19 часов:

rezdm@rezdm-sol:~/space/test/x$ time rm -rf 00000

real 1193m34.916s
user 9m43.436s
sys 260m36.124s


Сколько места заняло создание фолдеров:
До удаления:

rezdm@rezdm-sol:~/space/test/x$ df -h .
Filesystem Size Used Avail Use% Mounted on
tank/space 898G 317G 582G 36% /tank/space


После удаления:

rezdm@rezdm-sol:~/space/test/x$ df -h .
Filesystem Size Used Avail Use% Mounted on
tank/space 898G 279G 620G 31% /tank/space


Диск:

rezdm@rezdm-sol:~$ iostat -En c9d0
c9d0 Soft Errors: 0 Hard Errors: 0 Transport Errors: 0
Model: ST31000528AS Revision: Serial No: 9VP Size: 1000.20GB <1000202305536 bytes>
Media Error: 0 Device Not Ready: 0 No Device: 0 Recoverable: 0
Illegal Request: 0

No comments:

Post a Comment