我正在尝试解释运行以下命令的结果
iostat -mnhyc
它产生以下结果
Filesystem: rMB_nor/s wMB_nor/s rMB_dir/s wMB_dir/s rMB_svr/s wMB_svr/s ops/s rops/s wops/s
/NFS_mount_path/
376.46 0.00 0.00 0.00 0.98 0.00 132.80 129.60 0.00
实际上从我的 NFS 挂载中读取了多少数据?我应该考虑 rMB_nor/s 还是 rMB_svr/s?iostat 的手册页说 rMB_nor/s 是应用程序通过 read(2) 调用读取的 MB 数,而 rMB_svr/s 是 NFS 客户端通过 NFS READ 请求从服务器读取的 MB 数。但是,我不明白它们到底有什么不同。NFS READ 和 read(2) 之间有什么区别?对 NFS 挂载的所有读取难道不应该都是 NFS READ 吗?我不应该期望 rMB_svr/s 大于或等于 rMB_nor/s 吗?
答案1
如果文件系统缓存中有数据,则“read”系统调用将获取数据,但不会向 NFS 服务器发送任何读取请求。当应用程序多次读取相同的块或用户多次打开相同的文件时,可能会发生这种情况。您可以刷新文件系统缓存并再次查看 iostat 的结果:
# echo 3 > /proc/sys/vm/drop_caches