当前位置: 首页 > news >正文

在ubuntu下对NFS做性能测试

安装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/sreal	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/sreal	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下写文件。

相关文章:

在ubuntu下对NFS做性能测试

安装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标致选择设置。 # 如果不设…...

Spring-Cloud-Gateway-Samples,nacos为注册中心,负载均衡

背景:本想找个简单例子看下,无奈版本依赖太过复杂,花了点时间。记录下吧 使用Spring Cloud Gateway作为网关服务,Nacos作为注册中心,实现对子服务的负载均衡访问。简单例子。 一、gateway-main-nacos服务端&#xff…...

StarRocks Awards 2024 年度贡献人物

在过去一年,StarRocks 在 Lakehouse 与 AI 等关键领域取得了显著进步,其卓越的产品功能极大地简化和提升了数据分析的效率,使得"One Data,All Analytics" 的愿景变得更加触手可及。 虽然实现这一目标的道路充满挑战且漫…...

Autoencoder(李宏毅)机器学习 2023 Spring HW8 (Boss Baseline)

1. Autoencoder 简介 Autoencoder是一种用于学习数据高效压缩表示的人工神经网络。它由两个主要部分组成: Encoder 编码器将输入数据映射到一个更小的、低维空间中的压缩表示,这个空间通常称为latent space或bottleneck。 这一过程可以看作是数据压缩,去除冗余信息,仅保留…...

深入探索 ScottPlot.WPF:在 Windows 桌面应用中绘制精美图表的利器

一、ScottPlot.WPF 简介 ScottPlot.WPF 是基于 ScottPlot 绘图库专门为 Windows Presentation Foundation (WPF) 框架量身定制的强大绘图组件。它无缝集成到 WPF 应用程序中,为开发者提供了一种简洁、高效的方式来可视化数据,无论是科学研究中的实验数据展示、金融领域的行情…...

React中的useMemo 和 useEffect 哪个先执行?

在 React 组件的渲染过程中,useMemo 和 useEffect 的执行顺序是不同的。具体来说: useMemo 先执行:useMemo 是在 渲染阶段 执行的,它的作用是缓存计算结果,确保在渲染过程中可以直接使用缓存的值。 useEffect 后执行&…...

错误修改系列---基于RNN模型的心脏病预测(pytorch实现)

前言 前几天发布了pytorch实现,TensorFlow实现为:基于RNN模型的心脏病预测(tensorflow实现),但是一处繁琐地方 一处错误,这篇文章进行修改,修改效果还是好了不少;源文章为:基于RNN模型的心脏病…...

Table-Augmented Generation(TAG):Text2SQL与RAG的升级与超越

当下AI与数据库的融合已成为推动数据管理和分析领域发展的重要力量。传统的数据库查询方式,如结构化查询语言(SQL),要求用户具备专业的数据库知识,这无疑限制了非专业人士对数据的访问和利用。为了打破这一壁垒&#x…...

Stable Diffusion本地部署教程(附安装包)

想使用Stable Diffusion需要的环境有哪些呢? python3.10.11(至少也得3.10.6以上):依赖python环境NVIDIA:GPUgit:从github上下载包(可选,由于我已提供安装包,你可以不用git)Stable Diffusion安装包工具包: NVIDIA:https://developer.nvidia.com/cuda-toolkit-archiv…...

【物联网原理与运用】知识点总结(上)

目录 名词解释汇总 第一章 物联网概述 1.1物联网的基本概念及演进 1.2 物联网的内涵 1.3 物联网的特性——泛在性 1.4 物联网的基本特征与属性(五大功能域) 1.5 物联网的体系结构 1.6 物联网的关键技术 1.7 物联网的应用领域 第二章 感知与识别技术 2.1 …...

JuiceFS 2024:开源与商业并进,迈向 AI 原生时代

即将过去的 2024 年,是 JuiceFS 开源版本推出的第 4 年,企业版的第 8 个年头。回顾过去这一年,JuiceFS 社区版依旧保持着快速成长的势头,GitHub 星标突破 11.1K,各项使用指标增长均超过 100%,其中文件系统总…...

C#,动态规划问题中基于单词搜索树(Trie Tree)的单词断句分词( Word Breaker)算法与源代码

1 分词 分词是自然语言处理的基础,分词准确度直接决定了后面的词性标注、句法分析、词向量以及文本分析的质量。英文语句使用空格将单词进行分隔,除了某些特定词,如how many,New York等外,大部分情况下不需要考虑分词…...

计算机网络(六)应用层

6.1、应用层概述 我们在浏览器的地址中输入某个网站的域名后,就可以访问该网站的内容,这个就是万维网WWW应用,其相关的应用层协议为超文本传送协议HTTP 用户在浏览器地址栏中输入的是“见名知意”的域名,而TCP/IP的网际层使用IP地…...

上海亚商投顾:沪指探底回升微涨 机器人概念股午后爆发

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 市场全天探底回升,沪指盘中跌超1.6%,创业板指一度跌逾3%,午后集体拉升翻红…...

conda相关操作

conda 是一个开源的包管理和环境管理工具,主要用于 Python 和数据科学领域。它可以帮助用户安装、更新、删除和管理软件包,同时支持创建和管理虚拟环境。以下是关于 conda 的所有常见操作: 1. 安装 Conda Conda 通常通过安装 Anaconda 或 Mi…...

使用TCP协议实现智能聊天机器人

实验目的与要求 本实验是程序设计类实验,要求使用原始套接字编程,掌握TCP/IP协议与网络编程Sockets通信模型,并根据教师给定的任务要求,使用TCP协议实现智能聊天机器人。 (1)熟悉标准库socket 的用法。 …...

PHP二维数组去除重复值

Date: 2025.01.07 20:45:01 author: lijianzhan PHP二维数组内根据ID或者名称去除重复值 代码示例如下: // 假设 data数组如下 $data [[id > 1, name > Type A],[id > 2, name > Type B],[id > 1, name > Type A] // 重复项 ];// 去重方法 $dat…...

2025年01月11日Github流行趋势

项目名称:xiaozhi-esp32 项目地址url:https://github.com/78/xiaozhi-esp32项目语言:C历史star数:2433今日star数:321项目维护者:78, MakerM0, whble, nooodles2023, Kevincoooool项目简介:构建…...

备战蓝桥杯 队列和queue详解

目录 队列的概念 队列的静态实现 总代码 stl的queue 队列算法题 1.队列模板题 2.机器翻译 3.海港 双端队列 队列的概念 和栈一样,队列也是一种访问受限的线性表,它只能在表头位置删除,在表尾位置插入,队列是先进先出&…...

IT面试求职系列主题-Jenkins

想成功求职,必要的IT技能一样不能少,先说说Jenkins的必会知识吧。 1) 什么是Jenkins Jenkins 是一个用 Java 编写的开源持续集成工具。它跟踪版本控制系统,并在发生更改时启动和监视构建系统。 2)Maven、Ant和Jenkins有什么区别…...

Vue篇-06

1、路由简介 vue-rooter:是vue的一个插件库,专门用来实现SPA应用 1.1、对SPA应用的理解 1、单页 Web 应用(single page web application,SPA)。 2、整个应用只有一个完整的页面 index.html。 3、点击页面中的导航链…...

mysql binlog 日志分析查找

文章目录 前言一、分析 binlog 内容二、编写脚本结果总结 前言 高效快捷分析 mysql binlog 日志文件。 mysql binlog 文件很大 怎么快速通过关键字查找内容 一、分析 binlog 内容 通过 mysqlbinlog 命令可以看到 binlog 解析之后的大概样子 二、编写脚本 编写脚本 search_…...

ubuntu 配置OpenOCD与RT-RT-thread环境的记录

1.git clone git://git.code.sf.net/p/openocd/code openocd 配置gcc编译环境 2. sudo gedit /etc/apt/source.list #cdrom sudo apt-get install git sudo apt-get install libtool-bin sudo apt-get install pkg-config sudo apt-install libusb-1.0-0-dev sudo apt-get…...

双系统解决开机提示security Policy Violation的方法

最近,Windows系统更新后,发现电脑开机无法进入桌面,显示“Verifiying shim SBAT data failed: security Policy Violation; So mething has gone seriously Wrong: SBAT self-check failed: Security Policy Violation”的英文错误信息。为了…...

附加共享数据库( ATTACH DATABASE)的使用场景

附加共享数据库(使用 ATTACH DATABASE)的功能非常实用,通常会在以下几种场景下需要用到: 1. 跨数据库查询和分析 场景: 你的公司有两个独立的数据库: 一个存储了学生信息 (school.db)一个存储了员工信息 …...

matlab的绘图的标题中(title)添加标量以及格式化输出

有时候我们需要在matlab绘制的图像的标题中添加一些变量,这样在修改某些参数后,标题会跟着一块儿变。可以采用如下的方法: x -10:0.1:10; %x轴的范围 mu 0; %均值 sigma 1; %标准差 y normpdf(x,mu,sigma); %使用normpdf函数生成高斯函数…...

2、第一个GO 程序

引言 接下里我们就用Go Land 工具,开发第一个GO程序。大家也可以用其他的开发工具,例如 Vs Code 1、新建项目 第一个是选择你的程序保存位置 (不要有中文)。 第二个是你的Go的编译器的安装地址。 选择完毕后,就点击 …...

【Linux-多线程】-线程安全单例模式+可重入vs线程安全+死锁等

一、线程安全的单例模式 什么是单例模式 单例模式是一种“经典的,常用的,常考的”设计模式 什么是设计模式 IT行业这么火,涌入的人很多.俗话说林子大了啥鸟都有。大佬和菜鸡们两极分化的越来越严重,为了让菜鸡们不太拖大佬的后…...

00000007_C语言设计模式

C语言设计模式 尽管 C 语言并不直接支持面向对象编程,但通过结构体和函数指针的灵活运用,我们依然可以实现多种经典的设计模式。 1. 工厂模式 1.1 工厂方法的定义与实现 工厂模式通过统一的接口创建对象,客户端无需知道具体的创建逻辑。 代…...

探索数据存储的奥秘:深入理解B树与B+树

key value 类型的数据红黑树(最优二叉树,内存最优),时间复杂度:O(logn),调整方便;一个结点分出两个叉B树一个节点可以分出很多叉数据量相等的条件下:红黑树的层数很高&am…...

网站建设推广怎么做/上海网站建设开发

Lens Distortion 透镜扭曲 本文档主要是对Unity官方手册的个人理解与总结(其实以翻译记录为主:>) 仅作为个人学习使用,不得作为商业用途,欢迎转载,并请注明出处。 文章中涉及到的操作都是基于Unity2018…...

电子商务网站建设与管理感想/技术优化seo

转载于:https://www.cnblogs.com/xiaobiaomei/p/9105282.html...

先申请域名后做网站/西安网站建设公司排名

标准类型字节 类型 字节 byte 1 bool 1 char 1 short 2 long 4 int 4 double 8 long long 8 指针 32位4 64位8 size_t size_type stddef.h中定义 size_t 类型表示C中任何对象所能达到的最大长度,它是无符号整数 在32位中为 unsigned int 64位中位unsignd long si…...

wordpress伪静态linux/今日新闻国际最新消息

中国建筑业在国民经济和社会发展中的作用日益增强,建筑行业发展速度一直在不断加快,为了进一步推动中国建筑业行业的快速平稳发展,完善中国建筑业行业产业链,政府颁布一系列措施推动中国该行业的发展,同时市场发展对建…...

广州宝盈网络科技有限公司网站/成年学校培训班

大家好,我是本公众号的小编每天加班都到很晚,是为了给大家收集最好玩的游戏从做这个号开始到现在已玩过几千款各式各样的游戏现推荐的每一款游戏都是小编亲自试玩过几千款游戏中我们只推荐一百款这一百款游戏无论从玩法、画质都是同类型中最好最优质而且…...

仓山网站建设/互联网舆情监测系统

原作者姓名 汪自军介绍VC中进行office编程的-操作word,可以设置文字的样式,新建表格,这里提供给大家一个类--CWzjWordOffice::CWzjOffice类,用来对WORD进行简单的操作。读者评分 3 评分次数 1 正…...