使用基于NFS协议存储系统的同学经常遇到的问题是在小文件比较多的情况下性能会比较差。小文件访问性能差本身是可以理解的,但是NFS确实是太差了。不知大家是否深层次分析过,为什么NFS访问小文件性能会这么差?
NFS文件系统与本地文件系统的差异在于多了一个网络传输的过程。因此,我们从网络传输方面下手,看看能不能获取一些线索。为了能够捕获协议的数据,我们向共享目录写入一个文件(本例为tgt.c,可以根据情况改变文件名称),具体命令如下所示。
dd if=tgt.c of=/mnt/test/sub1/sub2/sub3/sub4/sub5/test bs=1024 count=2
如下图是通过Wireshark抓取的网络通信的数据包,可以看出,NFS在访问文件的时候客户端与服务端有的交互除了WRITE之外,还有很多其它的交互,包括ACCESS、LOOKUP和SETATTR等。并且可以看出,这些请求的数量跟目录的深度是有关系,每一级目录都会进行LOOKUP和ACCESS操作,这就是NFS在访问小文件的时候性能差的一个主要原因。
我们具体分析一下这个过程,稍微简化一下,如图所示。可