在ubuntu下对NFS做性能测试

news2025/1/13 9:58:44

安装NFS

首先,安装服务

sudo apt update
sudo apt install nfs-kernel-server

然后创建共享文件夹

# 请自定义你自己的共享目录
sudo mkdir -p /exports/nfs4/homes
sudo chmod -R 777 /exports/nfs4/homes

# 这个可以根据no_root_squash标致选择设置。
# 如果不设置,创建的文件会变成nobody:nogroup属性
sudo chown nobody:nogroup /exports/nfs4/homes

编辑/etc/exports

新增如下内容

/exports/nfs4/homes 192.168.1.0/24(rw,sync,no_root_squash,no_subtree_check)
  • /exports/nfs4/homes是共享目录的路径。
  • 192.168.1.0/24是允许访问共享目录的客户端IP地址范围,这里表示允许192.168.1.0到192.168.1.255这个子网内的客户端访问。你可以根据实际情况指定特定的IP地址或更宽泛的网络范围。 如果不限制,则可以填*
  • rw表示读写权限。
  • sync表示同步写入磁盘(默认)。 相反的是async异步写入,提高性能但可能丢失数据。
  • no_root_squash表示不过滤掉远程连接的root用户,允许root用户具有与本地root用户相同的权限。如果不设置这个选项,远程root用户在访问共享目录时会被映射为匿名用户,权限会受到限制。 对应的其他选项有:root_squash:将客户端的root用户映射为匿名用户(默认),all_squash:将所有客户端用户映射为匿名用户
  • no_subtree_check可以提高性能,当共享目录是文件系统中的一个子目录时,这个选项可以避免NFS服务器对整个文件系统的检查。 对应的其他选项有:subtree_check:启用子树检查,确保父目录权限正确(可能影响性能)

其他可配置参数

  • anonuid 和 anongid 指定匿名用户的UID和GID(通常与 all_squash 一起使用)
  • secure 限制客户端使用小于1024的端口(默认)。对应的其他选项有:insecure:允许客户端使用大于1024的端口
  • wdelay 延迟写入,合并多个写入请求以提高性能(默认) 对应的其他选项有:no_wdelay 禁用写入延迟(与 sync 一起使用时生效)。
  • hide 隐藏嵌套的挂载点(默认) 对应的其他选项有:no_hide 显示嵌套的挂载点
  • crossmnt 允许客户端跨挂载点访问其他文件系统。 对应的其他选项有: no_crossmnt 禁止客户端跨挂载点访问其他文件系统(默认)
  • secure_locks 要求客户端使用特权端口锁定文件(默认) 对应的其他选项有:insecure_locks 允许非特权客户端锁定文件

配置完成后,执行下面命令,使之生效

sudo exportfs -ra

如果对应的文件夹没有创建,该命令会报错。

启动NFS服务

sudo systemctl start nfs-kernel-server
sudo systemctl enable nfs-kernel-server

查看安装的版本

查看安装的nfs-server的版本

nfsstat --version
nfsstat: 2.6.1

查看该server支持的nfs协议版本

cat /proc/fs/nfsd/versions
+3 +4 +4.1 +4.2

所有+后面的版本都是支持的协议版本号


客户端挂载

sudo apt install nfs-common
sudo mount -t nfs -o vers=4.2,rw,rsize=65536,wsize=65536,hard,intr,timeo=600,retrans=5 192.168.1.100:/shared /mnt
  • vers=4.2:使用NFSv4.2协议。 这里的版本必须是服务器支持的版本才行。

  • rw:挂载为读写模式。 ro 只读

  • rsize=65536 和 wsize=65536:设置读写数据块大小为64KB。单位:字节

  • hard:设置硬挂载模式,超时后无限重试(默认)。soft 设置软挂载模式,超时后返回错误

  • intr:允许中断挂载操作。(通常与 hard 一起使用)

  • timeo=600:设置NFS请求的超时时间(单位:十分之一秒)

  • retrans=5:设置重试次数为5次。(默认是3次)

其他可配置选项

  • noatime 不更新文件夹时间戳。如果不需要每次访问文件时更新访问时间戳,可以在挂载时添加noatime选项,以提升性能。
  • proto 指定传输协议(如 tcp 或 udp)
  • port 指定NFS服务器的端口号(默认是2049)
  • mountport 指定mountd服务的端口号
  • noac 禁用客户端缓存,确保数据一致性(性能较差)
  • actimeo 设置文件和目录属性的缓存时间(单位:秒)
  • lookupcache 设置目录查找缓存模式(all 或 none)
  • sec 设置安全模式(如 sys、krb5、krb5i、krb5p)
  • nolock 禁用文件锁定(适用于旧版NFS或不支持锁定的场景)
  • local_lock 设置本地锁定模式(如 none、flock、posix)
  • bg 后台挂载,如果挂载失败,客户端会在后台重试。 fg 前台挂载,如果挂载失败,客户端会立即返回错误(默认)
  • namlen 指定客户端和服务器之间传输的文件名最大长度。它的作用是限制文件名的最大字节数,以确保客户端和服务器之间的兼容性

查看当前挂载参数

mount | grep nfs
192.168.32.101:/ on /mnt/101_mount type nfs4 (rw,relatime,vers=4.0,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.33.159,local_lock=none,addr=192.168.32.101)

或者

cat /proc/mounts | grep nfs
192.168.32.101:/ /mnt/101_mount nfs4 rw,relatime,vers=4.0,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.33.159,local_lock=none,addr=192.168.32.101 0 0


本地磁盘测速

要在NFS服务器上测试一下本地磁盘的读写速度,它是决定NFS性能的一个瓶颈指标

echo 3 > /proc/sys/vm/drop_caches
time dd if=/dev/zero of=local_testfile.bin bs=1M count=10000 conv=fsync
  • echo 3 > /proc/sys/vm/drop_caches:清除文件系统缓存,确保测试结果准确。
  • if=/dev/zero:输入文件为/dev/zero,即生成零字节流。
  • of=local_testfile.bin:输出文件为local_testfile.bin。
  • bs=1M:块大小为1MB。
  • count=10000:生成10000个1MB的块,即10GB的数据。
  • conv=fsync:在写入完成后,强制同步写入磁盘,确保数据完全写入。

我一台机器的磁盘速度不高,只有30.8 MB/s

10000+0 records in
10000+0 records out
10485760000 bytes (10 GB, 9.8 GiB) copied, 339.928 s, 30.8 MB/s

real	5m40.008s
user	0m0.029s
sys	0m10.751s

另外一台机器的磁盘速度也一般,只有112 MB/s

10000+0 records in
10000+0 records out
10485760000 bytes (10 GB, 9.8 GiB) copied, 93.6185 s, 112 MB/s

real	1m33.621s
user	0m0.009s
sys	0m7.958s


网络测速

我测试的两台机器在同一个机房,在LAN下,理论上应该是比较快的,使用iperf工具来测速。

在服务器上执行

# 默认端口是5201,我机器上占用了,所以改了端口。一般可以不用添加这个参数
iperf -s -p 5202

在客服端上执行

iperf -c 192.168.32.101 -p 5202

以下是测试结果截图, 速度是826M/s,网络带宽还是可以的。
在这里插入图片描述
在这里插入图片描述


NFS性能测试

安装parallel工具,批量往挂在盘里写文件

seq 1 1000 | parallel -j 200 dd if=/dev/zero of=/mnt/159_mount/abcd/2025/Jan/10/a200_{}.bin bs=100k count=1

使用watch来实时监控nfs状态

# server
watch -d -n 1 nfsstat -s
# client
watch -d -n 1 nfsstat -c

在这里插入图片描述
在这里插入图片描述

模拟测试在单文件夹下大量小文件时写NFS

使用fio工具来模拟生成大批量本地文件

sudo apt update
sudo apt install fio
fio --name=filegen --directory=/mnt/nfs --numjobs=10 --nrfiles=100000 --size=1M --rw=write --bs=1M --direct=1
  • –numjobs=10:启动 10 个并发任务。

  • –nrfiles=100000:生成 10 万个文件。

  • –size=1M:每个文件大小为 1MB。

  • –rw=write:测试写入性能。

  • –bs=1M:块大小为 1MB。

  • –direct=1:使用直接 I/O,绕过缓存。

生成完毕后,再通过dd来往nfs下写文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2275921.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Open FPV VTX开源之默认MAVLink设置

Open FPV VTX开源之默认MAVLink设置 1. 源由2. 准备3. 连接4. 安装5. 配置6. 测试6.1 启动wfb-ng服务6.2 启动wfb-ng监测6.3 启动QGroundControl6.4 观察测试结果 7. 总结8. 参考资料9. 补充9.1 telemetry_tx异常9.2 DEBUG串口部分乱码9.3 PixelPilot软件问题 1. 源由 飞控图传…

26个开源Agent开发框架调研总结(2)

根据Markets & Markets的预测,到2030年,AI Agent的市场规模将从2024年的50亿美元激增至470亿美元,年均复合增长率为44.8%。 Gartner预计到2028年,至少15%的日常工作决策将由AI Agent自主完成,AI Agent在企业应用中…

mark 一下conductor github

Netflix 关闭conductor 后,后续https://orkes.io/content/ 继续在维护,github地址如下 https://github.com/conductor-oss/conductor 最新release为3.21.11

PyCharm文档管理

背景:使用PyCharmgit做文档管理 需求:需要PyCharm自动识别docx/xslx/vsdx等文件类型,并在PyCharm内点击文档时唤起系统内关联应用(如word、excel、visio) 设置步骤: 1、file -》 settings -》file types 2、在Files opened i…

嘉立创画原理图和PCB

一、环境 进入立创EDA官网 注册登录的环节就不介绍了。 登录账号后,选择专业版 二、原理图 工程中,有原理图和PCB,这里选择原理图 那么接下来就是进行绘制 元器件在如下区域搜索使用。 双击进行放置,也可以左键提前预览。 网…

科创驱动 | 华望系统科技荣膺西湖区年度前沿创新新锐企业

2025年1月3日,由中共西湖区党委、西湖区人民政府主办的“新年第一会”—西湖区科技创新大会在杭州隆重举行。大会现场揭晓了西湖区年度科技创新团队与项目,并发布了“2024西湖区科技十大事件”与“西湖区五大年度科技榜单”。杭州华望系统科技有限公司榜…

Monorepo设置:新手指南

Monorepo是一种项目代码管理方法,指在单个代码仓库中管理多个项目,有助于简化代码共享、版本控制、构建和部署的复杂性,并提供更好的可重用性和协作性。 简单理解:所有项目都在一个代码仓库中 📦,但这并不意…

[Python学习日记-75] 计算机基础与网络

[Python学习日记-75] 计算机基础与网络 简介 计算机基础 什么是网络编程 计算机网络 简介 本篇主要介绍的计算机基础是浓缩的,这是因为我们主要学习的是 Python,而 Python 主要是为了开发应用程序的,并不会用它来开发操作系统和嵌入式程序…

1. Doris分布式环境搭建

一. 环境准备 本次测试集群采用3台机器hadoop1、hadoop2、hadoop3, Frontend和Backend部署在同一台机器上,Frontend部署3台组成高可用,Backend部署3个节点,组成3副本存储。 主机IP操作系统FrontendBackendhadoop1192.168.47.128Centos7Foll…

【Java】-- 利用 jar 命令将配置文件添加到 jar 中

目录 1、准备 2、目标 3、步骤 3.1、安装 jdk 3.2、添加配置文件 3.3、校验 1、准备 java 环境hadoop-core-1.2.1.jar 和 core-site.xml 2、目标 将 core-site.xml 添加到 hadoop-core-1.2.1.jar 中。 3、步骤 3.1、安装 jdk 3.2、添加配置文件 jar -cvf hadoop-core-…

day14-Linux系统基础权限知识精讲

1. 给文件加特殊属性 1.1 chattr a:只能追加内容,不能删除 i:不能修改,不能删除;保护关键文件,防止非法写入 [rootoldboy ~]# chattr a test.txt [rootoldboy ~]# chattr i test.txt [rootoldboy ~]# echo 123 >> test.txt -bash: t…

Android使用系统消息与定时器实现霓虹灯效果

演示效果: 界面设计: 在帧布局FrameLayout中添加6个TextView 依次设置这6个TextView的宽,高,权重 也可在XML中直接设置 添加自定义颜色 关联自定义颜色到数组变量 关联6个TextView控件到数组变量 处理自定义系统消息 Handler _sysHandler new Han…

数据结构大作业——家谱管理系统(超详细!完整代码!)

目录 设计思路: 一、项目背景 二、功能分析 查询功能流程图: 管理功能流程图: 三、设计 四、实现 代码实现: 头文件 结构体 函数声明及定义 创建家谱树头结点 绘制家谱树(打印) 建立右兄弟…

vue3+elementPlus之后台管理系统(从0到1)(day1)

vue3官方文档:https://cn.vuejs.org/guide/introduction.html 1、项目创建 确保电脑已安装node 查看命令: node -v进入项目目录,创建项目 npm init vuelatest Need to install the following packages: create-vue3.13.0 Ok to procee…

汉图科技XP356DNL高速激光打印一体机综合性能测评

汉图科技XP356DNL高速激光打印一体机效率方面表现出色,支持A4纸型的高速打印,单面打印速度高达35页/分钟,自动双面打印速度可达32面/分钟,这样的速度在日常办公中能够极大地提高打印效率,减少等待时间,满足…

【芯片封测学习专栏 -- 什么是 Chiplet 技术】

请阅读【嵌入式开发学习必备专栏 Cache | MMU | AMBA BUS | CoreSight | Trace32 | CoreLink | ARM GCC | CSH】 文章目录 OverviewChiplet 背景UCIeChiplet 的挑战 Overview Chiplet 又称为小芯片。该技术通过将大型SoC划分为更小的芯片,使得每个部分都能采用不同…

1.CSS的复合选择器

1.1 什么是复合选择器 在CSS中,可以根据选择器的类型把选择器分为基础选择器和复合选择器,复合选择器是建立在基础选择器之上,对基础选择器进行组合形成的。 复合选择器可以更精准、更高效的选择目标元素(标签) 复…

【MySQL】SQL菜鸟教程(一)

1.常见命令 1.1 总览 命令作用SELECT从数据库中提取数据UPDATE更新数据库中的数据DELETE从数据库中删除数据INSERT INTO向数据库中插入新数据CREATE DATABASE创建新数据库ALTER DATABASE修改数据库CREATE TABLE创建新表ALTER TABLE变更数据表DROP TABLE删除表CREATE INDEX创建…

docker 自建rustdesk服务器测试

参考https://blog.csdn.net/tootsy_you/article/details/130010564 注意: docker-compose.yml version: 3networks:rustdesk-net:external: falseservices:hbbs:container_name: hbbsports:- 21115:21115- 21116:21116- 21116:21116/udp- 21118:21118image: rust…

检验统计量与p值笔记

一、背景 以雨量数据为例,当获得一个站点一年的日雨量数据后,我们需要估计该站点的雨量的概率分布情况,因此我们利用有参估计的方式如极大似然法估计得到了假定该随机变量服从某一分布的参数,从而得到该站点的概率密度函数&#x…