日期:2014-05-16  浏览次数:20686 次

NFS疑难杂证
路由:千兆
机器酌置:硬盘7200转,其它配置也都还可以。

测试1:连续读取单个大文件(>1G)时(十几部电影),网络带宽能占到60%(平均)。
测试2:连续读取多个小文件(1MB< ,>10KB)时(散碎文件10万个左右),网络带宽只能占到1.5%(平均)。

注:系统的所有设置项都是默认值。
注:mount的TCP,UDP都试过了。

问题:NFS对大量小文件读取的效率这么差吗?还是的参数或系统设置需要调整一下?



------解决方案--------------------
不是NFS对大量小文件读取效率差,是目前整个IO体系都效率差....要尽可能避免多次IO

在windows里,往U盘copy数据,你试试看copy套图到U盘,然后再试试看把套图打包成rar再copy到U盘,就知道效果了...




------解决方案--------------------
将小文件打包一般是通用手段
------解决方案--------------------
那剩下提高IO性能的方法,估计你更没法用了,比如将NFS建在Raid0上,或是将NFS建立在独立的存储上,例如磁盘阵列柜,磁盘IO性能的提高是很大的难题...这是硬伤。


那姑且先修改下内核参数试试看吧,不保证能提升多少

vi /etc/sysctl.conf
添加:
vm.dirty_writeback_centisecs = 3000
vm.dirty_ratio = 40
vm.dirty_background_ratio = 15

保存退出后 执行 sysctl -p
------解决方案--------------------
那么带宽使用效率恐怕没法上升了,因为目前这个速度,已经是你硬件能提供IO效率的上限了

还不明白么? 你的瓶颈在磁盘IO上。

如果想在当前的硬件基础上继续缓解实时的IO问题,只能尝试使用ramdisk了
1. NFS写数据到ramdisk
2. 定期从ramdisk上写数据到物理磁盘
但第2步的速度依然会很慢,因为已经是受你的硬件限制了,而且如果断电,则ramdisk未写入硬盘的数据丢失。