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

监视您的网络数据包并优化网络

这个有关 AIX® 网络优化的系列共分三个部分,重点关注优化网络性能方面的各种挑战。第 1 部分提供了有关网络的概述,并且还介绍了监视硬件所需的一些工具,包括 netstat、netpmon、entstat 和 nmon。第 2 部分介绍了对 NFS 子系统监视和优化的内容。本文是第 3 部分,也是最后的一个部分,将向您介绍如何监视网络数据包。

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 月 13 日

引言

虽然运行诸如 netstat 之类的命令可以提供一些有用的信息,但有时您仍然需要深入到数据包级别上进行更进一步的分析。在这种情况下,可以使用各种跟踪工具。本文将描述这些实用工具,包括 iptrace、ipreport 和 tcpdump。本文还将向您介绍如何使用像 no 这样的工具来优化网络。虽然 no 命令与 vmo 和 ioo 很类似,但 no 是面向网络的版本。本文重点关注于 tcp 工作负载优化、udp 工作负载优化,以及 no 实用工具所提供的一些其他值得关注的参数。本文还将讨论 ARP 缓存优化,以及如何监视和优化 ARP 统计信息。您还将了解名称解析,以及如何通过对解析主机名的方式进行少量的调整,以简单地提高性能。

监视网络数据包

在这个部分中,您将了解一些相关工具的概述,这些工具可以帮助您监视网络数据包。这些工具允许您快速地对性能问题进行故障排除,并获取相关的数据以便进行历史趋势的研究和分析。

第 1 部分介绍了一些非常基本的标志,如 -in,这是 netstat 的一个常用标志。使用 netstat,您还可以监视有关数据包本身的、更为详细的信息。例如,-D 选项将显示您的通信子系统所接收的、传输的和丢弃的数据包的总数。可以按设备、驱动程序和协议来对结果进行排序(请参见清单 1)。

清单 1. 带 -D 选项的 netstat
root@lpar37p682e[/home] > netstat -D

Source                         Ipkts                Opkts     Idrops     Odrops
-------------------------------------------------------------------------------
ent_dev0                   238122150                 1805          0          0
ent_dev1                    17583646               301547          0          0
                ---------------------------------------------------------------
Devices Total              255705796               303352          0          0
-------------------------------------------------------------------------------
ent_dd0                    238122150                 1805          0          0
ent_dd1                     17583646               301547          0          0
                ---------------------------------------------------------------
Drivers Total              255705796               303352          0          0
-------------------------------------------------------------------------------
ent_dmx0                   238011223                  N/A     110927        N/A
ent_dmx1                    17466977                  N/A     116669        N/A
                ---------------------------------------------------------------
Demuxer Total              255478200                  N/A     227596        N/A
-------------------------------------------------------------------------------
IP                         238073400               301739       2392       1691
IPv6                               0                    0          0          0
TCP                             7373               296758         93          0
UDP                        238063379                 4677  238055978          0
                ---------------------------------------------------------------
Protocols Total            476144152               603174  238058463       1691
-------------------------------------------------------------------------------
en_if1                      17466977               301547          0          0
en_if0                     238011223                 1805          0          0
lo_if0                           609                  619         10          0
                ---------------------------------------------------------------
Net IF Total               255478809               303971         10          0

另一个有用的标志是 -s,它将显示所使用的全部协议的详细统计信息(包括发送的、接收的和丢弃的数据包)。如果您只希望查看 tcp 协议的相关信息,那么您还可以使用 -p 标志(请参见清单 2)。

清单 2. 带 -p 选项的 netstat
root@lpar37p682e[/home] > netstat -p tcp

tcp:
        297240 packets sent
                284116 data packets (18296667 bytes)
                0 data packets (0 bytes) retransmitted
                316 ack-only packets (119 delayed)
                0 URG only packets
                0 window probe packets
                38 window update packets
                12770 control packets
                0 large sends
                0 bytes sent using largesend
                0 bytes is the biggest largesend
        7675 packets received
                6277 acks (for 18288752 bytes)
                133 duplicate acks
                0 acks for unsent data
                1864 packets (141133 bytes) received in-sequence
                92 completely duplicate packets (91 bytes)
                0 old duplicate packets

实际上,有许多种不同的使用 netstat 的方式,而在刚开始学习的时候,最好是查看手册(man)页面,然后按照其中的方法进行执行。不要害怕运行这些命令,因为它们并不会耗尽磁盘空间、或者影响性能。可以使用 AIX 中提供的各种跟踪工具来记录有关数据包的详细信息。在使用它们时请多加小心。当您尝试确定导致网络性能问题的根本原因时,这些工具将会非常有帮助。

首先介绍一下 iptrace 和 ipreport。iptrace 命令记录从网络接口接收到的所有数据包。ipreport 命令将 iptrace 生成的数据格式化到一个可读的跟踪报告中。而且,您还可以使用 ipfilter 对 ipreport 所创建的输出文件进行排序。尝试启动跟踪,并让它工作一分钟(请参见清单 3)。

清单 3. 启动跟踪
root@lpar37p682e[/etc] > /usr/sbin/iptrace -a -i en0 iptrace.out &
[1]     737520
root@lpar37p682e[/etc] > [774252]

[1] +  Done                    /usr/sbin/iptrace -a -i en0 iptrace.out &
root@lpar37p682e[/etc] > ps -ef | grep iptrace
    root 205030 749602   0 10:57:32  pts/0  0:00 grep iptrace
    root 774252      1   2 10:57:25      -  0:00 /usr/sbin/iptrace -a -i en0 iptrace.out

When you are done with the trace, you need to kill the process:

root@lpar37p682e[/etc] > kill -1 774252
root@lpar37p682e[/etc] > iptrace: unload success!
root@lpar37p682e[/etc] > ipreport -r -s iptrace.out >/ipreport.network

Now, examine the output. 

root@lpar37p682e[/] > more ipreport.network
IPTRACE version: 2.0

ETH: ====( 114 bytes transmitted on interface en0 )==== 10:57:25.698790226
ETH:    [ da:bb:b8:b5:26:14 -> 6e:87:76:59:6e:cd ]  type 800  (IP)
IP:     < SRC =   172.29.135.44 >  (lpar37p682e)
IP:     < DST =   172.29.131.16 >
IP:     ip_v=4, ip_hl=20, ip_tos=16, ip_len=100, ip_id=18349, ip_off=0 DF
IP:     ip_ttl=60, ip_sum=945f, ip_p = 6 (TCP)
TCP:    <source port=22(ssh), destination port=53643 >
TCP:    th_seq=337783617, th_ack=1783353394
TCP:    th_off=8, flags<PUSH | ACK>
TCP:    th_win=65522, th_sum=0, th_urp=0
TCP:            nop
TCP:            nop
TCP:            timestamps TSVal: 0x47414604  TSEcho: 0x47826117
TCP: 00000000     520bea13 dfaefa7b e1c517d6 ce86f960     |R......{.......'|
TCP: 00000010     fdb24d69 947c8d48 fa7b6379 235d1a63     |..Mi.|.H.{cy#].c|
TCP: 00000020     840adfc2 e1b4b916 e1002983 f96fc1fb     |..........)..o..|

清单 3 显示了所捕获的、有关每个数据包的信息,包括数据包的大小和 IP 地址信息。正如您可以想象到的,这个跟踪文件可能会迅速地变得很大。示例文件在不到一分钟的时间内就增长到了 40 MB!在运行这些跟踪的时候,一定要非常小心,因为如果您没有足够的磁盘空间用于这些文件,那么将会迅速地耗尽磁盘空间。

您还可以使用系统资源控制器 (SRC) 来启动跟踪。请参见清单 4。

清单 4. 使用 SRC 启动跟踪
# startsrc -s iptrace -a "-i en1 /home/testing/iptrace/iptracelog"

Stopping it is easy;

# stopsrc -s iptrace

tcpdump 的情况又如何呢?tcpdump 可以输出为每个 NIC 捕获的数据包的 Header。tcpdump 的一个重要区别是,与 iptrace 不同,它一次只能查看一个网络接口。而且,因为 iptrace 将检查来自内核空间的完整的数据包,所以其结果可能导致丢弃大量的数据包。使用 tcpdump,您还可以限制要跟踪的数据的总量。另外,您不需要使用 ipreport 类型的命令来格式化二进制的数据,因为 tcpdump 将进行跟踪并产生格式化的输出。清单 5 给出了一个示例。

清单 5. 使用 tcpdump
root@lpar37p682e[/] > 
root@lpar37p682e[/] > tcpdump -w tcp.out
tcpdump: listening on en0, link-type 1, capture size 96 bytes

tcpdump 将持续地捕获数据包,直到您键入 Ctrl+C 为止。如果由于缓冲区空间不足而丢弃了任何数据包,那么它也会作出相应的报告。

清单 6 显示了当您结束示例跟踪时所看到的内容。

清单 6. 跟踪结束
14755 packets received by filter
0 packets dropped by kernel

13:40:28.001711 IP lpar37p682e.ssh > 172.29.131.16.53736: P 374368029:374368077(48) 
  ack 3207376412 win 65522 <nop,nop,timestamp 1195479662 1199746434>
13:40:28.001765 IP lpar37p682e.ssh > 172.29.131.16.53736: P 48:96(48) 
  ack 1 win 65522 <nop,nop,timestamp 1195479662 1199746434>
13:40:28.001872 IP lpar37p682e.ssh > 172.29.131.16.53736: P 96:144(48) 
ack 1 win 65522 <nop,nop,timestamp 1195479662 1199746434>
13:40:28.001925 IP lpar37p682e.ssh > 172.29.131.16.53736: P 144:192(48) 
ack 1 win 65522 <nop,nop,timestamp 1195479662 1199746434>
P 400:448(48) ack 1 win 65522 <nop,nop,timestamp 1195479662 1199746434>
13:40:28.066856 IP 172.29.131.16.53736 > lpar37p682e.ssh: . 
ack 448 win 32761 <nop,nop,timestamp 1199746434 1195479662>
13:40:28.149698 IP 172.29.129.53.cognex-insight > 
              172.29.191.255.silhouette: isakmp: phase 2/others ? #64[EC]
13:40:28.150470 IP 172.29.129.53.cognex-insight > 
              172.29.191.255.silhouette: isakmp: phase 2/others ? #64[EC]
13:40:28.151257 IP 172.29.129.53.cognex-insight > 
              172.29.191.255.silhouette: isakmp: phase 2/others ? #64[EC]
13:40:28.151954 IP 172.29.129.53.cognex-insight > 
              172.29.191.255.silhouette: isakmp: phase 2/others ? #64[EC]
13:40:28.152756 IP 172.29.129.53.cognex-insight > 
              172.29.191.255.silhouette: isakmp: phase 2/others ? #64[EC]
13:40:28.153449 IP 172.29.129.53.cognex-insight > 
              172.29.191.255.silhouette: isakmp: phase 2/others ? #64[EC]
13:40:28.154251 IP 172.29.129.53.cognex-insight > 
              172.29.191.255.silhouette: isakmp: phase 2/others ? #64[EC]
13:40:28.154950 IP 172.29.129.53.cognex-insight > 
              172.29.191.255.silhouette: isakmp: phase 2/others ? #64[EC]
13:40:28.155754 IP 172.29.129.53.cognex-insight > 
              172.29.191.255.silhouette: isakmp: phase 2/others ? #64[EC]

上面的输出说明,内核并没有丢弃任何数据包,这是很好的情况。


优化网络性能

在这个部分中,您将了解如何使用 no 命令来优化您的网络子系统。您还将了解可能影响网络性能的一些其他方面,并且您将了解在适当情况下的建议优化方法。

no 命令是优化网络参数的最重要的命令。首先,使用 -a 标志查看所有的参数(请参见清单 7)。

清单 7. 查看参数
root@lpar37p682e[/] > no -a
                 arpqsize = 12
               arpt_killc = 20
              arptab_bsiz = 7
                arptab_nb = 149
                bcastping = 0
      clean_partial_conns = 0
                 delayack = 0
            delayackports = {}
         dgd_packets_lost = 3
            dgd_ping_time = 5
           dgd_retry_time = 5
       directed_broadcast = 0
         extendednetstats = 0
                 fasttimo = 200
        icmp6_errmsg_rate = 10
          icmpaddressmask = 0
ie5_old_multicast_mapping = 0
                   ifsize = 256
          inet_stack_size = 16
               ip6_defttl = 64
                ip6_prune = 1
            ip6forwarding = 0
       ip6srcrouteforward = 1
       ip_ifdelete_notify = 0
                 ip_nfrag = 200
             ipforwarding = 0
                ipfragttl = 2
        ipignoreredirects = 0
                ipqmaxlen = 100
          ipsendredirects = 1
        ipsrcrouteforward = 1
           ipsrcrouterecv = 0
           ipsrcroutesend = 1
          llsleep_timeout = 3
                  lo_perf = 1
                lowthresh = 90
                 main_if6 = 0
               main_site6 = 0
                 maxnip6q = 20
                   maxttl = 255
                medthresh = 95
               mpr_policy = 1
              multi_homed = 1
                nbc_limit = 262144
            nbc_max_cache = 131072
            nbc_min_cache = 1
         nbc_ofile_hashsz = 12841
                 nbc_pseg = 0
           nbc_pseg_limit = 524288
           ndd_event_name = {all}
        ndd_event_tracing = 0
            ndp_mmaxtries = 3
            ndp_umaxtries = 3
                 ndpqsize = 50
                ndpt_down = 3
                ndpt_keep = 120
               ndpt_probe = 5
           ndpt_reachable = 30
             ndpt_retrans = 1
             net_buf_size = {all}
             net_buf_type = {all}
        net_malloc_police = 0
           nonlocsrcroute = 0
                 nstrpush = 8
              passive_dgd = 0
         pmtu_default_age = 10
              pmtu_expire = 10
 pmtu_rediscover_interval = 30
              psebufcalls = 20
                 psecache = 1
             pseintrstack = 24576
                psetimers = 20
           rfc1122addrchk = 0
                  rfc1323 = 0
                  rfc2414 = 1
             route_expire = 1
          routerevalidate = 0
                 rto_high = 64
               rto_length = 13
                rto_limit = 7
                  rto_low = 1
                     sack = 0
                   sb_max = 1048576
       send_file_duration = 300
              site6_index = 0
               sockthresh = 85
                  sodebug = 0
              sodebug_env = 0
                somaxconn = 1024
                 strctlsz = 1024
                 strmsgsz = 0
                strthresh = 85
               strturncnt = 15
          subnetsarelocal = 1
       tcp_bad_port_limit = 0
                  tcp_ecn = 0
       tcp_ephemeral_high = 65535
        tcp_ephemeral_low = 32768
             tcp_finwait2 = 1200
           tcp_icmpsecure = 0
          tcp_init_window = 0
    tcp_inpcb_hashtab_siz = 24499
              tcp_keepcnt = 8
             tcp_keepidle = 14400
             tcp_keepinit = 150
            tcp_keepintvl = 150
     tcp_limited_transmit = 1
              tcp_low_rto = 0
             tcp_maxburst = 0
              tcp_mssdflt = 1460
          tcp_nagle_limit = 65535
        tcp_nagleoverride = 0
               tcp_ndebug = 100
              tcp_newreno = 1
           tcp_nodelayack = 0
        tcp_pmtu_discover = 1
            tcp_recvspace = 16384
            tcp_sendspace = 16384
            tcp_tcpsecure = 0
             tcp_timewait = 1
                  tcp_ttl = 60
           tcprexmtthresh = 3
                  thewall = 1048576
         timer_wheel_tick = 0
       udp_bad_port_limit = 0
       udp_ephemeral_high = 65535
        udp_ephemeral_low = 32768
    udp_inpcb_hashtab_siz = 24499
        udp_pmtu_discover = 1
            udp_recvspace = 42080
            udp_sendspace = 9216
                  udp_ttl = 30
                 udpcksum = 1
                 use_isno = 1
           use_sndbufpool = 1

或者,您还可以使用 -L 标志,它将提供更加详细的信息。清单 8 仅给出了开头的几行。

清单 8. 使用 -L 标志
root@lpar37p682e[/] > no -L | more
General Network Parameters
--------------------------------------------------------------------------------
NAME                      CUR    DEF    BOOT   MIN    MAX    UNIT           TYPE
     DEPENDENCIES
--------------------------------------------------------------------------------
extendednetstats          0      0      0      0      1      boolean           R
--------------------------------------------------------------------------------
fasttimo                  200    200    200    50     200    millisecond       D
--------------------------------------------------------------------------------
inet_stack_size           16     16     16     1      32K-1  kbyte             R

这里给出了许多的参数。让我们来了解一下其中最值得关注的内容。在旧版本的 AIX 中,thewall 是一个需要更改其缺省值的、重要的可调参数。这个参数定义了网络内核缓冲区的上限。现在,根据 RAM 总量和内核类型,在安装时定义其大小。例如,如果您在 64 位内核中运行 AIX 5.3,那么将该参数设置为实际内存大小的一半。

清单 9. 设置 thewall 参数的大小
root@lpar37p682e[/] > vmstat 1
System configuration: lcpu=2 mem=2048MB ent=0.20

# no -a | grep thewall
                  thewall = 1048576

第 1 部分介绍了 mbufs,但这里我们又要再次提到它,因为它与 thewall 非常相关。请记住,mbufs 用于在内核中为传入和传出的通信存储数据。这正是为什么确定合适的 mbufs 总量极其重要的原因。maxmbuf 可调参数的值用于限制通信系统所使用的内存量。如果该值为 0,那么将使用 thewall 可调参数,并且不能修改其缺省值。更改这个可调参数,是降低 thewall 限制的一种方法。作为缺省值,如果 maxmbuf 为 0,那么无论 thewall 使用什么都将使用这个值。netstat -m 用于检测失败的网络内存请求(请参见清单 10)。

清单 10. 带 -m 选项的 netstat
root@lpar37p682e[/etc/tunables] >             netstat -m

Kernel malloc statistics:

******* CPU 0 *******
By size           inuse     calls failed   delayed    free   hiwat   freed
32                  117       217      0         0      11    5240       0
64                  109      6523      0         1      83    5240       0
128                 975     15951      0        29     785    2620       0
256                 520     67637      0        30    1016    5240       0

Streams mblk statistic failures:
0 high priority mblk failures
0 medium priority mblk failures
0 low priority mblk failures

在这个示例中,没有出现任何内存不足(失败)。

尽管您可以使用 no 实用工具更改许多参数,但大多数参数最好还是不要修改。最重要的参数是那些涉及到 TCP 流工作负载优化的参数。

  • tcp_sendspace——控制内核中用于缓冲应用程序数据的缓冲区空间大小。您可能希望使其超过缺省值,因为如果达到了限制值,发送应用程序则将挂起数据传输,直到 TCP 将数据发送到缓冲区为止。
  • tcp_receivespace——除了控制接收缓冲区所消耗的缓冲区空间总量之外,AIX 还使用这个值来确定其传输窗口的大小。
  • udp_sendspace——对于 UDP,您可以将这个参数设置为不超过 65536 的值,因为每个 IP 数据包的上限为 65536 个字节。
  • udp_resvspace ——这个值应该大于 udp_sendpsace,因为它需要处理每套接字的、尽可能多的同步 UDP 数据包。可以简单地将这个参数设置为 udp_sendspace 值的 10 倍。

现在,进行一些更改。首先,增加 udp_sendspace 的大小(请参见清单 11)。

清单 11. 增加 udp_sendspace 的大小
root@lpar37p682e[/] > no -p -o udp_sendspace=65536
Setting udp_sendspace to 65536
Setting udp_sendspace to 65536 in nextboot file

接下来,将 udp_recsvspace 更改为建议的配置,即 udp_sendspace 的 10 倍。请参见清单 12。

清单 12. 更改 udp_recsvspace 的值
root@lpar37p682e[/] > no -p -o udp_recvspace=655360
Setting udp_recvspace to 655360
Setting udp_recvspace to 655360 in nextboot file
Change to tunable udp_recvspace, will only be effective for future connections
root@lpar37p682e[/] >

请注意,-p 标志可以保存相关的条目,即使是在重新启动之后它也是生效的。它将在 /etc/tunables/nextboot 文件中追加相应的节,如清单 13 所示。

清单 13. 查看 /etc/tunables/nextboot 文件
# tail /etc/tunables/nextboot

no:
        udp_recvspace = "655360"
        udp_sendspace = "65536"
root@lpar37p682e[/etc/tunables] >

对于速度更快的适配器的 tcp 参数,可以将 tcp_sendspace 设置为 tcp_recvspace 值的两倍。例如,您可以使用清单 14 中的设置。

清单 14. tcp_sendspace 的示例设置
tcp_receivespace = 262144
tcp_sendspace= 524288

其他一些的重要工作负载参数包括 rfc1323sb_max

rfc1323 可调参数支持 TCP 窗口缩放选项,该选项允许 TCP 使用较大的窗口大小。开启这个选项,以支持最佳的 TCP 性能。sb_max 可调参数为排队等待单个套接字的套接字缓冲区数目设置上限,而这个上限可以控制缓冲区(排队等待发送者或者接收的套接字)所使用的缓冲区空间总量。这个总量通常应该小于 wall,并且近似于 tcp 或者 udp 发送和接收设置最大值的 4 倍。例如,如果您的 udp_recvspace 是 655360,那么将其加倍到 1310720 是没有问题的。

现在来了解一下 tcp_nodelayack。这个可调参数提示 TCP 发送一个立即确认信息,而不是延迟确认信息。尽管这样做可能在某些环境中增加更多的开销,但是可以在其他的环境中极大地提高网络性能。如果您更改了这个参数却没有提高性能,那么您可以迅速地将它还原为先前的值。

接下来了解一下 ipqmalen。这个可调参数用于控制 IP 输入队列的长度。如果您看到一个溢出计数器(通过使用 netstat -s),那么设置这个队列的最大长度可以帮助修复这种溢出情况。

ARP 的情况又如何呢?当有许多客户端连接到系统时,您可能希望优化 ARP 缓存。您可以使用 netstat 来查看相关的统计信息(请参见清单 15)。

清单 15. 使用带有 -p arp 的 netstat
root@lpar37p682e[/etc/tunables] > netstat -p arp
arp:
        10 packets sent
        0 packets purged
root@lpar37p682e[/etc/tunables] >

如果您发现较高的清除计数,那么可以增大 ARP 表的大小。对于示例表来说,不需要这样做。

下面是与 ARP 相关的 no 参数(请参见清单 16)。

清单 16. 使用 no 参数
root@lpar37p682e[/etc/tunables] > no -a | grep arp
                 arpqsize = 12
               arpt_killc = 20
              arptab_bsiz = 7
                arptab_nb = 149

您可以在系统范围内优化这些缓冲区、或者针对特定的接口优化这些缓冲区。要针对接口来进行优化,可以将 no 可调参数 isno 选项设置为 1,这是 AIX 5.3 的缺省值。

清单 17. 将 no 可调参数 isno 选项设置为 1
root@lpar37p682e[/etc/tunables] > no -a | grep use
                 use_isno = 1

将禁用选项设置为 0,以此作为排序的诊断工具,以便在整个范围内设置值,从而帮助隔离性能问题。在为特定的接口设置这些值时,它们实际上将覆盖 no 视图中的缺省值,这有时会让系统管理员非常困惑。您可以使用 ifconfig 或者 lsattr 来查看特定接口的设置。在这个示例中,使用 ifconfig 查看设置(查看最后一行内容,它引用了先前提到过的一些可调参数)。

清单 18. 使用 ifconfig 查看特定接口的设置
root@lpar37p682e[/etc/tunables] > ifconfig en0
en0: flags=1e080863,480<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST,
                            GROUPRT,64BIT,CHECKSUM_OFFLOAD(ACTIVE),CHAIN>
        inet 172.29.135.44 netmask 0xffffc000 broadcast 172.29.191.255
         tcp_sendspace 262144 tcp_recvspace 262144 rfc1323 1

您可以通过使用 SMIT、chdev 或者 ifconfig 来更改这些选项(针对接口)。请注意,ifconfig 将不会更新对象数据管理器 (ODM),因此在重新启动后,它将还原为先前的值。正因为如此,您应该使用 SMIT 的快速路径 smit tcpip>further configuration>Network interfaces>Change/Show characteristics(请参见图 1)。

图 1. 使用 SMIT 更改接口设置
使用 SMIT 更改接口设置

您可能会感到奇怪,为什么 no 参数不能应用于某些接口。名称解析是可能影响性能的另一个方面。如果您知道希望怎样进行解析(使用 DNS 或者 hosts 文件),那么请确保在 /etc/netsvc.conf 文件中正确地设置了名称解析。查看清单 19 中的文件片段。

清单 19. /et/netsvc.conf 文件片段
# Example:
# aliases = nis, files
#
hosts=local,bind4
root@lpar37p682e[/etc/tunables] >

如果您正使用 DNS,并且不使用任何 hosts 文件,那么请删除 local;或者如果希望使用它作为 DNS 的后备(但将其作为第二个条目),那么也可以保留它。或者,如果您不使用 DNS,那么可以删除 bind,因为只有在使用不存在的名称服务器进行首次解析尝试(如果它是记录中的第一个条目)时,才会降低性能。


总结

本文(优化网络性能的系列文章共分 3 个部分,本文是其中的第 3 部分)介绍了如何监视网络中的网络数据包。在本文中,您使用了 netstat,并且使用了诸如 iptrace 和 tcpdump 之类的跟踪工具深入到了数据包级别。而且,您了解了如何使用 no 实用工具来优化网络。使用这个实用工具,您研究了 tcp 和 udp 工作负载优化,同时还了解了一些其他值得关注的参数。您进行了一些优化更改,并了解了可能希望优化某些设置的方式。您还研究了 ARP 缓存优化,并且看到了如何监视和优化 ARP 统计。您查看了 ISNO,并了解了如何针对接口来优化特定的 no 可调参数。您还了解了名称解析,以及如何通过对解析主机名的方式进行少量的调整,以简单地提高性能。

本系列文章介绍了网络优化的最佳实践,以及如何从对 I/O 子系统的有效监视中获益。还有许多其他的开放源代码和商业网络实用工具(硬件和软件)可供使用,它们可以帮助监视,以及对性能问题进行故障排除。尽管本系列文章的重点是 AIX 中的可用工具,但是也应该研究其它一些可能非常有价值的工具。

参考资料

学习

获得产品和技术

  • 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=294776
ArticleTitle=AIX 5L 网络性能优化 : 第 3 部分
publish-date=03132008