理解主机端IO路径架构
应用程序层
1. NFS下的缓存机制
- 默认mount参数下的IO
默认条件下使用异步(async)方式,rsize=wsize=65535。内核不会透传程序的IO给NFS Server,对于写IO会延缓执行,积累一定的时间以便合并上层的IO。不管读还是写,async方式都会具有一定的效果,尤其是连续的IO地址。
Linux下使用NFS,对于写操作,不管offset是否为Page或者512B对其,都没有任何写惩罚存在,对于读操作,也只在随机读的情况下出现了读惩罚,其他任何情况下都没有惩罚.
可以使用dd命令测试,dd是一个使用同步调用+buffered IO模式的程序.
dd if=/mnt/3 of=/dev/null bs=1500 count=100
dd为同步调用,到了底层,内核将dd的写IO数据合并,并且以异步的方式高效的发送给NFS服务器.
- 指定同步(sync)参数
需要了解,内核的异步过程,只对Buffered IO模式下的同步写、异步写、异步读有意义.
对于读立即执行,不一定表示不可以进行Prefetch和Cache Hit操作,但是对于写立即执行,却绝对不可以将待写的数据缓存起来延迟处理。 - 指定rsize/wsize参数
rsize/wsize,对于NFS的IO逻辑没有任何影响&