AIX 5L 网络性能优化: 第 2 部分

NFS 监视和优化

这个有关 AIX® 网络的系列共分三个部分,重点关注优化网络性能方面的各种挑战。第 1 部分提供了有关网络的概述,并且还介绍了监视硬件所需的一些工具(包括 netstat、netpmon、entstat 和 nmon)。第 2 部分则重点关注优化 NFS。您将了解诸如 nfsstat 和 nmon 之类的监视实用工具,并且您还将使用 nfso 进行优化。本系列文章还提供了网络 I/O 性能优化的一些最佳实践。

Ken Milberg (ken@unix-linux.org), UNIX 顾问、技术作家和网站专家, Future Tech

Ken Milberg 是 techtarget.com 网站的技术作家和网站专家,并且在 searchopensource.com 网站提供 Linux 技术信息和支持。他还是《IBM 系统杂志(开放系统版)》的撰稿人和技术编辑。Ken 拥有马里兰大学计算机和信息科学学士学位以及技术管理硕士学位。他是长岛 POWER-AIX 用户组的创立者和负责人。多年以来,他在大小型企业工作过,并且担任过从 CIO 到高级 AIX 工程师的各种职位。现在,他在 Future Tech 工作,这是一家总部设在长岛的 IBM 业务合作伙伴。Ken 是一名通过 PMI 认证的项目管理专业人员 (PMP),还是一名通过 IBM 认证的高级技术专家(CATE,IBM System p5 2006),并且是通过 Solaris 认证的网络管理员 (SCNA)。您可以通过 kmilberg@gmail.com 与他联系。



2008 年 3 月 06 日

引言

在考虑使用网络文件系统 (NFS) 时,性能优化往往被人忽视。您专注于正确地配置您的文件系统,并确保系统的安全性,以至于可能常常会忘记 NFS 中的 N 所代表的是网络。不幸的是,如果您没有认真地进行 NFS 优化,那么您的网络文件系统就可能无法高效地工作。而幸运的是,IBM 集成了包括 nffstat 和 nfsmo 在内的几种工具,以帮助您在 AIX 中对网络文件系统进行监视和优化。本文对相关监视和优化操作进行了介绍。

您必须同时对客户端和服务器进行优化。本文说明了如何使用 netpmon 来监视 NFS 客户端以及 NFS 服务器的读取子例程和写入子例程。您还可以使用 nmon 对 NFS 活动进行快照,并且您可以了解如何使用 nmon 来分析历史数据。使用 netstat,您可以验证您的网络是否处于良好的状态,因为糟糕的网络使用率(或者没有进行仔细的配置)可能会导致低下的 NFS 性能。本文还研究了一些可用于 NFS 特定版本的实用工具,如 nfs4cl。并且您将了解一些最佳实践,包括如何将 I/O 分散到尽可能多的磁盘上。在这种情况下,你希望成为瓶颈的是 CPU 负载,而不是您的 I/O 系统。

与您在本系列文章中进行优化的其他领域有所不同,对于 NFS 来说,您必须监视(并且很可能进行优化)包括 CPU、内存、I/O 和网络在内的所有子系统。从客户端的角度来看,NFS 文件系统使用了远程连接的磁盘。任何影响所装入的磁盘性能的因素,都将影响 NFS 客户端的性能。本文还介绍了一些重要的守护进程,如 nfsd 和 biod,以及它们是如何对自身进行优化的。您可以看到客户端和服务器之间的基本交互,以帮助您了解底层所执行的工作。最后,本文强调指出,无论您正在优化哪一个子系统,系统优化都将是一个持续不断的过程。当然,最好是从一开始,在您遇到问题并且用户开始抱怨之前,就开始监视您的系统。因为有许多因素都可能会影响 NFS 的性能,所以一次只进行一项更改,这样一来,您就可以准确地评估您的更改所带来的效果。

回顾 NFS

这个部分提供了与 AIX 相关的网络文件系统的概述。您可以了解客户端和服务器之间如何相互关联、以及影响 NFS 性能的各种因素。

Sun Microsystems 在 1984 年发布了 NFS,它允许客户端通过网络访问各种文件,就好像这些文件与磁盘一样是在本地进行连接的。1989 年引入了版本 2,该版本只能通过 UDP 进行操作。1995 年引入了版本 3,该版本添加了对 TCP 的支持,从而真正地使得 NFS 在 WAN 中大行其道。2000 年引入了版本 4,这是由 Internet Engineering Task Force(在 Sun 放弃了对 NFS 的开发控制之后)所开发的第一个版本。2003 年,RFC3530 中的 NFS 得到了进一步增强,这也正是 AIX 所支持的版本。AIX 5.3 支持 3 种 NFS 版本:版本 2、3 和 4。缺省版本是版本 3。请注意,Red Hat Linux® 的缺省 NFS 版本是版本 4。

您可以在实际装入文件系统的时候选择版本类型,并且您可以在服务器中运行不同的 NFS 版本。现在,NFS 同时支持 TCP 和 UDP。因为 UDP 的速度更快(它所进行的工作更少),所以对于某些需要在 LAN 中实现最佳性能(而不是可靠性)的环境来说,使用 UDP 的性能可能会更好一些。TCP 则更加可靠(通过建立连接),并且它还可以在 WAN 中提供更好的性能,因为它可以进行流量控制以帮助最大限度地减少网络延迟。

NFS 有一个优点,它的行为与具体的计算机类型和操作系统无关。它通过使用远程过程调用 (RPC) 来实现这项功能,如图 1 中所示。

图 1. 客户端和服务器之间的交互
客户端和服务器之间的交互

图 1 显示了 NFS 客户端 A 和 B 如何访问位于 NFS 服务器 Z 的数据。首先,客户端计算机通过挂载文件系统,请求访问导出的数据。然后,当客户端线程尝试处理 NFS 挂载的文件系统中的数据时,将这些数据重定向到 biod,后者会通过 LAN 将数据传递到 NFS 服务器及其 nfsd 守护进程。服务器使用 nfds 来导出可供其客户端使用的目录。

正如您可以看到的,您将需要优化网络和 I/O 参数。如果服务器 Z 性能低下,那么这显然会影响其所有的 NFS 客户端。如果可能的话,对服务器进行专的优化,以使其作为 NFS 服务器(稍后将介绍更多相关内容)。

biod 守护进程又是启什么作用的呢?执行预读入和延迟写请求都需要这个守护进程。biod 守护进程提高了整体 NFS 性能,因为它可以充当与客户端应用程序之间的中间环节,既可以清空缓冲区缓存,也可以填满缓冲区缓存。如图 1 中所示,biod 守护进程将请求发送给服务器。另一方面,nfsd 是将 NFS 服务提供给客户端的中间环节。当服务器接收到客户端的 biod 通信时,服务器将使用 nfsd 守护进程,直到完成请求为止。

NFS 直到版本 4 才是有状态的,尽管它早在版本 2 中就可以使用 TCP,这又是为什么呢?图 2 显示了 NFS 相对于 TCP/IP 堆栈和 OSI 模型而言所处的位置。

图 2. OSI - TCP/IP - NFS
OSI - TCP/IP - NFS

因为 NFS 使用了远程过程调用 (RPC),所以 NFS 并不位于传输堆栈中。RPC 是一个过程库,允许客户端和服务器进程执行系统调用,就好像它们是在自己的地址空间中执行这些系统调用一样。在典型的 UDP NFS 版本 2 或者 3 实现中,NFS 服务器在其客户端得到授权共享卷之后,向客户端发送某种类型的 cookie。这将有助于最大限度地降低网络流量。但问题是,如果服务器宕机了,那么客户端将继续使用请求塞满网络。这正是为什么使用 TCP 作为首选项的原因。只有版本 4 可以使用有状态的连接,并且只有版本 4 使用 TCP 作为其传输协议。

NFS 版本 4 没有与 portmapper 或者其它的守护进程(如 lockd 和 statd)进行交互,因为它们合并到了内核中。在除版本 4 之外的其他版本中,portmapper 用于注册 RPC 服务,并且提供客户端和服务器之间用于通信的端口号。外部数据表示形式 (XDR) 提供了一种这样的机制,RPC 和 NFS 可以使用这种机制来确保在客户端和服务器之间进行可靠的数据交换。它为二进制数据交换采用了一种平台独立的方式,以实现这些任务。这样做可以解决各种系统以不同方式来表现数据的可能性。使用 XDR,可以正确地对数据进行解释,即使是在完全不同的平台中。


监视

这个部分提供了关于一些工具的概述,您可以使用这些工具来监视您的 NFS 系统。这些工具允许您快速地对性能问题进行故障排除,并获取相关的数据以便进行历史趋势研究和分析。其中一些工具通常用于服务器,而其它工具则通常用于客户端。这部分内容将介绍 nmon、topas、nfsstat、nfs、nfs4cl 和 netpmon。

nmon 和 topas

对于 NFS 优化,您最初可以使用诸如 topas 或者 nmon 之类的工具,因为它提供了一个很好的全面视图,其中说明了您的系统中正在进行的工作。请记住,NFS 性能问题可能与您的 NFS 子系统根本没有任何关系。您的瓶颈可能出现在网络中,或者从服务器的角度来看,在您的 CPU 或者磁盘 I/O 中。运行诸如 topas 或者 nmon 之类的工具,可以使您迅速地了解真正的问题所在。本文中的示例系统有 2 个 CPU,并且它正在运行 AIX 5.3 TL6。

图 3 从 NFS 的角度显示了 nmon 的输出。

图 3. nmon 输出
nmon 输出

使用 nmon,可以从 NFS(客户端和服务器)的角度查看到所有可用的信息。在这个系统中,当前不存在任何瓶颈。尽管最近 topas 已经提高了捕获数据的能力,但是 nmon 可能仍然是更好的选择。尽管 nmon 提供了类似于 topas 的前端,但是 nmon 更适合于长期趋势研究和分析。而且,nmon 为系统管理员提供了将数据输出到 Microsoft® Excel 电子表格的能力,从而生成非常漂亮的、且清楚地说明您的瓶颈的图表(适用于高级管理和功能团队)。这些工作可以通过一个称为 nmon analyzer 的工具来完成,该工具提供了到 nmon 的接口。可以免费下载 nmon 分析程序(请参见参考资料)。

如何使用 nmon 来捕获数据,并将其导入到该分析程序呢?使用 sudo,首先运行 nmon 3 个小时,每 60 秒进行一次快照:# sudo nmon -f -t -r test1 -s 60 -c 180。然后,对所创建的输出文件进行排序: # sort -A systemnfs_yymmdd.nmon > systemnfs_yymmdd.csv

接下来,使用 ftp 将 .csv 文件传输到您的计算机,启动 nmon 分析程序(启用宏),并且单击 analyze nmon data

nfsstat

nfsstat 工具很可能是您进行相关工作时所使用的最重要的工具。这个命令可以显示有关 NFS 和 RPC 调用的所有类型的信息。可以将 nfsstat 作作为一种监视工具来使用,以便对问题进行故障排除和性能优化。根据您所使用的标志,您可以使用 nfsstat 来显示 NFS 客户端或者服务器的信息。它还可以显示文件系统操作的实际使用计数。这有助于您详细地了解各个文件系统的使用情况,这样一来,您就可以了解如何最好地对您的系统进行优化。

首先来研究一下客户端标志(c)。r 标志可以提供 RPC 信息(请参见清单 1)。

清单 1. 运行带 c 标志的 nfsstat
root@lpar24ml162f_pub[/] > nfsstat -cr

Client rpc:
Connection oriented
calls      badcalls   badxids    timeouts   newcreds   badverfs   timers
14348      1          0          0          0          0          0
nomem      cantconn   interrupts
0          0          0
Connectionless
calls      badcalls   retrans    badxids    timeouts   newcreds   badverfs
23         0          0          0          0          0          0
timers     nomem      cantsend
0          0          0
root@lpar24ml162f_pub[/] >

这意味着什么呢?下面是一些面向连接的参数:

  • calls—接收到的 RPC 调用的数目
  • badcalls—RPC 层拒绝的调用的数目
  • badxids—收到的、不对应于任何未完成的调用的服务器应答次数
  • timeouts—等待服务器应答超时的调用的次数
  • newcreds—身份验证信息的刷新次数
  • badverfs—由于响应中的错误验证而失败的调用的次数

如果您发现 timeouts 或者 badxids 的值很大,那么可以通过使用 mount 命令增大 timeo 参数来进行解决(稍后将详细描述)。 .

nfs

现在来研究清单 2 中的 nfs 信息(n 标志)。

清单 2. nfs n 标志信息
timers root@lpar24ml162f_pub[/] > nfsstat -cn

Client nfs:
calls      badcalls   clgets     cltoomany
14348      1          0          0
Version 2: (0 calls)
null       getattr    setattr    root       lookup     readlink   read
0 0%       0 0%       0 0%       0 0%       0 0%       0 0%       0 0%
wrcache    write      create     remove     rename     link       symlink
0 0%       0 0%       0 0%       0 0%       0 0%       0 0%       0 0%
mkdir      rmdir      readdir    statfs
0 0%       0 0%       0 0%       0 0%
Version 3: (14348 calls)
null       getattr    setattr    lookup     access     readlink   read
0 0%       3480 24%   5 0%       1790 12%   5742 40%   0 0%       30 0%
write      create     mkdir      symlink    mknod      remove     rmdir
44 0%      3 0%       0 0%       0 0%       0 0%       3 0%       0 0%
rename     link       readdir    readdir+   fsstat     fsinfo     pathconf
0 0%       2 0%       3 0%       3195 22%   5 0%       2 0%       0 0%
commit
44 0%
root@lpar24ml162f_pub[/] >

这意味着什么呢?版本 3 包括下面这些参数:

  • calls—接收到的 NFS 调用的数目
  • badcalls—NFS 层拒绝的调用的数目
  • clgets—接收到客户端句柄的次数
  • cltoomany—没有未使用条目的客户端句柄的次数

nfs4cl

如果您正在运行 NFS 版本 4,那么您可能会更多地使用 nfs4cl。这个命令可以显示 NFS 版本 4 的统计信息和属性。

清单 3. 使用 nfs4cl
root@lpar24ml162f_pub[/] > nfs4cl showfs

Server      Remote Path          fsid                 Local Path
--------    ---------------      ---------------      ---------------

在运行了这个命令之后,您将看见没有任何输出。运行 mount 命令,以查看更详细的情况。

清单 4. 运行 mount 命令
root@lpar24ml162f_pub[/] > mount
  node       mounted        mounted over    vfs       date        options
-------- ---------------  ---------------  ------ ------------ ---------------
         /dev/hd4         /                jfs    Sep 25 13:18 rw,log=/dev/hd8
         /dev/hd2         /usr             jfs    Sep 25 13:18 rw,log=/dev/hd8
         /dev/hd9var      /var             jfs    Sep 25 13:18 rw,log=/dev/hd8
         /dev/hd3         /tmp             jfs    Sep 25 13:18 rw,log=/dev/hd8
         /dev/hd1         /home            jfs    Sep 25 13:18 rw,log=/dev/hd8
         /proc            /proc            procfs Sep 25 13:18 rw
         /dev/hd10opt     /opt             jfs    Sep 25 13:18 rw,log=/dev/hd8
192.168.1.12 /stage/middleware /stage/middleware nfs3   Sep 25 13:22 ro,bg,soft,
                                                                      intr,sec=sys
192.168.1.12 /userdata/20004773 /home/u0004773   nfs3   Sep 25 13:29 bg,hard,int

正如您可以看到的,其中并没有使用 NFS 版本 4 装入的文件系统,仅使用了 NFS 版本 3。与大多数性能优化命令不同,nfs4cl 还可以用于优化您的系统。通过使用 setfsoptions 子命令优化 NFS 版本 4,您可以完成这项操作。还有一个参数您可以进行优化,即 timeo,该参数指定了对服务器的 RPC 调用的超时值。清单 5 向您介绍了如何进行这项操作。

清单 5. 使用 nfs4cl 优化 timeo
root@lpar24ml162f_pub[/] > nfs4cl setfsoptions mnt timeo=7
root@lpar24ml162f_pub[/] >

请记住,您还可以使用 mount 命令来优化 timeo

netpmon

可以使用 netpmon 命令帮助对 NFS 瓶颈进行故障排除。除了监视许多其他类型的网络统计信息之外,netpmon 还可以监视客户端:包括读取和写入子例程、以及 NFS RPC 请求。对于服务器,netpmon 可以监视读取和写入请求。netpmon 将启动跟踪并在后台运行,直到您停止它为止。

清单 6. 使用 netpmon
root@lpar24ml162f_pub[/stage] > netpmon -T 3000000 -o /tmp/nfrss.out

Run trcstop command to signal end of trace.
root@lpar24ml162f_pub[/stage] > Sun Oct  7 07:06:14 2007
System: AIX 5.3 Node: lpar24ml162f_pub Machine: 00C22F2F4C00

清单 7 向您介绍了如何停止跟踪。

清单 7. 停止跟踪
root@lpar24ml162f_pub[/stage] > trcstop
root@lpar24ml162f_pub[/stage] > [netpmon: Reporting started]

[netpmon: Reporting completed]
[               2 traced cpus               ]
[         34.998 secs total preempt time   ]

[netpmon: 44.223 secs in measured interval]

输出文件

现在来研究一下这个输出文件中所提供的 NFS 特定的信息。

清单 8. 输出文件中的 NFS 特定的信息
NFSv3 Client RPC Statistics (by Server):
----------------------------------------

Server                     Calls/s
----------------------------------
p650                        126.68
------------------------------------------------------------------------
Total (all servers)         126.68


Detailed NFSv3 Client RPC Statistics (by Server):
-------------------------------------------------

SERVER: p650
calls:                  5602
  call times (msec):    avg 1.408   min 0.274   max 979.611 sdev 21.310

COMBINED (All Servers)
calls:                  5602
  call times (msec):    avg 1.408   min 0.274   max 979.611 sdev 21.310

使用 netpmon,您可以看到每台服务器的 NFS 版本 3 客户端统计信息。请注意,虽然 netpmon 是一个很有用的跟踪实用工具,但是性能开销有时甚至会超过其作用;因此在使用这个实用工具时请多加小心,特别是在可以采用其他方式获得类似信息的情况下。


使用 nfsmo 和 mount 进行优化

这个部分描述了特定的 nfs 优化命令。使用 nfsmo 以设置并显示您的 nsfstat 优化参数。使用 mount 优化基于 NFS 服务器的资源,而这只有在挂载了 NFS 文件系统之后才能生效。

客户端

biod 守护进程在连接性方面起到了很重要的作用。当 biod 自我优化线程数量(该守护进程根据需要创建和删除线程)时,可以根据整体负载,对 biod 线程的最大数目进行优化。这里有一个非常重要的概念需要理解,仅增大线程的数目并不能减轻由 CPU、I/O 或者内存瓶颈所引起的性能问题。例如,如果您的 CPU 使用率接近 100%,那么增大线程数量对您并没有任何帮助。当多个应用程序线程访问同一个文件、并且不存在任何其他类型瓶颈的时候,增大线程数目可以起到帮助作用。使用 lsof 可以进一步帮助您确定哪些线程正在访问哪些文件。

在前面的优化文章中,您可能还记得虚拟内存管理器 (VMM) 的参数 minperm 和 maxperm。与优化数据库服务器有所不同,对于 NFS 来说,您希望允许 VMM 使用尽可能多的 RAM 来进行 NFS 数据缓存。大多数 NFS 客户端对于工作段页面的需求很少。为了确保所有的内存都用于文件缓存,可以将 maxpermmaxclient 设置为 100%。

清单 9. 将 maxperm 和 maxclient 设置为 100%
root@lpar24ml162f_pub[/tmp] > vmo -o maxperm%=100
Setting maxperm% to 100
root@lpar24ml162f_pub[/tmp] > vmo -o maxclient%=100
Setting maxclient% to 100
root@lpar24ml162f_pub[/tmp] >

请注意,如果您的应用程序使用了数据库,并且它可以从执行自己的文件数据缓存的应用程序中获益,那么在这种情况下,您不应该将 maxperm 和 maxclient 设置为 100%。在这个实例中,将这些数值设置得较低,并且使用 NFS 中的并行 I/O 模式挂载文件系统。另外还请注意,NFS 在每个客户端系统中维护缓存,其中包含最近访问的文件和目录的属性。mount 命令可以控制在缓存中保存这些条目的时间长度。对于 mount 命令的参数,您可以更改下面几项:

  • actimeo
  • acregmin
  • acregmax
  • acdirmin
  • acdirmax

例如,acregmin 参数可以指定在实际更新之后,文件条目将要保留的最短时间。在更新文件的时候,将根据这个参数的具体值,将其从缓存中删除。使用 mount 命令,您还可以指定希望进行的是硬装入还是软装入。使用软装入,如果出现了错误,那么将立即对请求的程序进行报告;而对于硬装入,NFS 将不断地进行重试。这些重试本身可能会导致性能问题。从可靠性的角度而言,推荐使用硬装入读取和写入目录,以防止可能对数据造成的破坏。

mount 参数 rsizewsize 分别定义读取和写入目录的 RPC 包的最大值。缺省值是 32768 个字节。对于 NFS 版本 3 和 4,如果在高速网络中挂载您的 NFS 卷,那么您应该将这个值增大到 65536。另一方面,如果您的网络速度非常缓慢,那么您可能会为了通过发送较短的包来减少包碎片的数量,而考虑减少这个缺省值。然而,如果您减少这个缺省值,那么将需要发送更多的包,这可能会增加整体网络的使用率。了解您的网络,并对其进行相应的优化!

服务器

在分析特定的 NFS 参数之前,尝试减少网络中的负载,同时分析 CPU 和 I/O 子系统。瓶颈通常会导致一些看似 NFS 特定的问题。例如,NFS 既可以使用 TCP,也可以使用 UDP,这取决于您所使用的版本和您的偏好。请确保将您的 tcp_sendspacetcp_recvspace 值设置得高于缺省值,因为这可能会通过增加网络性能而对您的服务器产生影响。不能使用 nfso 对这些内容进行优化,而是使用 no

清单 10. 将 tcp_sendspace 和 tcp_recvspace 的值设置得高于缺省值
root@lpar24ml162f_pub[/tmp] > no -a | grep send
          ipsendredirects = 1
           ipsrcroutesend = 1
       send_file_duration = 300
            tcp_sendspace = 16384
            udp_sendspace = 9216
root@lpar24ml162f_pub[/] > no -o tcp_sendspace=524288
Setting tcp_sendspace to 524288
Change to tunable tcp_sendspace, will only be effective for future connections
root@lpar24ml162f_pub[/] >

如果您正在运行 NFS 的版本 4,那么请确保您启用了 nfs_rfc1323(请参见清单 11)。这允许 TCP 窗口的大小大于 64KB。同样在客户端中进行这样的设置。

清单 11. 启用 nfs_rfc1323
root@lpar24ml162f_pub[/] > no -o rfc1323=1
Setting rfc1323 to 1

或者,您还可以使用 nfso 来设置 rfc1323。

清单 12. 使用 nfso 设置 rfc1323
root@lpar24ml162f_pub[/] > nfso -o nfs_rfc1323=1
Setting nfs_rfc1323 to 1
root@lpar24ml162f_pub[/] >

使用 nfso 设置 rfc1323,将 TCP 窗口设置为只影响 NFS(与 no 相反,no 将其设置为整个范围)。如果您已经使用 no 进行了设置,那么您不需要对其进行更改。

与客户端类似,如果服务器是专门的 NFS 服务器,那么请确保您对 VMM 参数进行了相应的优化。将 maxpermmaxclient 参数更改为 100%,以确保 VMM 在进程中使用尽可能多的内存来控制页面文件的缓存。在服务器中,优化多线程的 nfsd,就像优化 biod(您可以优化的其他守护进程,包括 rpc.mountd 和 rpc.lockd)一样。与 biod、nfsd 的自我优化一样,这取决于具体的负载情况。使用 nfso 命令增加线程的数目。一个这样的参数是 nfs_max_read_size,该参数将设置读取应答 RPC 的最大大小。

分析清单 13 中 nfs_max_read_size 的设置。

清单 13. 设置 nfs_max_read_size 参数
root@lpar24ml162f_pub[/tmp] > nfso -L nfs_max_read_size
NAME                      CUR    DEF    BOOT   MIN    MAX    UNIT           TYPE
     DEPENDENCIES
--------------------------------------------------------------------------------
nfs_max_read_size         32K    32K    32K    512    64K    Bytes             D

现在,将它增加到 64K(以字节为单位)。

清单 14. 将 nfs_max_read_size 增大到 64K
root@lpar24ml162f_pub[/tmp] > nfso -o nfs_max_read_size=65536
root@lpar24ml162f_pub[/tmp] > nfso -L nfs_max_read_size
NAME                      CUR    DEF    BOOT   MIN    MAX    UNIT           TYPE
     DEPENDENCIES
--------------------------------------------------------------------------------
nfs_max_read_size         64K    32K    32K    512    64K    Bytes             D
--------------------------------------------------------------------------------

root@lpar24ml162f_pub[/tmp] >

您将这个值更改为所允许的最大值。如果您希望保留这些值,那么可以将其放入到 /etc/tunables/nextboot 文件中,这样一来,在重新启动系统之后,它们将仍然保持为经过更改的值。

您可以对更多的参数进行修改。要列出所有的这些参数,可以使用 -a 或者 -L 标志。-L 可以采用更好的格式显示更详细的信息。

清单 15. 使用带 -L 标志的 nfso 命令
root@lpar24ml162f_pub[/tmp] > nfso -L
NAME                      CUR    DEF    BOOT   MIN    MAX    UNIT           TYPE
     DEPENDENCIES
--------------------------------------------------------------------------------
portcheck                 0      0      0      0      1      On/Off            D
--------------------------------------------------------------------------------
udpchecksum               1      1      1      0      1      On/Off            D
--------------------------------------------------------------------------------
nfs_socketsize            600000 600000 600000 40000  1M     Bytes             D
--------------------------------------------------------------------------------
nfs_tcp_socketsize        600000 600000 600000 40000  1M     Bytes             D
--------------------------------------------------------------------------------
nfs_setattr_error         0      0      0      0      1      On/Off            D
--------------------------------------------------------------------------------
nfs_gather_threshold      4K     4K     4K     512    8K+1   Bytes             D
--------------------------------------------------------------------------------
nfs_repeat_messages       0      0      0      0      1      On/Off            D
--------------------------------------------------------------------------------
nfs_udp_duplicate_cache_size
                          5000   5000   5000   5000   100000 Req               I
--------------------------------------------------------------------------------
nfs_tcp_duplicate_cache_size
                          5000   5000   5000   5000   100000 Req               I
--------------------------------------------------------------------------------
nfs_server_base_priority  0      0      0      31     125    Pri               D
--------------------------------------------------------------------------------
nfs_dynamic_retrans       1      1      1      0      1      On/Off            D
--------------------------------------------------------------------------------
nfs_iopace_pages          0      0      0      0      64K-1  Pages             D
--------------------------------------------------------------------------------
nfs_max_connections       0      0      0      0      10000  Number            D
--------------------------------------------------------------------------------
nfs_max_threads           3891   3891   3891   5      3891   Threads           D
--------------------------------------------------------------------------------
nfs_use_reserved_ports    0      0      0      0      1      On/Off            D
--------------------------------------------------------------------------------
nfs_device_specific_bufs  1      1      1      0      1      On/Off            D
--------------------------------------------------------------------------------
nfs_server_clread         1      1      1      0      1      On/Off            D
--------------------------------------------------------------------------------
nfs_rfc1323               0      0      0      0      1      On/Off            D
--------------------------------------------------------------------------------
nfs_max_write_size        32K    32K    32K    512    64K    Bytes             D
--------------------------------------------------------------------------------
nfs_max_read_size         64K    32K    32K    512    64K    Bytes             D
--------------------------------------------------------------------------------
nfs_allow_all_signals     0      0      0      0      1      On/Off            D
--------------------------------------------------------------------------------
nfs_v2_pdts               1      1      1      1      8      PDTs              M
--------------------------------------------------------------------------------
nfs_v3_pdts               1      1      1      1      8      PDTs              M
--------------------------------------------------------------------------------
nfs_v2_vm_bufs            10000  10000  10000  512    50000  Bufs              I
--------------------------------------------------------------------------------
nfs_v3_vm_bufs            10000  10000  10000  512    50000  Bufs              I
--------------------------------------------------------------------------------
nfs_securenfs_authtimeout 0      0      0      0      60     Seconds           D
--------------------------------------------------------------------------------
nfs_v3_server_readdirplus 1      1      1      0      1      On/Off            D
--------------------------------------------------------------------------------
lockd_debug_level         0      0      0      0      10     Level             D
--------------------------------------------------------------------------------
statd_debug_level         0      0      0      0      10     Level             D
--------------------------------------------------------------------------------
statd_max_threads         50     50     50     1      1000   Threads           D
--------------------------------------------------------------------------------
nfs_v4_fail_over_timeout  0      0      0      0      3600   Seconds           D
--------------------------------------------------------------------------------
utf8_validation           1      1      1      0      1      On/Off            D
--------------------------------------------------------------------------------
nfs_v4_pdts               1      1      1      1      8      PDTs              M
--------------------------------------------------------------------------------
nfs_v4_vm_bufs            10000  10000  10000  512    50000  Bufs              I
--------------------------------------------------------------------------------
server_delegation         1      1      1      0      1      On/Off            D
--------------------------------------------------------------------------------
nfs_auto_rbr_trigger      0      0      0      -1     1M     MB                D
--------------------------------------------------------------------------------
client_delegation         1      1      1      0      1      On/Off            D
--------------------------------------------------------------------------------

n/a means parameter not supported by the current platform or kernel

Parameter types:
    S = Static: cannot be changed
    D = Dynamic: can be freely changed
    B = Bosboot: can only be changed using bosboot and reboot
    R = Reboot: can only be changed during reboot
    C = Connect: changes are only effective for future socket connections
    M = Mount: changes are only effective for future mountings
    I = Incremental: can only be incremented

Value conventions:
    K = Kilo: 2^10       G = Giga: 2^30       P = Peta: 2^50
    M = Mega: 2^20       T = Tera: 2^40       E = Exa: 2^60
root@lpar24ml162f_pub[/tmp] >

现在,您获得了列出可修改的参数的列表!


总结

本文介绍了网络文件系统 (NFS),包括其历史和不同版本。本文定义并介绍了 NFS I/O 堆栈、以及该堆栈与 OSI 模型和 TCP/IP 堆栈模型之间的关系。本文还介绍了在 NFS 环境中进行磁盘配置和 VMM 优化的最佳实践。

您研究了对客户端和服务器进行优化的区别。您对整体网络进行了监视,并且在监视的过程中深入地分析了 NFS 层。而且,您使用 nfso 和 mount 优化了您的系统。

在本系列文章的下一个部分中,您将深入地研究实际的网络包。其中将包括对 netstat 的更加详细的介绍。您还将了解如何使用 no 实用工具来优化您的网络子系统。

参考资料

学习

获得产品和技术

  • Microcode 下载:访问这个站点,以便为您的适配器获得当前发行版信息。
  • IBM 试用软件:从 developerWorks 可直接下载这些试用软件,您可以利用它们开发您的下一个项目。

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=AIX and UNIX
ArticleID=293441
ArticleTitle=AIX 5L 网络性能优化: 第 2 部分
publish-date=03062008