【NAS】客户端NFS⽂件系统的缓存IO机制
NFS的缓存IO机制
<⼀>async参数模式下分析
NFS默认的mount参数为async,async参数表⽰内核不会透传程序的IO请求给ver,对于写IO会延迟执⾏,积累⼀定的时
间以便合并上层的IO请求以提⾼效率。
读分析
1:顺序读请求的合并预读
ddif=/mnt/nfs/3of=/dev/nullbs=1500count=100
测试发现仅仅发送了6个read请求16384+32768*4+2544=150000,并且其中后5个请求是连续发送的。
2:随机读读惩罚
随机读情况下,由于都有预读,所有每次预读都会多读⼀部分数据,导致可能实际使⽤的数据量不到接受到数据的10分
之⼀,称为读惩罚。
写分析
1:追加写
ddif=/dev/zeroof=/mnt/nfs/ddtestbs=1count=100
dd将已经存在的⽂件的size(SETATTR)设置为0,然后从头开始追加写⼊这个⽂件,每次写1B,写100次。但是内核并
没有像NFS服务器发送100次写,实际上指发送了⼀次写。
2:覆盖写
连续覆盖写:内核⾏为和追加写⼀样,内核对写操作进⾏了合并。
随机覆盖⼩:随机模式下,内核⽆法对写进⾏合并,直接完全透传⽤户程序发起的I/O。
<⼆>sync参数模式下的分析
读分析
1:如果mount的时候选⽤sync参数,或者如果上层使⽤sync调⽤,那么其产⽣的读I/O⼀定在内核处也是同步的,因为只
有在前⼀个读请求数据成功返回给客户端程序,客户端程序才会发起下⼀个读请求,(对于异步读调⽤,内核可以在短时间
内接受到多个读请求,此时内核可以将这些读请求合并,这就是异步过程)。但是同步读并不影响nfs的预读,⽐如
ddif=/mnt/nfs/ddtestbs=1count=150,并不是向rver发送150个⼀次1B的请求,⽽是根据rsize进⾏预读,把150B的数据
⼀次性读回来,其他159次就直接命中缓存了。
写分析
1:对于sync同步的写调⽤,程序只有在第⼀个写调⽤结束之后才会发起下⼀个写。
ddif=/dev/zeroof=/mnt/nfs/ddtestbs=1count=1500(1B为单位的写操作),那么就是发送150个write请求,效率⾮
常低下。
注意:DIO模式由于每次都绕过了内核的pagecache,所以每⼀个请求都会向服务端发起请求,不会进⾏预读,异步写,
写合并,读合并等策略。
本文发布于:2023-03-16 00:52:03,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/1678899124270056.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:系统缓存.doc
本文 PDF 下载地址:系统缓存.pdf
留言与评论(共有 0 条评论) |