为NFS加油提速

2024-03-24 10:32
文章标签 nfs 加油 提速

本文主要是介绍为NFS加油提速,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

网络文件系统( Network File System,简称NFS)是Linux上最常见的网络服务之一。NFS服务器可以让计算机通过网络将远端的共享文件挂载到本机的系统中,就像是在使用本地文件一样。如何优化NFS的性能成为被广泛关注的问题,下面介绍一些常用方法。


选择高性能的I/O设备
 
    随着计算机技术的发展,以硬盘为首的I/O设备对计算机的整体性能影响越来越大。无论是通信服务器,还是数据库服务器及数据仓库等,都需要有很好的磁盘I/O吞吐性能,NFS服务器也不例外。
    硬盘数据传输速率分为内部传输率和外部传输率。通常外部传输率也被称为突发数据传输率或接口传输率,即指从硬盘的缓存向外输出数据的速度,而硬盘的内部传输率要小于外部传输率,所以内部传输率的高低是评价一个硬盘整体性能的决定性因素。
    在高性能网络服务器和工作站领域得到广泛应用的SCSI技术已经成为网络服务器的标准接口选择,目前,其内部传输速率可达320Mbps。通常在一个50个用户的NFS网络系统中,使用10个基于RAID5级别的10000rpm的SCSI硬盘可以达到较好的效果。
    网络带宽是NFS性能的另一个瓶颈。通常,应当使用单独的快速百兆以太网连接来发送NFS服务器和客户机之间的报文信息。

优化软件环境
 
    软件方面的性能优化可以从以下几个方面考虑。

清理NFS服务器磁盘碎片

    随着时间的推移,文件系统都会趋向于碎片化,这些碎片将降低NFS的性能。及时整理磁盘碎片,释放磁盘空间可以帮助系统更好地工作。

开启硬盘DMA

    IDE硬盘基本都支持DMA(直接内存读取)功能,但是现有的Linux发行版本中,默认情况下都没打开该功能。可以在/etc/rc.d/rc.local文件中添加如下一行:
    /sbin/hdparm -d1 -x66 -c3 -m16 /dev/had
    这样以后每次开机,硬盘的DMA就会被开启。

尽量选择UDP协议

    对系统而言,UDP是负担较轻的通信传输方式。在局域网中,网络质量相对稳定,应当尽量选择UDP。

优化配置

    为了进一步优化NFS的性能,需要调整一些相关的参数,比如,读写块大小、MTU和服务线程数量等。

调整读写块大小
 
(1)挂载NFS共享目录

    首先在客户机建立挂载目录/home/nfs/cao,然后用以下命令来挂载NFS服务器上的共享目录/home/cao:
    # mkdir -p /home/nfs/cao
    # mount -t nfs 192.168.1.4:/home/cao /home/nfs/cao
    挂载完毕后,使用df命令进行查看,应该可以看到NFS服务器上的/home/cao已被挂载到/home/nfs/cao目录(见图10)。只要进入/home/nfs/cao目录,就等于进入了IP地址为192.168.1.4的NFS 服务器的/home/cao目录中。

(2)测试数据读写时间

    进入/home/nfs/cao目录,使用如下命令测试NFS的写性能:
    #time dd if=/dev/zero of=/home/nfs/cao/nfs.dat bs=16k count=16384
    这个命令的意思是在NFS服务器的nfs.dat文件里写16384个16KB的块,即一个256MB的文件。
    通常该测试文件的大小设定为NFS服务器内存的2倍。正常的输出结果可能如下:

    读入了 16384+0 个块
    输出了 16384+0 个块
    real    4m28.934s
    user    0m0.200s
    sys     0m5.790s

    使用如下命令测试NFS的读性能:
    #time dd if=/home/nfs/cao/nfs.dat of=/dev/null bs=16k count=16384
    执行以上命令,系统会记录客户机读这个256MB文件的时间。正常的输出结果可能如下:

    读入了 66535+0 个块
    输出了 66535+0 个块
    real    4m54.812s
    user    0m0.420s
    sys     0m3.190s

    删除nfs.dat文件,使用如下命令卸载NFS服务器的共享目录:
    #umount -t nfs 192.168.1.4:/home/cao /home/nfs/cao
    然后重复上面的(1)和(2)步骤,记录下测试得到的数据,以计算读写时间的平均值。

(3)修改读写块大小

    NFS V2版本的文件传输尺寸最多只能设定为8KB,缺省情况是4KB(4098字节)。需要进行实际测试得到一个最佳值。
    修改读写块大小前需要卸载NFS的共享目录。rsize和wsize分别代表读写块大小,可以通过修改/etc/fstab文件来设定这两个参数,在/etc/fstab文件中加入如下一行:
    192.168.1.4: :/home/cao  /home/nfs/cao  nfs   rsize=8192,wsize=8192,timeo=10,intr
    重新挂载NFS的/home/cao目录,然后重复(1)和(2)步骤。比较读写块大小修改前后的读写性能,如果没有明显提高,可以再次修/etc/fstab文件,直到得到最佳值。rsize和wsize的值必须是1024的倍数,对于NFS V2版本来说,8192是它们的最大值。

设定合适的MTU

    每个网络都存在约定的MTU(Maximum Transfer Unit,最大传输单元),并且要求所有进入网络的数据报必须适合该MTU。如果一个数据报进入了一个MTU小于该数据报长度的网络,那么处于网络边界上的路由器会把该数据报分解为多个小的数据包,这样会影响NFS的性能。tracepath命令可以用
来跟踪MTU的路径:
    # tracepath 192.168.1.4/2049
    1: [LOCALHOST]     pmtu 1500
    1:  192.168.1.4 (192.168.1.4)  2.824ms reached
    Resume: pmtu 1500 hops 1 back 1
    192.168.1.4是NFS服务器的IP地址,2049是UDP协议的端口号。随后tracepath命令会给出NFS网络中的MTU值。
    然后,使用ifconfig命令查看客户机上用于连接NFS服务器网卡接口的MTU值,如果两者相差很多,可以使用ifconfig命令进行修改:
    #ifconfig eth0 mtu 1500
    对以太网接口来说, MTU的默认设置是1500个字节。

3.增加NFS服务器的线程

    缺省情况下NFS服务器会启动8个nfsd守护线程,可以使用如下命令察看每个线程的使用情况:

    #cat /proc/net/rpc/nfsd
    rc 0 0 2
    fh 0 0 0 0 0
    io 0 0
    th 8 0 22.000 11.000 45.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
    ra 16 0 0 0 0 0 0 0 0 0 0 0
    net 2 2 0 0
    rpc 2 0 0 0 0
    proc2 18 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    proc3 22 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

    在第五行的“th”后的“8”表示有8个线程,再后面的数字代表每秒钟每个线程使用的最大百分比。
    如果紧接着的三个数字比较大,则可能表示现在挂载的客户机数目比较多,需要增加线程数目。
    修改启动文件/etc/rc.d/init.d/nfs可以增加线程数量。首先,停止NFS服务:
    #/etc/rc.d/init.d/nfs stop
    然后,修改/etc/rc.d/init.d/nfs 文件,将“[ -z "$RPCNFSDCOUNT" ] && RPCNFSDCOUNT=8”一行中的8替换为适当的数字。
    重新启动NFS服务:
    #/etc/rc.d/init.d/nfs restart
    此时察看NFS服务器运行的线程数量就会提高到设定的数目。

4.提高可用的Socket缓冲区

    通常情况下,Linux使用的Socket输入队列使用64KB的缓冲区,如果运行8个nfsd守护进程的话,每个守护进程(Daemon)就只有8KB的缓冲区用于存储输入队列的数据。如果再增加线程,情况会更糟。这种情况可以适当增加缓冲区大小至256KB。
    首先停止NFS服务,然后修改/etc/rc.d/init.d/nfs配置文件,在“daemon rpc.nfsd $RPCNFSDCOUNT”一行之前加入如下两行代码:
    #echo 262144 > /proc/sys/net/core/rmem_default
    #echo 262144 > /proc/sys/net/core/rmem_max
    这两行代码的作用是,在nsfd守护进程启动前设定缓冲区大小至256KB。
    在“daemon rpc.nfsd $RPCNFSDCOUNTS”一行之后加入如下两行代码:
    # echo 65536 > /proc/sys/net/core/rmem_default
    # echo 65536 > /proc/sys/net/core/rmem_max
    这两行代码的作用是,在nsfd守护进程关闭后设定缓冲区大小至缺省值。重新启动NFS服务后生效。
 
5.其它参数

    挂载NFS文件系统时可以选择是硬(Hard)挂载,还是软(Soft)挂载。采用硬挂载,NFS客户机会在后台不断地尝试与NFS服务器的连接(一般不会给出任何提示信息),直到挂载上为止;采用软挂载,会在前台尝试与NFS服务器的连接,当收到错误信息后终止挂载尝试,软挂载是默认的连接方式。
    硬挂载的命令如下:
    # mount -t nfs -o hard 192.168.1.4:/home/cao /home/nfs/cao
    相应的软挂载只要把命令中的“hard”参数替换为“soft”即可。
    到底是使用“hard”还是“soft”,主要取决于访问什么信息。假如是察看NFS服务器的视频文件,用户绝对不会希望由于一些意外的情况(比如网速一下变慢)使系统输出大量的错误信息,如果此时用“hard”方式的话,系统就会等待,直到能够重新与NFS 服务器建立连接为止。对于非关键数据,可以使用“soft”方式,比如,使用FTP传输一些数据,这样在远程机器暂时连接不上或关闭时,就不会挂起会话过程,造成客户机的不响应。

http://zfpillar.devebar.net/2008/10/767.html

这篇关于为NFS加油提速的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/841324

相关文章

开发板NFS挂载文件目录

文章目录 序NFS1. 安装 NFS 服务器和客户端在服务器上(NFS 服务器端)在客户端上(NFS 客户端) 2. 配置 NFS 服务器创建共享目录编辑 `/etc/exports` 文件启动 NFS 服务 3. 在客户端挂载 NFS 共享创建挂载点挂载 NFS 共享验证挂载 4. 设置开机自动挂载5. 解决权限问题 序 本节主要实现虚拟机(服务器)与开发板(客户端)通过N

k8s 存储(PV、PVC、SC、本地存储、NFS)

存储持久化相关三个概念: PersistentVolume (PV) 是对具体存储资源的描述,比如NFS、Ceph、GlusterFS等,通过PV可以访问到具体的存储资源;PersistentVolumeClaim (PVC) Pod想要使用具体的存储资源需要对接到PVC,PVC里会定义好Pod希望使用存储的属性,通过PVC再去申请合适的存储资源(PV),匹配到合适的资源后PVC和PV会进行绑定

通义灵码助力高校开学第一课,“包”你满意,新学期加油!

通义灵码作为国内领先的 AI 编码工具,近年来在高校中得到了广泛应用和推广。它不仅帮助大学生更高效地学习编程、提高代码质量,还激发了他们的创新思维,并为未来的职业生涯做好了准备。 通义灵码是什么? 通义灵码是一款基于通义大模型的智能编码助手,可以在你进行编码工作时,为你提供代码实时续写、注释生成代码、单元测试生成、代码优化、注释生成、代码解释、研发智能问答、代码问题修复等辅助编码工作的功能

linux 系统如何进行nfs(第五节)

网上的截图: 自己的操作: 首先是 在虚拟机中的操作。 然后是在开发板上的操作。   已经是没有问题了。 报错: 解决: 需要在 板卡上在安装一个 nfs 的客户端。 可以看到已经可以进行试验了。

Linux入门攻坚——31、rpc概念及nfs和samba

NFS:Network File System     传统意义上,文件系统在内核中实现 RPC:函数调用(远程主机上的函数),Remote Procedure Call protocol     一部分功能由本地程序完成     另一部分功能由远程主机上的 NFS本质上是一种RPC的实现。 本地用户进程要使用文件系统,通过系统调用,由内核完成文件系统的操作,而NFS只不过是系统内核又通过RP

服务器搭建NFS服务,将文挂载到windows

【背景】:本地开发写代码,修改文件后需要经常重复同步,非常麻烦,于是思考搭建一个NFS服务,可以实现在windows上自由操作服务器上的代码,提高开发效率。 1.在Linux服务器上安装并配置NFS 安装NFS服务器: sudo yum updatesudo yum install nfs-utilssystemctl start nfs-server# 开启自启动systemctl

加油吧 骚年QAQ

加油吧 骚年QAQ 本随笔文章,由个人博客(鸟不拉屎)转移至博客园 写于:2017 年 11 月 08 日 原地址:https://niaobulashi.com/archives/fighting.html --- 想早点下班.. 前言 这两个星期下来,基本是每天加班到晚上9点。 可以说过得相当充实了,每天的工作也是面对不同的挑战,查找问题,定位问题,解决问题。还要协调和客户之前的关

【Linux】Ubuntu 安装 NFS 步骤详解

Ubuntu 安装 NFS 步骤详解 1.安装 NFS 服务2.配置 NFS 服务3.启用 NFS 服务4.客户端挂载 NFS 共享目录5.验证挂载是否成功6.持久化挂载(可选)7.其他客户端节点安装 NFS(Network File System)是一种允许不同主机之间通过网络共享文件系统的协议。以下是详细的在 Ubuntu 上安装和配置 NFS 共享目录的方法,并附带示例。

(4)NFS文件系统(共享)

(4)NFS文件系统(共享) 查看当前NFS软件的安装情况: rpm -aq nfs-utils portmap rcpbind  (portmap 为centos5.x     rpcbind 为centos6.x) 没有的话,安装: yum install nfs-utils rpcbind -y yum groupinstall “NFS file server” -y

【QNX+Android虚拟化方案】107 - QNX NFS Server + Android NFS Client 完整配置

【QNX+Android虚拟化方案】107 - QNX NFS Server + Android NFS Client 完整配置 一、QNX 侧 NFS Server 修改:ip 为 192.168.1.21.1 配置拷贝 nfsd、rpcbind 到 /mnt 目录下1.2 配置 exports1.3 为NFS 共享目录挂载镜像1.4 修 startup.sh 开机自启动 nfsd Ser