Назад | Перейти на главную страницу

Как найти файлы с верхним io на Solaris ZFS?

У меня есть NFS-сервер Solaris 10 на базе ZFS. Физические диски более или менее работают с максимальной скоростью io. Производительность очень плохая - так что шпиндели будем добавлять. NFS служит исключительно хранилищем для гипервизоров XenServer.

Я хочу знать, какие диски виртуальных машин (т.е. файлы .vhd в хранилище) создают большую часть нагрузки. Как я могу запросить файловую систему или, возможно, nfsd, чтобы получить результат iostat или top с именем файла и прочитать / записать. Числа могут быть абсолютными или относительными.

Я попытался iosnoop. Это определенно идет в правильном направлении. К сожалению, не удается получить имена файлов в файловой системе ZFS. У меня нет опыта работы с dtrace. Может, там уже есть сценарий?

Для такого уровня самоанализа вам нужно использовать dtrace. Вот в основном пример nfsv3fileio.d из https://wikis.oracle.com/display/DTrace/nfsv3+Provider, но обновлен для работы в реальном времени (думаю, мое тестирование было минимальным). На этой же странице есть еще несколько примеров. Вы также можете Google ввести "nfssvrtop".

#!/usr/sbin/dtrace -s

#pragma D option quiet

dtrace:::BEGIN
{
        trace("Tracing.. hit CTRL-C to end. Updates every 5 seconds.\n");
}

nfsv3:::op-read-done
{
        @bytes_read[args[1]->noi_curpath] = sum(args[2]->res_u.ok.data.data_len);
}

nfsv3:::op-write-done
{
        @bytes_written[args[1]->noi_curpath] = sum(args[2]->res_u.ok.count);
}

profile:::tick-5sec
{
        trunc(@bytes_read, 15);
        trunc(@bytes_written, 15);
        printf("\n%15s   %15s   %s\n", "Bytes Read/5s", "Bytes Written/5s", "Pathname");
        printa("%@15d   %@15d   %s\n", @bytes_read, @bytes_written);
        trunc(@bytes_read);
        trunc(@bytes_written);
}

Есть ли у вас какой-либо уровень кэширования записи NVRAM в вашей настройке? В случае ZFS это будет наличие Устройство ЗИЛ? Если нет, вероятно, это ключ к вашим проблемам с производительностью.