我有一台基于 Solaris 10 ZFS 的 NFS 服务器。物理磁盘或多或少处于其最大 io 速率。性能非常差 - 因此我们将添加主轴。NFS 仅用作 XenServer Hypervisor 的存储。
我想知道哪些 VM 磁盘(即存储上的 .vhd 文件)产生了大部分负载。我如何查询文件系统或 nfsd 以获取带有文件名和读取/写入的 iostat 或 top 之类的输出。数字可以是绝对的,也可以是相对的。
我试过iosnoop。它肯定朝着正确的方向发展。不幸的是,它似乎无法获取 ZFS 文件系统上的文件名。我没有使用 dtrace 的经验。也许已经有一个脚本了?
答案1
您需要使用 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);
}
答案2
您的设置中是否有任何级别的 NVRAM 写入缓存?在 ZFS 的情况下,它将存在ZIL 设备? 如果不是,那可能就是您性能问题的关键。