NFS性能优化/调优

NFS优化分为server端和client端

server:
#mount参数设置noatime
#修改 tcp_slot_table_entries=128



client:
timeo



测试tool:
nmon
nfsstat
nfsiostat
iostat
mountstats

Server端

mount  $i:/home/fxbox/arfiles /mnt/$i \
-o ro,fg,retry=1,retrans=1,intr,timeo=10,nolock,\
nocto,noacl,async,soft,ac,actimeo=600



#shows the list of nfs mounts
nfsstat -m


# 查看所有挂载,包括网络的
cat /proc/mounts


# 查看本机有哪些mount
#exportfs命令
#常用选项
#-a 全部挂载或者全部卸载
#-r 重新挂载
#-u 卸载某一个目录
#-v 显示共享目录
exportfs -arv


# 查看从某台服务器挂载的目录:
showmount -e 172.16.22.247

/etc/fstab 文件包含了如下字段,通过空格或 Tab 分隔:

<file system>    <dir>    <type>    <options>    <dump>    <pass>

  • <file systems> - 要挂载的分区或存储设备.
  • <dir> - <file systems>的挂载位置。
  • <type> - 要挂载设备或是分区的文件系统类型,支持许多种不同的文件系统:ext2,ext3, ext4, reiserfs,xfs, jfs, smbfs,iso9660, vfat, ntfs,swap 及 auto。 设置成auto类型,mount 命令会猜测使用的文件系统类型,对 CDROM 和 DVD 等移动设备是非常有用的。
  • <options> - 挂载时使用的参数,注意有些mount 参数是特定文件系统才有的。一些比较常用的参数有:
    • auto - 在启动时或键入了mount -a 命令时自动挂载。
    • noauto - 只在你的命令下被挂载。
    • exec - 允许执行此分区的二进制文件。
    • noexec - 不允许执行此文件系统上的二进制文件。
    • ro - 以只读模式挂载文件系统。
    • rw - 以读写模式挂载文件系统。
    • user - 允许任意用户挂载此文件系统,若无显示定义,隐含启用noexec, nosuid, nodev 参数。
    • users - 允许所有 users 组中的用户挂载文件系统.
    • nouser - 只能被 root 挂载。
    • owner - 允许设备所有者挂载.
    • sync - I/O 同步进行。
    • async - I/O 异步进行。
    • dev - 解析文件系统上的块特殊设备。
    • nodev - 不解析文件系统上的块特殊设备。
    • suid - 允许 suid 操作和设定 sgid 位。这一参数通常用于一些特殊任务,使一般用户运行程序时临时提升权限。
    • nosuid - 禁止 suid 操作和设定 sgid 位。
    • noatime - 不更新文件系统上 inode 访问记录,可以提升性能(参见 atime 参数)。
    • nodiratime - 不更新文件系统上的目录 inode 访问记录,可以提升性能(参见 atime 参数)。
    • relatime - 实时更新 inode access 记录。只有在记录中的访问时间早于当前访问才会被更新。(与 noatime 相似,但不会打断如 mutt 或其它程序探测文件在上次访问后是否被修改的进程。),可以提升性能(参见 atime 参数)。
    • flush - vfat 的选项,更频繁的刷新数据,复制对话框或进度条在全部数据都写入后才消失。
    • defaults - 使用文件系统的默认挂载参数,例如ext4 的默认参数为:rw,suid, dev, exec, auto, nouser,async.
  • <dump> dump 工具通过它决定何时作备份. dump 会检查其内容,并用数字来决定是否对这个文件系统进行备份。 允许的数字是 0 和 1 。0 表示忽略, 1 则进行备份。大部分的用户是没有安装 dump 的 ,对他们而言 <dump> 应设为 0。
  • <pass> fsck 读取 <pass> 的数值来决定需要检查的文件系统的检查顺序。允许的数字是0, 1, 和2。 根目录应当获得最高的优先权 1, 其它所有需要被检查的设备设置为 2. 0 表示设备不会被 fsck 所检查。

soft :使用软挂载的方式挂载系统,若Client的请求得不到回应,则重新请求并传回错误信息。

noatime :不更新文件的访问时间。传输性能相较于不加noatime参数有明显提升。

timeo=n:客户端重传请求前等待时间。基于TCP的NFS服务(v4 版本默认使用TCP协议进行传输),默认等待重传时间为60s,每次重传超时后timeo时间会持续增加直到最大值600s

retrans=n:客户端返回错误前的重传次数。默认重传次数3次,最大重传次数7000次,retrans与soft参数一起使用时才有效。

【使用建议】timeo、retrans这两个参数选择主要取决于网络性能。对于网络吞吐量小,延时高,抖动高,丢包率大的情况,建议将timeo,retrans两个参数值设置大一些。对于网络吞吐量大,延时低,抖动低,丢包率小的情况,建议将timeo,retrans两个参数值设置小一些。具体设置值因网络状况而定。

客户端clinet

  • NFS 服务器在决定默认的最大读写块大小时考虑到内存占用情况,每个 NFS 内核线程最多只使用 1/4096 的物理内存大小,对于 UDP 来说,由于一个 UDP 包最大才 64KB,因此使用 UDP 协议的 NFS 读写块大小最大不超过 48KB,而 kernel 中则直接限制为 32KB 了;而使用 TCP 协议的 NFS 由于没有这个限制允许更大的读写块大小,但 Linux kernel 还是将其限制为 1MB 了。对于物理内存超过 4GB 的机器才使用最大的 1MB 读写块大小。记录这个大小的文件为/proc/fs/nfsd/max_block_size.
  • noatime在客户端参数里无用

ubuntu nfs 挂载参数

​​​​​​第3章 NFS基本应用 - 骏马金龙 - 博客园

 Using nfsstat and nfsiostat to troubleshoot NFS performance issues on Linux | Enable Sysadmin

Increase Performance and lifespan of SSDs & SD Cards

NFS性能调优--实时监测 - 程序员大本营


5. Optimizing NFS Performance

NFS使用详解之三.NFS传输速度优化 - princessd8251 - 博客园

How to do Linux NFS Performance Tuning and Optimization


NFS优化笔记_Storage团队的博客-CSDN博客_nfs线程数


Linux:带你理解线程概念(CPU密集型 VS I/O密集型)_AngelDg的博客-CSDN博客

A Comparison of NFSv4 rsize and wsize Values

提高IO性能(只需要设置 noatime) - sunss - 博客园

挂载文件系统选项nodiratime、noatime_jc_benben的专栏-CSDN博客_noatime,nodiratime

​​​​​​如何选择IO调度器 - 广漠飘羽 - 博客园

<think>好的,我现在需要回答用户关于NFS服务器通信原理的问题。首先,用户之前问过RPC和NFS的关系,现在可能希望更深入了解NFS服务器的工作机制。我需要确保回答结构清晰,技术准确,同时符合之前的格式要求,比如使用中文、正确使用LaTeX等。 首先,我应该回顾NFS的基本概念,然后分层次讲解通信原理。用户可能想了解NFS服务器如何处理客户端的请求,涉及哪些协议和组件。需要提到RPC的作用,因为之前的问题已经关联过RPC和NFS的关系,这里需要进一步展开。 接下来,我需要拆解NFS服务器的通信过程,可能包括架构分层、协议交互、数据编码、连接管理、安全机制等方面。每个部分需要简明扼要,避免过于技术化,但又要足够详细,确保用户理解关键点。 例如,在架构分层方面,NFS服务器工作在应用层,依赖RPC和XDR,这里需要说明各层的职责。协议交互部分可以举一些具体的RPC过程,比如MOUNT协议和NFS操作,用例子说明客户端如何挂载和读写文件。 数据编码部分,XDR的作用是标准化数据传输,需要解释其重要性。连接管理方面,NFSv3和v4的区别,比如无状态和有状态,以及TCP和UDP的使用场景。 安全机制可能涉及身份验证和加密,比如RPCSEC_GSS和Kerberos的应用。性能优化部分可以提到缓存和传输参数整,这对用户实际部署可能有帮助。 需要确保使用正确的LaTeX格式,所有技术术语如RPC、XDR、NFSv4等用斜体或代码块,数学表达式用$...$。避免使用Markdown,保持自然的中文表达,结构清晰,分点说明。 最后,检查是否有遗漏的关键点,比如NFS的版本演进对通信的影响,或者实际应用中的配置示例,这能帮助用户更好地理解理论内容。确保回答符合用户的需求,既全面又不冗长。</think>NFS(网络文件系统)服务器的通信原理通过分层协议栈实现远程文件访问,其核心机制可分为以下技术层面: **1. 架构分层** $$ \begin{array}{|c|c|} \hline \text{应用层} & \text{NFS协议 (文件操作语义)} \\ \hline \text{表示层} & \text{XDR (外部数据表示)} \\ \hline \text{会话层} & \text{RPC (远程过程用)} \\ \hline \text{传输层} & \text{TCP/UDP} \\ \hline \end{array} $$ **2. 协议交互流程** - **MOUNT协议阶段**: 1. 客户端通过RPC用`MOUNTPROC_MNT`获取文件句柄 2. 服务端验证导出路径权限(参考`/etc/exports`配置) 3. 返回包含文件系统标识符的句柄,如:$handle = (fsid=0x3A5B, inode=12876)$ - **NFS操作阶段**: ```python # 典型READ操作RPC用序列 def nfs_read(handle, offset, count): # 1. 客户端构造XDR格式请求包 xdr_request = encode_fh(handle) + offset.to_bytes(8) + count.to_bytes(4) # 2. 通过RPC发送到服务端的nfsd线程 rpc_header = RPC(program=100003, version=3, procedure=6) # NFSv3 READ udp_packet = IP(dst=server_ip)/UDP()/rpc_header/xdr_request # 3. 服务端处理流程 if verify_export(handle.fsid): data = vfs_read(handle.inode, offset, count) xdr_response = encode_readres(data) return RPC_REPLY/xdr_response ``` **3. 数据编码规范** - 使用XDR实现跨平台数据标准化: - 整数采用大端字节序 - 字符串固定4字节长度前缀,如:"file"编码为$\x00\x00\x00\x04\x66\x69\x6C\x65$ - 文件句柄为不透明数据结构(通常包含fsid+inode) **4. 连接管理机制** - **无状态设计(NFSv3)**: - 每个RPC请求包含完整上下文 - 服务端不保存客户端状态信息 - 故障恢复通过客户端重试实现 - **有状态设计(NFSv4+)**: ```mermaid sequenceDiagram 客户端->>服务端: OPEN RPC (包含clientid) 服务端-->>客户端: stateid=0x89AB 客户端->>服务端: READ RPC (stateid=0x89AB) 服务端-->>客户端: 文件数据 + 新stateid ``` **5. 安全通信模型** - **AUTH_SYS**:基于UID/GID的简单认证 - **RPCSEC_GSS**: - 支持Kerberos 5认证 - 加密流程: $$ \begin{cases} \text{客户端} \rightarrow \text{服务端}: & \text{KRB5_AP_REQ (包含会话密钥)} \\ \text{数据加密}: & AES-256-CTR(key=K_session, data=payload) \end{cases} $$ **6. 性能优化技术** - **服务端线程模型**: ```bash # 查看nfsd线程数 $ ps -eLf | grep nfsd | wc -l # 整线程池大小 $ echo 64 > /proc/fs/nfsd/threads ``` - **传输协议选择**: - UDP:适用于低延迟局域网(默认包大小8192字节) - TCP:广域网环境提供可靠传输(支持Jumbo Frame) **实时诊断示例**: ```bash # 捕获NFS通信数据包 $ tcpdump -i eth0 'port 2049' -w nfs.pcap # 使用nfsstat查看通信状态 $ nfsstat -o net -c # 客户端统计 $ nfsstat -o net -s # 服务端统计 # 解析RPC用 $ rpcdebug -m nfsd -s all # 开启NFS试日志 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值