请注意,NFS客户机和服务器的选项并不一定完全相同,而且有的时候会有冲突。比如说服务器以只读的方式导出,客户端却以可写的方式mount,虽然可以成功mount上,但尝试写入的时候就会发生错误。一般服务器和客户端配置冲突的时候,会以服务器的配置为准。
NFS性能优化和测试
1.同步或异步写入
了解了NFS配置的各种选项以后,再来看看各选项对性能及安全性的影响。Server端同步写入(sync)能提供较好的稳定性,但会减慢磁盘的速度。在高负载的服务器上,应用程序会经常花费大量的时间等待写入完成。异步写入(async)是服务器不把数据立即写入磁盘,而先将其保存到内核内存(缓冲区)中,计划在后边的某个时刻写入,迅速向客户机返回写入成功的信息。这种方法大大地提高了性能,但却牺牲了可靠性,如果系统在将缓冲区中的内容写入磁盘之前崩溃,则数据会永远丢失。
NFS客户端也可以采用异步写入的方式,在客户端缓存用户进程写入的数据,Linux的缺省方式如此。这种方法使得客户机的速度更快,当客户机崩溃时只丢失该客户端的数据。显而易见,客户端异步写入的风险比服务端异步写入的风险要小。鉴于Linux是个相当稳定的系统,为了得到比较好的NFS性能,值得采用客户端异步写入的办法。
2.选择TCP还是UDP
早期,Sun公司曾将NFS v2设计成为只使用UDP协议,主要原因是当时机器的内存、网络速度和CPU的影响,不得不选择对机器负担较轻的方式。而到了NFS v3, Sun公司选择了TCP协议作为缺省的传输方式。在Linux上,UDP协议是缺省使用的协议。作为服务器而言,别无选择。但作为客户端,可以使用TCP协议和其它使用TCP的Unix NFS服务器互连。
3.NFS性能测试
通常使用测试硬盘读写速度的方法来测试NFS的读写速度,但要注意以下几点:
◆ 保证主机和网络工作正常,集线器、交换机、路由器等网络设备工作正常;
◆ 分别在网络安静、普通和繁忙的时候进行测试,真实地了解实际状况和理想状况,以及最坏的状况;
◆ 没有必要为提高少许的性能而花费更多的精力。
基本测试可以用ping工具来检查网络状况,分别从服务器ping客户机,以及从客户机ping服务器。如果没有非对称路由的问题,这两种方法的结果应该相近。如果丢包率小于5%,就会造成NFS的性能不良。
测试程序用下面命令就可以完成:
time dd if=/dev/zero of=nfs.dat bs=4k count=4098
这个命令意思是在nfs.dat文件里写4098个4KB的块,也就是一个16MB的文件,也可以根据需要改变命令的参数, 但要注意每次实验时使用不同的文件名,否则又会和缓冲有关。
可能返回的结果如下:
4098+0 records in4098+0 records outreal 0m23.984s user 0m0.260ssys
0m4.080s
这里主要关心的是real的时间,上面的实验结果表明在NFS上写一个16MB的文件花了23.984秒,在改变导出选项和mount选项以后重复这个实验,就能初步确定各个选项对性能的影响。