Как найти файлы с top io на солярисе ZFS?
У меня есть NFS-сервер на базе Solaris 10 ZFS. Физические диски более или менее работают с максимальной скоростью ввода-вывода. Производительность очень плохая - поэтому мы добавим шпиндели. NFS служит исключительно хранилищем для гипервизоров XenServer.
Я хочу знать, какие диски VM (файлы VHD в хранилище) производят большую часть нагрузки. Как я могу запросить файловую систему или, может быть, nfsd, чтобы получить iostat или top, как вывод с именем файла и чтения / записи. Числа могут быть абсолютными или относительными.
Я попробовал iosnoop. Это определенно идет в правильном направлении. К сожалению, кажется, что невозможно получить имена файлов в файловой системе ZFS. У меня нет опыта работы с dtrace. Может быть, там уже есть сценарий?
2 ответа
Вам нужно использовать 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 это было бы наличие устройства ZIL? Если нет, то это, вероятно, ключ к вашим проблемам с производительностью.