麒麟server v10系统(内核4.19)执行ls -l
遍历目录文件所花的时间比SUSE系统更长, suse的发行版是SUSE Linux Enterprise Server 12 SP5(内核版本4.12.14-120-default)。
在nfs server端(suse)的测试目录下创建足够多的文件:
counter=100000
path=/tmp/test
rm -rf ${path}
mkdir -p ${path}
cd ${path}
i=0
while true
do
echo 1234567890 > file${i} # 不要用touch创建文件,因为更慢
((i++))
echo ${i}
if [ ${i} -eq ${counter} ]
then
break
fi
done
nfs server端的配置文件/etc/exports
如下:
/tmp *(rw,sync,no_all_squash,no_root_squash,no_subtree_check)
nfs client端挂载:
mount -t nfs -o lookupcache=none,proto=tcp,rsize=262144,wsize=262144,soft,timeo=180,retrans=300 192.168.122.7:/tmp /mnt
mount | grep nfs
# SUSE Linux Enterprise Server 12 SP5 上的输出
# 192.168.122.7:/tmp on /mnt type nfs4 (rw,relatime,vers=4.0,rsize=262144,wsize=262144,namlen=255,soft,proto=tcp,timeo=180,retrans=300,sec=sys,clientaddr=192.168.122.251,lookupcache=none,local_lock=none,addr=192.168.122.7)
# 麒麟server v10系统(内核4.19)上的输出
# 192.168.122.7:/tmp on /mnt type nfs4 (rw,relatime,vers=4.2,rsize=262144,wsize=262144,namlen=255,soft,proto=tcp,timeo=180,retrans=300,sec=sys,clientaddr=192.168.122.73,lookupcache=none,local_lock=none,addr=192.168.122.7)
在虚拟机环境中复现不出来。
nfs client测试命令:
echo 3 > /proc/sys/vm/drop_caches
counter=3
for ((i=1;i<=${counter};i++))
do
echo $i
time ls -l /mnt/test/ > /dev/null &
sleep 1
done
suse 4.12内核测试结果如下:
real 0m45.698s # 执行一次
# 连续执行3次
real 1m11.736s
real 1m15.464s
real 1m17.997s
suse内核替换为麒麟的4.19,测试结果如下:
real 0m50.777s # 执行一次
# 连续执行3次
real 1m10.020s
real 1m13.480s
real 1m15.569s
suse内核替换为主线,测试结果如下:
real 0m20.973s # 执行一次
# 连续执行3次
real 0m24.753s
real 0m24.534s
real 0m24.502s
在虚拟机中SUSE Linux Enterprise Server 12 SP5 的4.12内核替换为4.19内核(使用suse的内核config),测试时间一样。
但在某些物理机环境上还是有问题,需要进一步定位。