AIX 5L 网络性能优化: 第 1 部分:网络概述—对硬件进行监视

这个有关 AIX® 网络的系列文章共分三个部分,重点关注优化网络性能方面的各种挑战。在第一部分中,您将回顾网络配置方面的一些最佳实践,通过充分地利用各种网络工具(如 netstatnetpmonentstatnmon),您可以利用这些实践对硬件进行高效地监视。您还将研究一些特定的工具,它们可用于查看您的相关接口,以便研究如何配置它们。

Ken Milberg, UNIX 顾问、技术作家和网站专家, ALDION Consulting Pte Ltd

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 与他联系。



2007 年 12 月 13 日

关于本系列

这个有关 AIX® 网络的系列文章共分三个部分(请参见参考资料),本文是其中的第 1 部分,提供了有关网络的概述,并介绍了可以帮助您对硬件进行监视的一些工具。第 2 部分将介绍如何使用各种监视实用工具(如 nfsstatnmon)对网络文件系统(Network File System,NFS)进行优化,并且还介绍了如何使用 nfso 进行优化。第 3 部分将向您介绍如何监视网络数据包,以及如何使用 netstat 来完成这项工作。您将了解如何使用 no 实用工具来优化您的网络子系统。这个系列还详细说明了网络 I/O 性能优化方面的各种最佳实践。

引言

当系统管理员了解到发生了网络争用问题的时候,通常想到的第一件事情就是运行 netstatnetstat(相当于您为了获得内存报告而使用的 vmstat 或者 iostat)是获得网络配置情况概述的一种快速粗略的方法。与 vmstat 或者 iostat 不同,该命令的缺省值通常并不会向您提供所需的各种信息。您需要了解 netstat 的正确使用方法,以及在监视您的系统时如何最好地利用它。

相对于 vmstatiostat 而言,netstat 并不是一种真正的监视工具。您可以使用其他一些更合适的工具(本文稍后将对这些工具进行介绍)来帮助监视您的网络子系统。同时,在您真正地开始监视工作之前,您必须全面地了解与网络性能相关的各种组件。这些组件包括您的网络适配器、您的交换机和路由器,以及您在宿主逻辑分区中使用虚拟化的方式。如果您认定的确出现了网络瓶颈,那么要修复这个问题,可能涉及到您所负责的主机之外的范围。如果网络交换机的另一端配置不正确,那么您也无能为力。当然,您也许能够为网络团队指出正确的方向。您还应该仔细地收集有关您的网络的整体信息。您必须真正地了解您的网络,才能够研究出对您的网络设备进行故障排除的方法。在本文中,您将了解一些特定的 AIX 网络跟踪工具,如 netpmon,以及它们如何帮助您隔离瓶颈。

最后,无论您需要优化哪个子系统,您都必须将系统的优化工作看作是一个不断进行的过程。如前所述,监视系统的最佳时机是从系统投入运行时就开始,而不要等到出现任何问题,并且用户开始抱怨系统性能低下时才进行监视。您必须了解网络性能的基准,以便您能够掌握系统正常运行时的情况。最后,在进行更改的时候,请注意每次仅更改一项内容,以便您可以真正地了解这项更改所带来的影响。

网络 I/O 概述

这部分内容从网络与 AIX 之间的关系的角度提供了有关网络的概述,并且介绍了网络的物理特性(设备驱动器和适配器)、AIX 网络栈,以及如何对您的适配器进行相应的更改。

从网络与 AIX 之间的关系的角度了解网络子系统,这并不是一件非常容易的工作。在研究 CPU 和内存瓶颈的时候,从硬件和软件的角度来看,您需要研究的领域要少得多。磁盘 I/O 优化则更加复杂,因为有更多的问题将会影响到性能,特别是在设计和构建系统的过程中。从这个角度来看,优化您的网络实际上可能更类似于优化您的磁盘 I/O,当然这并不足为奇,因为它们都是与 I/O 相关的。下面就让我们开始吧!图 1 描述了 AIX 传输控制协议/网际协议 (TCP/IP) 中的各层。

图 1. AIX TCP/IP 中的各层
AIX TCP/IP 中的各层

您可以清楚地看到,还有更多的内容需要进行网络监视,而不仅仅只是运行 netstat 并查找冲突的情况。从应用程序层到媒体层,有许多方面都需要进行配置、监视和优化。此时,您应该注意到了该图与开放系统互联基本参考模型(Open Systems Interconnection Basic Reference Model,OSI Model)之间的一些相似之处。OSI 模型共包含 7 层,自底向上分别是:

  • 物理层
  • 数据链路层
  • 网络层
  • 传输层
  • 会话层
  • 表示层
  • 应用层

需要理解的最为重要的概念是,主机中的每层分别与远程计算机中相对应的层进行通信。实际的应用程序可以使用传输层协议中的用户数据报协议(User Datagram Protocol,UDP)或者传输控制协议(Transmission Control Protocol,TCP)来传输数据。它们接收来自于您所运行的应用程序的数据,并将它们分解为不同的数据包。数据包本身也存在区别,这取决于它是 UDP 或者 TCP 数据包。通常来说,UDP 的速度更快一些,而 TCP 更安全一些。有许多可调整的参数值得研究,您将在本系列文章后续的内容中了解这些参数。您可能希望首先熟悉一下 no 命令,这个实用工具可用于完成大多数的网络更改工作。从硬件的角度来看,您应该深入地了解需要进行正确配置以优化性能的那些组件,这一点是非常关键的。除非您工作于一个小型的组织、或者整个 IT 部门由您一个人组成,否则您可能与管理交换机和路由器的网络团队相互协作,并且无权配置这些硬件设备。您所处理的最重要的组件是您的网络适配器。在 2007 年,大多数适配器的版本都可以支持千兆以太网,如 10/100/1000 Mbps 以太网卡。您需要使用到一些重要的概念。

最大传输单元

最大传输单元(Maximum Transfer Unit,MTU)定义为可以通过网络进行传输的最大的数据包。其大小取决于网络的类型。例如,16 位令牌环网的缺省 MTU 大小为 17914,而光纤分布式数据接口(Fiber Distributed Data Interface,FDDI)的缺省 MTU 大小为 4352。以太网的缺省 MTU 大小为 1500(在启用了巨型帧 (jumbo frames) 的情况下为 9000)。数据包越大,所需要传输的数据包就越少,从而提高系统的带宽使用率。如果您的应用程序倾向于使用较小的数据包,那么这种情况是一个例外。如果您正使用千兆以太网,那么您可以使用巨型帧选项。要支持巨型帧的使用,必须对您的交换机进行相应配置,这一点是非常重要的。

要更改为使用巨型帧,可以使用如下的方法: # smit devices

然后转到 Communication>Ethernet>Adapter>Change/show characteristics of an Ethernet adapter。尝试将传输巨型帧选项从“No”更改为“Yes”(请参见清单 1)。

清单 1. “Characteristics of an Ethernet adapter”屏幕
              Change / show characteristics of an Ethernet adapter

Type or select values in entry fields.
Press Enter AFTER making all desired changes.

[TOP]                                                   [Entry Fields]
  Ethernet Adapter                                    ent1
  Description                                         Virtual I/O Ethernet >
  Status                                              Available
  Location
  Enable ALTERNATE ETHERNET address                   no                     +
  ALTERNATE ETHERNET address                         [0x000000000000]        +
  Minimum Tiny Buffers                               [512]                   +#
  Maximum Tiny Buffers                               [2048]                  +#
  Minimum Small Buffers                              [512]                   +#
  Maximum Small Buffers                              [2048]                  +#
  Maximum Medium Buffers                             [128]                   +#
  Maximum Medium Buffers                             [256]                   +#
  Minimum Large Buffers                              [24]                    +#
[MORE...8]

F1=Help             F2=Refresh          F3=Cancel           F4=List
F5=Reset            F6=Command          F7=Edit             F8=Image
F9=Shell            F10=Exit            Enter=Do

巨型帧的选项在什么地方呢?在这个示例中,您无法进行这项更改。出现这种情况的原因是,这个系统中仅使用了虚拟 I/O 以太网,稍后将更加详细地介绍这个主题。请记住,您必须了解管理的主机所处的网络。

让我们来检查一下这个系统(请参见清单 2)。

清单 2. 对系统进行检查
              Change / show characteristics of an Ethernet adapter

Type or select values in entry fields.
Press Enter AFTER making all desired changes.

                                                        [Entry Fields]
  Ethernet Adapter                                    ent1
  Description                                         10/100/1000 Base-TX P>
  Status                                              Available
  Location                                            1j-08
  RX descriptor queue size                           [1024]                  +#
  TX descriptor queue size                           [1024]                  +#
  Software transmit queue size                       [8192]                  +#
  Transmit jumbo frames                               yes                    +
  Enable hardware TX TCP resegmentation               yes                    +
  Enable hardware transmit and receive checksum       yes                    +
  Media speed                                         Auto_Negotiation       +
  Enable ALTERNATE ETHERNET address                   no                     +
  ALTERNATE ETHERNET address                         [0x000000000000]        +
  Apply change to DATABASE only                       no                     +

F1=Help             F2=Refresh          F3=Cancel           F4=List
F5=Reset            F6=Command          F7=Edit             F8=Image
F9=Shell            F10=Exit            Enter=Do

现在,您已经将相应的字段更改为支持巨型帧。

媒体速率

适配器将根据您的媒体速率的配置情况与其他设备进行通信。尽管存在一些其他的选项,但是您需要将网卡配置为 100M 全双工 (100_full_duplex) 或者自动协商 (auto-negotiation)。如果设置为自动协商,那么两端的适配器将尝试使用可能的、最高的速率进行通信。尽管您可能在相关文档中找到,应该按照这种方式进行配置(IBM® 甚至将其作为系统的缺省值),但据我所知,大多数高级 AIX 管理员更愿意将其设置为全双工,以确保能够获得适配器可能的、最高的速率。如果它无法正确地工作,那么在进行部署之前,您应该与合适的网络团队协作以解决这个问题。我宁愿在开始的时候花费更多的时间,而不是因为糟糕的交换机配置而对适配器进行相应的设置,从而导致较低的速率。lsattr 命令可以为您提供所需的信息。en 前缀显示了您的驱动器参数,而 ent 前缀则显示了您的硬件参数。让我们来显示一下您的硬件参数(请参见清单 3)。

清单 3. 显示硬件参数
testsys:/home/test>lsattr -El ent0
alt_addr        0x000000000000   Alternate Ethernet Address        True
busintr         166              Bus interrupt level               False
busmem          0xc8030000       Bus memory address                False
chksum_offload  yes              Enable RX Checksum Offload        True
intr_priority   3                Interrupt priority                False
ipsec_offload   no               IPsec Offload                     True
large_send      no               Enable TCP Large Send Offload     True
media_speed     Auto_Negotiation Media Speed                       True
poll_link       no               Enable Link Polling               True
poll_link_timer 500              Time interval for Link Polling    True
rom_mem         0xc8000000       ROM memory address                False
rx_hog          1000             RX Descriptors per RX Interrupt   True
rxbuf_pool_sz   1024             Receive Buffer Pool Size          True
rxdesc_que_sz   1024             RX Descriptor Queue Size          True
slih_hog        10               Interrupt Events per Interrupt    True
tx_preload      1520             TX Preload Value                  True
tx_que_sz       8192             Software TX Queue Size            True
txdesc_que_sz   512              TX Descriptor Queue Size          True
use_alt_addr    no               Enable Alternate Ethernet Address True

在这个示例中,您的接口设置为自动协商。

您还应该检查您的固件级别,以确保它们是最新的。我发现,通过更新到最新的固件级别,可以修复许多网络问题。lscfg 命令可以为您提供相关固件信息(请参见清单 4)。

清单 4. 使用 lscfg 命令显示固件信息
testsys:/home/test >lscfg -vp | grep -p ROM
      10/100 Mbps Ethernet PCI Adapter II:
        Part Number.................09P5023
        FRU Number..................09P5023
        EC Level....................H10971A
        Manufacture ID..............YL1021
        Network Address.............0002556FC98B
        ROM Level.(alterable).......SCU015
        Product Specific.(Z0).......A5204207
        Device Specific.(YL)........U0.1-P1-I1/E1

      10/100/1000 Base-TX PCI-X Adapter:
        Part Number.................00P3056
        FRU Number..................00P3056
        EC Level....................H11635A
        Manufacture ID..............YL1021
        Network Address.............00096B2E31BD
        ROM Level.(alterable).......GOL002
        Device Specific.(YL)........U0.1-P1/E2

请参见本文结尾处的参考资料部分,为您的适配器获得当前最新的发行版信息。在这个示例中,您将查找 10/100/1000 Base-TX PCI-X 适配器的历史信息:

  • OLxxx,这是一个表格位置占位符,用于将来的固件版本。
  • GOL021,这个固件级别将更正 EMC Class B 适配器的供应商设备 ID,以便在 AIX 网络安装管理 (NIM) 过程中能够识别该适配器。AIX 60;sum61; 命令的校验和为 38603。
  • GOL012,在 OF 中,当适配器(硬件)在传输过程中无法正常工作时,适配器几乎不可能使系统挂起。这项更改将防止适配器发送任何数据包。在经过一段预先确定的时间之后,向超时时间添加一个计时器。
  • GOL002,如果用户选择了 10/auto 或者 100/auto,而不是首先 ping 交换机,那么可以通过更新的固件来解决这个问题;在将其传递给 AIX 之前,开放固件不会将设置更改为 auto/auto。如果 AIX 发现参数为 10/auto 或者 100/auto,那么它并不知道如何对其进行处理,并且系统将在执行 ioconfig 的过程中中止,具体代码为 607。现在,固件会将 10/auto、100/auto、auto/full 或者 auto/half 的任何组合(这些都不是正确的选择)更改为 auto/auto。
  • GOL001,原始 (GA) 开放固件级别。

通过简要地了解相关的历史信息,固件版本已经落后了两个级别。您需要寻找某个合适的停机时间以更新固件,特别是当您碰到某些间歇性的网络问题的时候。

尽管在本系列后续的部分中重点关注于优化工作,但是您可能希望首先熟悉一下网络子系统的内存管理机制。在这里,你所需要了解的是一个名为 mbufs 的数据结构。这些数据结构用于为传入的和出站的流量存储内核数据。缓冲区大小本身的范围可以是从 32 个字节到 16384 字节。可以通过向虚拟内存管理器 (VMM) 提出分配请求,以创建这些缓冲区。在 SMP 计算机中,将为每个处理器均匀地划分每个内存池。下面的监视部分将向您介绍如何查看 mbufs。有一个重要的概念需要说明,处理器不能在它自己的处理器之外借用内存池。

您还应该熟悉两个其他的概念,即虚拟以太网和共享以太网。

  • 虚拟以太网:虚拟以太网(在 POWER5™ 的 AIX 5.3 中对其提供了支持)允许在相同框架的不同逻辑分区之间进行分区之间的、基于 IP 的通信。可以使用一个虚拟 I/O 交换机来完成这项任务。以太网适配器本身可以使用 HMC 进行创建和配置。您可能还记得,您以前曾尝试更改一个使用虚拟以太网进行配置的适配器。
  • 共享以太网:共享以太网是高级 POWER 虚拟化的特性之一。它允许使用虚拟 I/O 服务器 (VIO),其中多台主机可以真正地共享一个物理网络适配器。通常,这种特性用于不需要大量网络带宽的环境。

尽管本系列文章的讨论重点不是虚拟化,但是您应该清楚,如果您正使用虚拟化,那么存在一些其他的原因可能导致您的主机出现瓶颈。尽管虚拟化是一项非常有价值的技术,但是请注意不要在您的 VIO 服务器中共享过多的适配器,否则可能会带来很大的网络 I/O 损失。使用合适的监视工具,应该能够在发生问题的时候向您发出通知。而且,您可能还希望熟悉一些相关的概念(如地址解析协议 (ARP) 和域名服务器 (DNS)),这些概念都可能以不同的方式对网络性能和可靠性产生影响。

监视

这个部分为一些可用的网络监视命令和特定的 AIX 工具提供了概述。其中一些工具允许您快速地对一个性能问题进行故障排除,而其他一些工具则允许您为进行历史趋势研究和分析捕获相关的数据。

让我们来看看以前的命令 netstat,它可以显示整体网络统计信息。最常用的一个命令是 netstat -in(请参见清单 5)。

清单 5. 使用带 -in 选项的 netstat
@lpar7ml162f_pub[/home/u0004773] > netstat -in
Name  Mtu   Network     Address            Ipkts Ierrs    Opkts Oerrs  Coll
en1   1500  link#2      2a.21.70.0.90.6   21005666     0   175389     0     0
en1   1500  10.153      10.153.3.7        21005666     0   175389     0     0
en0   1500  link#3      2a.21.70.0.90.5   328241182    0     1189     0     0
en0   1500  172.29.128  172.29.137.205    328241182    0     1189     0     0
lo0   16896 link#1                           62223     0    62234     0     0
lo0   16896 127         127.0.0.1            62223     0    62234     0     0
lo0   16896 ::1                              62223     0    62234     0     0
root@lpar7ml162f_pub[/home/u0004773] >

下面解释一下它的含义:

  • Name:接口名称。
  • MTU:接口最大传输单元大小。
  • Network:该接口所连接到的实际网络地址。
  • Address:Mac 和 IP 地址。
  • Ipkts:该接口所接收到的数据包的总数。
  • Ierrs:该接口所报告的错误的总数。
  • Opkts:该接口所传输的数据包的总数。
  • Oerrs:该接口所传输的错误数据包的总数。
  • Coll:该适配器中冲突的总数。如果您使用的是以太网,将不会显示任何内容。

另一个非常方便的 netstat 标志是 -m 选项。这个标志允许您查看内核 malloc 统计信息;其中包括每个 CPU 的 mbuf 内存请求(包括各个缓冲区的大小)、正在使用的和失败的数量(请参见清单 6)。

清单 6. 带 -m 选项的 netstat
root@lpar7ml162f_pub[/home/u0004773] > netstat -m

Kernel malloc statistics:

******* CPU 0 *******
By size           inuse     calls failed   delayed    free   hiwat   freed
32                  194      5203      0         2      62    2620       0
64                  484      3926      0         7      28    2620       0
128                 309     14913      0         8     875    1310       0
256                 392     14494      0        22     136    2620       0
512                2060 261283179      0       261      60    3275       0
1024                 31      2714      0         8      25    1310       0
2048                587      1237      0       292       5    1965       0
4096                  9      8367      0         2       2     655       0
8192                  2        12      0         2       1     327       0
16384               224       354      0        29       2     163       0
32768                48       183      0        13       3      81       0
65536                84       142      0        42       0      81       0
131072                3         4      0         0      51     102       0


******* CPU 1 *******
By size           inuse     calls failed   delayed    free   hiwat   freed
32                   17        96      0         0     111    2620       0
64                  295      1214      0         5      25    2620       0
128                 151     93806      0         5     713    1310       0
256                  83       273      0         5      29    2620       0
512                1577  86936634      0       199      23    3275       0
1024                  4        18      0         2       4    1310       0
2048                515       516      0       257       1    1965       0
4096                  1       707      0         0       1     655       0
8192                  1         1      0         1       4     327       0
16384                32        32      0         4       0     163       0
65536                34        34      0        17       0      81       0
131072                0         0      0         0      44      88       0

如果您使用的是以太网,那么还可以使用 entstat 命令来显示设备驱动器的统计信息。它提供了各种信息的混合(请参见清单 7)。

清单 7. 使用 enstat 命令显示设备驱动器统计信息
testsys:/home/test>entstat -d en1
-------------------------------------------------------------
ETHERNET STATISTICS (en1) :
Device Type: 10/100 Mbps Ethernet PCI Adapter II (1410ff01)
Hardware Address: 00:02:55:6f:c9:9b
Elapsed Time: 5 days 12 hours 14 minutes 46 seconds

Transmit Statistics:                          Receive Statistics:
--------------------                          -------------------
Packets: 803536                               Packets: 2095253
Bytes: 511099654                              Bytes: 1099945394
Interrupts: 520                               Interrupts: 2074913
Transmit Errors: 0                            Receive Errors: 0
Packets Dropped: 0                            Packets Dropped: 0
                                              Bad Packets: 0
Max Packets on S/W Transmit Queue: 38
S/W Transmit Queue Overflow: 0
Current S/W+H/W Transmit Queue Length: 1

Broadcast Packets: 535                        Broadcast Packets: 997476
Multicast Packets: 2                          Multicast Packets: 5477
No Carrier Sense: 0                           CRC Errors: 0
DMA Underrun: 0                               DMA Overrun: 0
Lost CTS Errors: 0                            Alignment Errors: 0
Max Collision Errors: 0                       No Resource Errors: 0
Late Collision Errors: 0                      Receive Collision Errors: 0
Deferred: 0                                   Packet Too Short Errors: 0
SQE Test: 0                                   Packet Too Long Errors: 0
Timeout Errors: 0                             Packets Discarded by Adapter: 0
Single Collision Count: 0                     Receiver Start Count: 0
Multiple Collision Count: 0
Current HW Transmit Queue Length: 1

General Statistics:
-------------------
No mbuf Errors: 0
Adapter Reset Count: 0
Adapter Data Rate: 200
Driver Flags: Up Broadcast Running
        Simplex AlternateAddress 64BitSupport
        ChecksumOffload PrivateSegment DataRateSet

10/100 Mbps Ethernet PCI Adapter II (1410ff01) Specific Statistics:
--------------------------------------------------------------------
Link Status : up
Media Speed Selected: Auto negotiation
Media Speed Running: 100 Mbps Full Duplex
Receive Pool Buffer Size: 1024
No Receive Pool Buffer Errors: 0
Receive Buffer Too Small Errors: 0
Entries to transmit timeout routine: 0
Transmit IPsec packets: 0
Transmit IPsec packets dropped: 0
Receive IPsec packets: 0
Receive IPsec packets dropped: 0
Inbound IPsec SA offload count: 0
Transmit Large Send packets: 0
Transmit Large Send packets dropped: 0
Packets with Transmit collisions:
 1 collisions: 0           6 collisions: 0          11 collisions: 0
 2 collisions: 0           7 collisions: 0          12 collisions: 0
 3 collisions: 0           8 collisions: 0          13 collisions: 0
 4 collisions: 0           9 collisions: 0          14 collisions: 0
 5 collisions: 0          10 collisions: 0          15 collisions: 0

testsys:/home/test>

您并没有在其中发现许多冲突,因为您可能工作于一个经过交换的环境中。查找传输错误,并确保它们不会增长得过快。在开始考虑进行优化之前,您需要了解如何对冲突和错误问题进行故障排除。另外,您可以使用 netstat -v,它可以提供类似的信息。

让我们来看一下 netpmonnetpmon 可以从网络的角度提供有关 CPU 使用的信息,它还包括网络设备驱动器 I/O、Internet 套接字调用,以及其他各种统计信息的数据。类似于其他的跟踪命令(tproffilemon),该命令将启动跟踪工作并在后台运行,直到您使用 trcstop 命令中止它。我很喜欢 netpmon,因为它能够为您提供网络活动的详细概述,还可以捕获进行趋势研究和分析的相关数据(尽管从这个角度来说,它没有 nmon 那么有价值)。下面,您将使用一个大小为 2M 字节的跟踪缓冲区(请参见清单 8)。

清单 8. 带 -T 选项的 netpmom
root@lpar7ml162f_pub[/etc] > netpmon -T 2000000 -o /tmp/net.out
Wed Sep  5 05:30:27 2007
System: AIX 5.3 Node: lpar7ml162f_pub Machine: 00C22F2F4C00

Run trcstop command to signal end of trace.

现在您将中止它(请参见清单 9)。

清单 9. 中止 netpmom
root@lpar7ml162f_pub[/etc] >
root@lpar7ml162f_pub[/etc] > trcstop
root@lpar7ml162f_pub[/etc] > [netpmon: Reporting started]

[netpmon: Reporting completed]
[               4 traced cpus               ]
[         245.464 secs total preempt time   ]

[netpmon: 164.813 secs in measured interval]

root@lpar7ml162f_pub[/etc] >

让我们来查看一下相关数据。下面是输出数据中的一小部分采样(请参见清单 10)。

清单 10. 示例输出
# more net.out

Process CPU Usage Statistics:
-----------------------------
                                                   Network
Process (top 20)             PID  CPU Time   CPU %   CPU %
----------------------------------------------------------
UNKNOWN                    15920  151.2735  36.558   0.000
UNKNOWN                     7794  104.8801  25.346   0.000
UNKNOWN                     6876   73.8785  17.854   0.000
UNKNOWN                     5402   50.6225  12.234   0.000
xmwlm                      13934   15.0469   3.636   0.000
-ksh                        5040    0.0371   0.009   0.000
getty                      18688    0.0280   0.007   0.000
sshd:                      28514    0.0224   0.005   0.000
syncd                      10068    0.0212   0.005   0.000
gil                         3870    0.0163   0.004   0.004
swapper                        0    0.0135   0.003   0.000
spray                       5400    0.0085   0.002   0.000
send-mail                  18654    0.0084   0.002   0.000
rmcd                       15026    0.0081   0.002   0.000
ping                        5036    0.0068   0.002   0.000
ksh                        26642    0.0062   0.002   0.000
trcstop                     5404    0.0057   0.001   0.000
rpc.lockd                  22032    0.0052   0.001   0.000
mail                        6872    0.0039   0.001   0.000
IBM.ServiceRMd             28126    0.0032   0.001   0.000
----------------------------------------------------------
Total (all processes)             395.9176  95.681   0.004
Idle time                          70.3216  16.995

========================================================================

First Level Interrupt Handler CPU Usage Statistics:
---------------------------------------------------
                                                   Network
FLIH                              CPU Time   CPU %   CPU %
----------------------------------------------------------
PPC decrementer                    18.4640   4.462   0.000
queued interrupt                    6.2882   1.520   0.000
external device                     0.6343   0.153   0.000
data page fault                     0.0220   0.005   0.000
----------------------------------------------------------
Total (all FLIHs)                  25.4085   6.140   0.000


TCP Socket Call Statistics (by Process):
----------------------------------------
                                   ------ Read -----   ----- Write -----
Process (top 20)             PID   Calls/s   Bytes/s   Calls/s   Bytes/s
------------------------------------------------------------------------
sshd:                      28514      0.47      7754      0.65        40
sshd:                      29596      0.04       596      0.05         3
------------------------------------------------------------------------
Total (all processes)                 0.51      8350      0.70        43

========================================================================


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

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

========================================================================

PROCESS: ping   PID: 5036
reads:                  12
  read sizes (bytes):   avg 192.0   min 192     max 192     sdev 0.0
  read times (msec):    avg 7.927   min 7.136   max 12.806  sdev 1.496
writes:                 12
  write sizes (bytes):  avg 64.0    min 64      max 64      sdev 0.0
  write times (msec):   avg 0.052   min 0.039   max 0.063   sdev 0.007

正如您可以看到的,此时并没有太多的整体网络 I/O 活动。顶部的部分是最重要的内容,因为它可以帮助您了解哪些进程占用了过多的网络 I/O 时间。

lsattr(稍后将用于查看硬件参数)是另一个常用于显示接口统计信息的命令。其中您所看到的属性,使用 chdev 或者 no 命令进行配置。让我们显示您的驱动器参数(请参见清单 11)。

清单 11. 使用 lsattr 显示驱动器参数
testsys:/home/testsys >lsattr -El en0
alias4               IPv4 Alias including Subnet Mask           True
alias6               IPv6 Alias including Prefix Length         True
arp           on     Address Resolution Protocol (ARP)          True
authority            Authorized Users                           True
broadcast            Broadcast Address                          True
mtu           1500   Maximum IP Packet Size for This Device     True
netaddr              Internet Address                           True
netaddr6             IPv6 Internet Address                      True
netmask              Subnet Mask                                True
prefixlen            Prefix Length for IPv6 Internet Address    True
remmtu        576    Maximum IP Packet Size for REMOTE Networks True
rfc1323              Enable/Disable TCP RFC 1323 Window Scaling True
security      none   Security Level                             True
state         detach Current Interface Status                   True
tcp_mssdflt          Set TCP Maximum Segment Size               True
tcp_nodelay          Enable/Disable TCP_NODELAY Option          True
tcp_recvspace        Set Socket Buffer Space for Receiving      True
tcp_sendspace        Set Socket Buffer Space for Sending        True
testsys:/home/testsys>

我也很喜欢使用 spray 命令对可能的问题进行故障排除。spray 命令将发送单向的数据包流(从您的主机到远程主机)。它将向您显示数据包的数量,以及数据包的传输速率(请参见清单 12)。

清单 12. spray 命令
root@lpar7ml162f_pub[/etc] > /usr/etc/spray lpar8test  -c 2000 -l 1400 -d 1
sending 2000 packets of length 1402 to
        lpar8test ...

        34 packets (1.700%) dropped by lpar8test
        23667 packets/second, 33181234 bytes/second
root@lpar7ml162f_pub[/etc] >

在这个示例中,向主机 lpar8test 发送了 2000 个数据包,数据包之间的时间延迟为一微秒。每个数据包的长度为 1400 个字节。在使用 spray 之前,请确保没有从 inetd 中注释掉 sprayd(这是 AIX 中的缺省情况),并且不要忘记更新 inetd。如果您发现了大量的丢包,这显然不是很好。

最后,让我们来看一下清单 13 中的 nmon

清单 13. nmon
?nmon????????p=Partitions???????Host=lpar7ml162f_pubRefresh=2 secs???05:43.15?????????
? Network ????????????????????????????????????????????????????????????????????????????
?I/F Name Recv=KB/s Trans=KB/s packin packout insize outsize Peak->Recv Trans     ?
?    en1     2.1     0.0      46.3      0.0    46.0    0.0        2.1     0.0        ?
?    en0    43.8     0.3     575.2      0.5    77.9  674.0       43.8     0.6        ?
?    lo0     0.0     0.0       0.0      0.0     0.0    0.0        0.0     0.0        ?
?  Total     0.0     0.0 in Mbytes/second                                            ?
?I/F Name  MTU  ierror oerror collision Mbits/s Description                          ?
?    en1   1500      0      0      0   2047 Standard Ethernet Network Interface      ?
?    en0   1500      0      0      0   2047 Standard Ethernet Network Interface      ?
?    lo0  16896      0      0      0      0 Loopback Network Interface

如果您学习过 AIX 方面的其他系列文章(请参见参考资料),那么您就知道我非常喜欢 nmon,并且一旦您开始使用它,您也会喜欢这个命令。使用 nmon(在启动之后输入该命令),您将获得网络中所有内容的快速快照,包括适配器详细信息、MTU、错误计数器和冲突,以及兆位速率。

而且,您还可以使用 nmon 捕获相关的数据。使用 nmon 分析程序,您可以直接在 Microsoft® Excel 电子表格中打印出美观的图形报告。请参见参考资料,其中提供了一个 IBM Wiki 的链接,可以获得 nmon 手册或者下载内容。

总结

本文介绍了网络 I/O 子系统的相对重要性,并且定义了 AIX 网络 I/O 层,以及它与 OSI 模型之间的关系。您了解了网络配置方面的一些最佳实践,更改以太网的设置以支持巨型帧,并查看接口硬件和驱动器数据。您还研究了一些可用的监视工具,以及如何使用 netpmonnmon 捕获数据。在本系列文章的下一个部分中,您将优化 NFS,了解更多有关各种监视实用工具的内容,如 nfsstatnmon,并了解如何使用 nfso 进行优化工作。

参考资料

学习

获得产品和技术

  • 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=276992
ArticleTitle=AIX 5L 网络性能优化: 第 1 部分:网络概述—对硬件进行监视
publish-date=12132007