测试nfs服务器的速度
本文测试nfs服务器的速度,并做一些必要的优化。
nfs客户端与服务器的交互过程
nfs客户端与服务器的交互过程如下:
graph TB subgraph nfs服务器与客户端交互 客户端-->服务器 服务器-->客户端 end
其实很简单,就是用nfs协议互相传数据而已。
nfs速度测试
nfs本质上就将远程的磁盘映射到本地,让本地使用远程磁盘像在本地使用一样。
那测试速度,我们先测试系统在本地,将1G的数据写入磁盘的速度如何,你只需要执行如下命令就可以了。
$ time dd if=/dev/zero of=/root/nfs/a bs=8k count=102400
执行结果:
102400+0 records in 102400+0 records out 838860800 bytes (839 MB) copied, 0.650468 s, 1.3 GB/s real 0m0.652s user 0m0.033s sys 0m0.613s
这里写了839M数据,写速度为1.3GB/s,注意是大写的GB,数据还是非常快的,达到每秒1.3GB。
远程服务器测试速度
我们在客户端挂载nfs,然后测试一下速度,肯定会比直接写本地磁盘要慢很多。
我们在一台主机上挂载了nfs提供的目录,两台实验机器在同一个内网中,目录挂载在/root/nfs-client目录中,执行上面同样的命令,就能测试出写速度了。
time dd if=/dev/zero of=/root/nfs-client/b bs=8k count=102400 102400+0 records in 102400+0 records out 838860800 bytes (839 MB) copied, 8.12278 s, 103 MB/s real 0m8.124s user 0m0.043s sys 0m0.586s
我们发现速度只有103MB/s,说实话,速度不够理想,比起本地磁盘存储来说,慢了7倍。
当然我们可以做一些优化,例如先写内存,再写磁盘,这样可能会快一些。我们来试一下。
更改nfs服务器的写入规则
在nfs服务器上,编辑/etc/exports文件,如下:
more /etc/exports /root/nfs 192.168.1.0/24(rw,sync,no_root_squash)
将同步写入内存和磁盘(sync),改为先写入内存,后写入磁盘(async),我们看一下这样,会不会快一点点呢?
/root/nfs 192.168.1.0/24(rw,async,no_root_squash)
重启nfs服务器:
exportfs -rv # 先启动rpcbind,再启动nfs systemctl restart rpcbind systemctl restart nfs
重启后,客户端并不需要重新做任何配置,nfs照样使用。
重新做一次速度测试
执行命令:
time dd if=/dev/zero of=/root/nfs-client/d bs=8k count=102400 102400+0 records in 102400+0 records out 838860800 bytes (839 MB) copied, 7.35084 s, 114 MB/s real 0m7.354s user 0m0.047s sys 0m0.610s
很遗憾,我们发现,现在速度变为114MB/s,比前面的103MB/s快了11MB/s,是快了一点点,但是也没快多少。是不是很遗憾呢?不过没关系,大多数情况下,这个速度其实是ok的。