NFS性能管理指南

  • Post author:
  • Post category:其他


NFS 性能调优


在 NFS 网络中,服务器是调优的主要目标,当然也有一些是可以在客户机上调优的。


需要多少 biod 和 nfsd 守护进程?

因为

biod



nfsd

守护进程一次处理一个请求,并且 NFS 响应时间占了总响应时间的最大一部分,所以如果线程由于缺少

biod



nfsd

守护进程而阻塞是让人无法接受的。


注:
只存在单一的

nfsd

守护进程和单一的

biod

守护进程,它们都是多线程的(多个内核线程在一个进程里)。此外,线程数是动调优的,会按需建立额外的线程。但是,您也可以通过使用

nfso

命令的

nfs_max_threads

参数来手动设置

nfsd

的最大线程数。您还可以利用

biod

命令的 mount 选项来调整每次 mount 时最大的

biod

线程数。

配置 NFS 守护进程一般需要注意的事项如下:

  • 增加守护进程的数量并不能用来弥补客户机或服务器的处理器能力低下、内存不足以及服务器磁盘传输宽带的不足。在改变守护进程数量之前,您应该先用

    iostat



    vmstat

    命令来检查一下服务器和客户机的资源利用级别。
  • 如果 CPU 或 磁盘子系统已经接近于饱和级别,那么增加守护进程的数量并不会带来更好的性能。
  • NFS 守护进程相对来说开销不大。:NONE.

    biod



    nfsd

    守护进程只需要很少的几个内存页(其中有些是固定〔pinned〕的)。当然,没有被固定的(unpinned)页面仅当

    nfsd



    biod

    守护进程最近被激活过时才真正存在于内存中。此外,空闲的

    nfsd



    biod

    守护进程不耗费 CPU 时间。
  • 所有的 NFS 请求都通过

    nfsd

    守护进程;但是只有读写操作才通过

    biod

    守护进程。


选择初始的 nfsd 和 biod 守护进程的数目

决定最佳的

nfsd



biod

守护进程数是反复的过程。指导方针能提供给您的仅仅是一个合理的出发点。

缺省值对于小型系统来说是一个很好的起点,但对于拥有两个以上客户的客户机系统或者拥有两个以上客户机的服务器来说就多半需要增加了。以下是一些指导方针:

  • 在每个客户机上,估计将会发生并发写操作的最大文件数。为每个文件配置至少两个

    biod

    守护进程。如果文件比较大(大于 32KB),为了支持预读(read-ahead)或后写(write-behind)行为,您可能需要为每个文件启动四个

    biod

    守护进程。为一个很大的频繁进行写操作的文件配置五个

    biod

    守护进程也是很普遍的。
  • 在每个服务器上,开始时把

    nfsd

    守护进程数配置成同已经为客户机从服务器处理文件的

    biod

    守护进程一样多的数量。考虑到非读写的 NFS 请求,在原先的基础上再加 20% 的数量。
  • 如果您在一台慢速服务器上连有快速的客户机工作站,那么您必须限制客户机产生 NFS 请求的速率。最佳的解决方案是减少客户机上

    biod

    守护进程的数量,并对每个客户机负载和响应时间的相对重要性给予适当的关注。


nfsd 和 biod 守护进程数的调优

在您获得初始的

biod



nfsd

守护进程数量后,或已经修改了其中的某一个,请照以下说的做:

  • 首先,用

    vmstat



    iostat

    命令重新检查受影响系统的 CPU 或 I/O 饱和度。如果服务器现在就饱和了,您必须减少负载或增加处理器能力,也可以两者都满足。
  • 使用命令

    netstat -s

    来判断是否有系统正在经历 UDP

    套接字缓冲区溢出

    。如果确是那样的话,用命令

    no -a

    去证实一下

    调优其他层来提高 NFS 的性能

    一小节中已经实现了的推荐方法。如果可行,系统没有饱和,就可以增加

    biod



    nfsd

    守护进程的数量。
  • 检查

    nullrecv

    列,给列位于命令

    nfsstat -s

    的输出结果中。如果这个数字开始增长,那便说明

    nfsd

    守护进程的个数太多了。然而,这种情况在我们的操作系统的 NFS 服务器上出现的概率比在其他平台上出现的概率要小得多。原因在于当有一个 NFS 请求进入服务器时,并不是所有的

    nfsd

    守护进程被同时唤醒。而是这样的,第一个

    nfsd

    守护进程被唤醒,如果还有更多的工作要做的话,由它再去唤醒第二个

    nfsd

    守护进程,以此类推。

要修改

nfsd

守护进程的数量,您可以使用

chnfs

命令,或者如前所述设置

nfso nfs_max_threads

参数。

要把在服务器上的

nfsd

守护程序的数量修改为 10,既要立刻生效又要在以后的系统启动时也生效,使用如下命令:

# chnfs -n 10

要把一个系统上的

nfsd

守护进程的数量改为 9,需要直到下一次系统启动才生效,使用如下命令:

# chnfs -I -n 9

要修改每次挂载(mount)的

biod

守护进程数,可使用

biod mount

选项。

增加客户机上的

biod

守护进程数使服务器性能变坏,因为这将允许客户机一次发送更多的请求,而进一步增加网络和服务器的负载。极端情况下,客户机的运行速度远远超过服务器,这时可能需要将客户机的

biod

守护进程数减少到一个,如下:

# stopsrc -s biod

这使得客户机仅仅留下一个

biod

内核进程仍然继续运行。


硬 NFS 挂载(hard NFS mounts)或软 NFS 挂载(soft NFS mounts)的性能推断

当您在配置 NFS 挂载目录时有一个可选项就是:挂载或是硬的(

-o hard

)或是软的(

-o soft

)。在成功的挂载后,当一个对软挂载(soft-mounted)目录的访问出错时(典型的是一个超时),这个错误被立即报告给原先请求远程访问的那个程序。当一个对硬挂载(hard-mounted)目录的访问出错时,NFS 重试原来的操作。

一个持久性错误引起的不断访问硬挂载目录可能会升级成为一种能察觉得到的性能问题,因为缺省的重试次数是 1000 次,缺省的超时值是 0.7 秒,再加上有一个算法使连续的重试间的超时值增加,这一切意味着 NFS 将试图去完成这个操作。

减少重试次数、增加超时值,或者前两者都做到,这在技术上是可能的,只要使用

mount

命令的选项。不幸的是,修改这些值虽然足以去除先前对性能的可察觉的影响,但是有可能会导致不必要的硬件错误报告。作为一种替代,可以使用

intr

选项来 mount 硬挂载目录,这时当有某个进程进入了重试循环则允许用户使用键盘将其中断。

虽然软挂载目录引起的错误可以被更快地探测到,但是它要冒严重的数据毁坏的风险。因此一般来说,读/写目录应该用硬装载。


其他影响性能的 mount 选项

:NONE.

mount

命令提供了一些 NFS 调优的选项,但由于缺乏对它们的了解而经常被忽视或错误地使用。

在您开始调节 mount 选项前,请确认您应该达到对服务器或网络上的包传送(packet delivery)和包转向(packet turnaround)有一定的认识。如果您的目标是降低 NFS 服务器的负载或者是要解决与网络相关的问题,那么您将会使用绝大部分 NFS 所特有的 mount 选项。



mount

命令的

-o

选项可以列出与 NFS 性能相关的所有特定的 mount 选项。:NONE.

-o

选项在命令行中只需用一个逗号与命令分隔,而不是用一个逗号加一个空格分隔。


rsize 和 wsize 选项

最有用的是改变读和写操作大小值的选项。这些选项定义了每个 RPC 读和写的最大尺寸。:NONE.

mount

命令的

rs



版权声明:本文为nhczp原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。