본문 바로가기

IBM/AIX

TCP및UDP성능조정

조정 가능한 통신 매개변수에 가장 적합한 설정은 주요 시스템 및 응용프로그램의 통신 입출력 특성 뿐만 아니라 LAN 유형에 따라서도 달라집니다. 이 절은 AIX의 통신 조정 전역 원리를 설명합니다.

네트워크 설치 및 작업 부하 검증 및 조정을 위해 다음 개요를 사용하십시오.

  • 어댑터가 적절한 슬롯에 있는지 확인하십시오.
  • 시스템 펌웨어가 적절한 릴리스 레벨에 있는지 확인하십시오.
  • 어댑터 및 네트워크 스위치가 적절한 속도 및 양방향 (전송) 모드인지 확인하십시오.
  • 올바른 MTU 크기가 선택되었는지 확인하십시오.
  • 네트워크 유형, 속도 및 프로토콜의 AIX 조정 기능을 조정하십시오.
  • 기타 고려사항:

    • 어댑터 오프로드 옵션
      • TCP 체크섬 오프로드
      • TCP 대형 전송 또는 재단편화
    • 인터럽트 연합
    • 입력 스레드(Dog 스레드)

어댑터 배치

네트워크 성능은 어댑터 유형 및 기계의 어댑터 배치와 같이 사용자가 선택한 하드웨어에 따라 다릅니다. 최적의 성능을 보장하려면, 각 어댑터에 가장 적합한 입출력 버스 슬롯에 네트워크 어댑터를 위치시켜야 합니다.

다음 항목을 고려하십시오.

  • PCI-X 대 PCI 어댑터
  • 64비트 대 32비트 어댑터
  • 지원되는 버스-슬롯 클럭 속도(33MHz, 50/66MHz 또는 133MHz)

어댑터의 대역폭이나 데이터 비율이 높을수록, 슬롯 배치가 더 중요해집니다. 예를 들어, PCI-X 어댑터는 보통 버스에서 133MHz 클럭 속도로 실행할 때 PCI-X 슬롯에서 사용 시 최적 수행됩니다. PCI 슬롯에 PCI-X 어댑터를 배치시킬 수 있지만, 보통 33MHz 또는 66MHz로 버스에서 더 느리게 실행하며, 일부 작업 부하에서는 수행되지 않습니다.

유사하게 64비트 어댑터는 64비트 슬롯에 설치 시 최적으로 작업합니다. 32비트 슬롯에 64비트 어댑터를 배치시킬 수 있지만, 최적 비율로 수행하지 않습니다. 점보 프레임 모드에서 기가비트 이더넷과 같은 대형 MTU 어댑터는 64비트 슬롯에서 훨씬 잘 수행합니다.

잠재적으로 성능에 영향을 미치는 기타 항목은 버스 또는 PHB(PCI 호스트 브릿지)당 어댑터 수입니다. 시스템 모델 및 어댑터 유형에 따라, 고속 어댑터의 수는 PHB당 제한될 수 있습니다. 배치 지침에서는 어댑터가 다양한 PCI 버스에 펼쳐져 있으며 PCI 버스당 어댑터 수를 제한할 수 있음을 확인합니다. 기계 모델 및 어댑터 유형별 자세한 정보는 PCI 어댑터 배치 참조서를 참고하십시오.

다음 표는 IBM® pSeries® eServer에서 사용 가능한 PCI 및 PCI-X 슬롯의 유형을 나열합니다.

슬롯 유형이 주제에서 사용되는 코드
PCI 32비트 33MHzA
PCI 32비트 50/66MHzB
PCI 64비트 33MHzC
PCI 64비트 50/66MHzD
PCI-X 32비트 33MHzE
PCI-X 32비트 66MHzF
PCI-X 64비트 33MHzG
PCI-X 64비트 66MHzH
PCI-X 64비트 133MHzI

새로 출시된 IBM pSeries 서버에만 PCI-X 슬롯이 있습니다. PCI-X 슬롯은 PCI 어댑터와 백워드 호환 가능합니다.

다음 표에서는 일반 어댑터 및 제안된 슬롯 유형의 예를 표시합니다.

어댑터 유형선호하는 슬롯 유형(최하위 우선순위에서 최상위 우선순위까지)
10/100 Mbps Ethernet PCI Adapter II(10/100 Ethernet), FC 4962A-I
IBM PCI 155Mbps ATM 어댑터, FC 4953 또는 4957D, H 및 I
IBM PCI 622Mbs MMF ATM 어댑터, FC 2946D, G, H 및 I
Gigabit Ethernet-SX PCI Adapter , FC 2969D, G, H 및 I
IBM 10/100/1000 Base-T Ethernet PCI Adapter, FC 2975D, G, H 및 I
Gigabit Ethernet-SX PCI-X Adapter(Gigabit Ethernet fiber), FC 5700G, H 및 I
10/100/1000 Base-TX PCI-X Adapter(Gigabit Ethernet), FC 5701G, H 및 I
2-Port Gigabit Ethernet-SX PCI-X Adapter(Gigabit Ethernet fiber), FC 5707G, H 및 I
2-Port 10/100/1000 Base-TX PCI-X Adapter(Gigabit Ethernet), FC 5706G, H 및 I

lsslot -c pci 명령은 다음 정보를 제공합니다.

  • 슬롯의 PCI 유형
  • 버스 속도
  • 어떤 장치가 어떤 슬롯에 있는지 표시합니다

다음은 6개의 내부 슬롯이 있는 2방식 p615 시스템에서의 lsslot -c pci 명령 예입니다.

          # lsslot -c pci
          # Slot      Description                         Device(s)
          U0.1-P1-I1  PCI-X capable, 64 bit, 133 MHz slot  fcs0
          U0.1-P1-I2  PCI-X capable, 32 bit, 66 MHz slot   Empty
          U0.1-P1-I3  PCI-X capable, 32 bit, 66 MHz slot   Empty
          U0.1-P1-I4  PCI-X capable, 64 bit, 133 MHz slot  fcs1
          U0.1-P1-I5  PCI-X capable, 64 bit, 133 MHz slot  ent0
          U0.1-P1-I6  PCI-X capable, 64 bit, 133 MHz slot  ent2
          
          

Gigabit Ethernet 어댑터의 경우, entstat -d en[interface-number] 명령 출력이나 netstat -v 명령 출력의 끝에 있는 어댑터 고유의 통계는 어댑터의 PCI 버스 유형 및 버스 속도를 표시합니다. 다음은netstat -v 명령의 출력 예입니다.

          # netstat -v
          
          10/100/1000 Base-TX PCI-X Adapter (14106902) Specific Statistics:
          --------------------------------------------------------------------
          Link Status: Up
          Media Speed Selected: Auto negotiation
          Media Speed Running: 1000 Mbps Full Duplex
          PCI Mode: PCI-X (100-133)
          PCI Bus Width: 64 bit
          
          

시스템 펌웨어

시스템 펌웨어는 시스템의 다양한 입출력 및 PCI 버스에서 입출력 칩의 옵션을 구성하는 것은 물론, 각 PCI 어댑터에서 여러 키 매개변수를 구성하는 데 관여합니다. 어떤 경우, 펌웨어는 PCI Latency Timer 및 Cache Line Size와 같은 특정 어댑터에 고유한 매개변수를 설정하며, PCI-X 어댑터의 경우 MMRBC(Maximum Memory Read Byte Count) 값을 설정합니다. 이 매개변수는 어댑터에서 좋은 성능을 획득하는 키입니다. 다운 레벨 펌웨어로 인해 이 매개변수가 적절하게 설정되지 않은 경우, 소프트웨어 조정만으로 최적 성능을 성취하는 것은 불가능합니다. 새 어댑터를 시스템에 추가하기 전에 이전 시스템에서 펌웨어를 갱신하십시오.

펌웨어 릴리스 레벨 정보 및 펌웨어 갱신사항은 다음 링크에서 다운로드될 수 있습니다.https://techsupport.services.ibm.com/server/mdownload//download.html

다음 예제에서와 같이, lscfg -vp|grep -p " ROM" 명령을 사용하여 플랫폼 및 시스템 펌웨어 레벨 모두를 볼 수 있습니다.

          lscfg -vp|grep -p " ROM"
          
               ...lines omitted...
           
               System Firmware:
                  ROM Level (alterable).......M2P030828
          Version.....................RS6K
                  System Info Specific.(YL)...U0.1-P1/Y1
                Physical Location: U0.1-P1/Y1
          
                SPCN firmware:
                  ROM Level (alterable).......0000CMD02252
          Version.....................RS6K
                  System Info Specific.(YL)...U0.1-P1/Y3
                Physical Location: U0.1-P1/Y3
          
                SPCN firmware:
                  ROM Level (alterable).......0000CMD02252
          Version.....................RS6K
                  System Info Specific.(YL)...U0.2-P1/Y3
                Physical Location: U0.2-P1/Y3
          
                Platform Firmware:
                  ROM Level (alterable).......MM030829
          Version.....................RS6K
                  System Info Specific.(YL)...U0.1-P1/Y2
                Physical Location: U0.1-P1/Y2
          
          

어댑터 성능 지침

사용자 페이로드 데이터 비율은 TCP 연결에서 데이터를 스트림하는 응용프로그램의 소켓 기반 프로그램으로 얻을 수 있습니다. 예를 들어, send( ) 호출을 수행하는 하나의 프로그램과 recv( ) 호출을 수행하는 수신기. 비율은 프레임간 갭 및 서문 비트, 데이터 링크 헤더 및 TCP/IP 헤더와 같이 네트워크 비트 전송률, MTU 크기(프레임 크기), 물리적 레벨 오버헤드의 함수이며 기가헤르쯔 속도의 CPU를 가정합니다. 이 비율은 단일 LAN에서 최적인 숫자이며, 라우터나 추가적인 네트워크 홉 또는 원격 링크를 통해 진행하는 경우 더 낮을 수 있습니다.

단일 방향(단방향) TCP 스트리밍 비율은 메모리 대 메모리 테스트에서 기계 A에서 기계 B로의 데이터 전송 FTP와 같은 작업 부하에서 볼 수 있는 비율입니다. 네트워크 성능 분석에서 ftp 명령을 참조하십시오. TCP 응답은 데이터 패킷이 플로우 중인 동일한 와이어에 대해 경합하지 않고 다시 플로우할 수 있으므로 전이중 미디어는 반이중보다 약간 더 낫게 수행합니다.

다음 표는 가능한 최대 네트워크 페이로드 속도 및 단방향(simplex) TCP 스트림 비율을 나열합니다.

주:
다음 표에서, 원시 비트 전송률 값은 실제 미디어 비트 전송률이며 프레임간 갭, 서문 비트, 셀 오버헤드(ATM의 경우), 데이터 링크 헤더 및 트레일러와 같은 실제 미디어 오버헤드를 반영하지 않습니다. 이것은 모두 와이어의 효율적인 사용 가능한 비트 전송률을 감축합니다.

네트워크 유형원시 비트 전송률(Mbits)페이로드 비율(Mbits)페이로드 비율(MB)
10Mbit 이더넷, 반이중1060.7
10Mbit 이더넷, 전이중10(20Mbit 전이중)9.481.13
100Mbit 이더넷, 반이중100627.3
100Mbit 이더넷, 전이중100(200Mbit 전이중)94.811.3
1000Mbit 이더넷, 전이중, MTU 15001000(2000Mbit 전이중)948113.0
1000Mbit 이더넷, 전이중, MTU 90001000(2000Mbit 전이중)989117.9
FDDI, MTU 4352(디폴트)1009211.0
ATM 155, MTU 150015512514.9
ATM 155, MTU 9180(디폴트)15513315.9
ATM 622, MTU 150062236443.4
ATM 622, MTU 9180(디폴트)62253463.6

두 방향(양방향) TCP 스트림 작업 부하는 양쪽 방향으로 데이터 스트림합니다. 예를 들어, 기계 A에서 기계 B로 ftp 명령을 실행하고 다른 ftp 명령 인스턴스는 기계 B에서 기계 A로 실행합니다. 이러한 유형의 작업 부하는 동시에 데이터를 송수신할 수 있는 전이중 미디어의 이점을 갖습니다. 반이중 모드에서 FDDI 또는 이더넷과 같은 일부 미디어는 동시에 데이터를 송수신할 수 없으며 양방향 작업 부하를 실행할 때 잘 수행되지 않습니다. 이제 수신기에서 다시 오는 TCP 응답 패킷은 동일한 방향으로 플로우하는 데이터 패킷과 경합하므로 양방향 작업 부하는 단방향 작업 부하 비율의 2배로 스케일 조정되지 않습니다. 다음 표에서는 두 방향(양방향) TCP 스트림 비율을 나열합니다.

네트워크 유형원시 비트 전송률(Mbits)페이로드 비율(Mbits)페이로드 비율(MB)
10Mbit 이더넷, 반이중105.80.7
10Mbit 이더넷, 전이중10(20Mbit 전이중)182.2
100Mbit 이더넷, 반이중100587.0
100Mbit 이더넷, 전이중100(200Mbit 전이중)17721.1
1000Mbit 이더넷, 전이중, MTU 15001000(2000Mbit 전이중)1470(1660 최대)175(198 최대)
1000Mbit 이더넷, 전이중, MTU 90001000(2000Mbit 전이중)1680(1938 최대)200(231 최대)
FDDI, MTU 4352(디폴트)1009711.6
ATM 155, MTU 1500155(310Mbit 전이중)18021.5
ATM 155, MTU 9180(디폴트)155(310Mbit 전이중)23628.2
ATM 622, MTU 1500622(1244Mbit 전이중)47656.7
ATM 622, MTU 9180(디폴트)622(1244Mbit 전이중)884105

주:
  1. 최대 수는 각 방향에서 실행하는 복수 TCP 세션으로 최적의 처리량을 표시합니다. 기타 비율은 단일 TCP 세션용입니다.
  2. 1000Mbit 이더넷(Gigabit Ethernet) 양방향 비율은 PCI-X 슬롯에서 PCI-X 어댑터용입니다. 성능은 PCI 슬롯의 PCI-X 어댑터나 PCI 어댑터의 양방향 작업 부하에서 더 느립니다.
  3. 데이터 비율은 IPV4를 사용하는 TCP/IP용입니다. 4096 이상의 MTU 크기를 갖는 어댑터는RFC1323 옵션이 사용 가능합니다.

어댑터 및 장치 설정값

여러 어댑터나 장치 옵션은 적절한 조작 및 최적 성능 모두에 중요합니다. AIX 장치는 보통 대부분의 설치에 가장 잘 작업해야 하는 디폴트 값을 갖습니다. 그러므로 이 장치 값은 보통 변경을 필요로 하지 않습니다. 그러나 일부 회사는 특정 네트워크 설정값을 필요로 하는 정책을 가지며 일부 네트워크 장비는 이 디폴트값 중 일부를 변경하도록 요구할 수 있습니다.

어댑터 속도 및 양방향 모드 설정값

다음 모드의 이더넷 어댑터를 구성할 수 있습니다.

  • 10_Half_Duplex
  • 10_Full_Duplex
  • 100_Half_Duplex
  • 100_Full_Duplex
  • Auto_Negotiation

동일한 방식으로 어댑터 및 케이블의 다른 종료점 모두를 구성하는 것은 중요합니다(보통 이더넷 스위치 없이 지점간 구성설정에서 실행 중인 경우 이더넷 스위치나 다른 어댑터). AIX의 디폴트 설정은 가능한 가장 높은 데이터 비율을 위한 속도 및 양방향 설정을 조정하는 Auto_Negotiation입니다. Auto_Negotiation 모드가 제대로 기능하려면, 다른 종료점(스위치)도 Auto_Negotiation 모드로 구성해야 합니다.

하나의 종료점이 수동으로 특정 속도 및 양방향 모드로 설정된 경우, 다른 종료점도 수동으로 동일한 속도 및 양방향 모드로 설정되어야 합니다. 한 끝을 수동으로 설정하고 다른 끝을 Auto_Negotiation 모드로 설정하면 보통 링크 수행을 느리게 하는 문제점을 낳습니다.

대부분의 이더넷 스위치의 디폴트 설정대로, 가능할 때 최적으로 Auto_Negotiation 모드를 사용하는 것이 최적입니다. 그러나 일부 10/100 이더넷 스위치는 양방향 모드의 Auto_Negotiation 모드를 지원하지 않습니다. 이러한 유형의 스위치는 원하는 속도 및 양방향 모드로 종료점 둘 다를 수동으로 설정하도록 요구합니다.

포트 설정값을 표시하고 이더넷 스위치 내에서 포트 속도 및 양방향 모드 설정값을 변경하려면 각 이더넷에 고유한 명령을 사용해야 합니다. 이 명령은 스위치 벤더 문서를 참조하십시오.

AIX의 경우, 어댑터 설정값을 변경하기 위해 smitty devices 명령을 사용할 수 있습니다. netstat -v 명령 또는 entstat -d enX 명령을 사용할 수 있으며, 여기서 X는 설정값 및 조정된 모드를 표시하기 위한 이더넷 인터페이스 번호입니다. 다음은 entstat -d en3 명령 출력의 예제 부분입니다.

          10/100/1000 Base-TX PCI-X Adapter (14106902) Specific Statistics:
          --------------------------------------------------------------------
          Link Status: Up
          Media Speed Selected: Auto negotiation
          Media Speed Running: 1000 Mbps Full Duplex
          
          

어댑터 MTU 설정

동일한 물리적 네트워크의 모든 장치 또는 VLAN 태그 사용 시, 논리적 네트워크는 동일한 MTU(Media Transmission Unit) 크기를 가져야 합니다. 이것은 와이어에서 전송될 수 있는 프레임(또는 패킷)의 최대 크기입니다.

다양한 네트워크 어댑터는 다른 MTU 크기를 지원하므로, 네트워크의 모든 장치에서 동일한 MTU 크기를 사용하십시오. 예를 들어, MTU 크기가 9000 바이트인 점보 프레임 모드를 사용하는 기가비트 이더넷 어댑터를 가질 수 없지만, 네트워크의 다른 어댑터는 디폴트 MTU 크기인 1500 바이트를 사용합니다. 10/100 이더넷은 점보 프레임 모드를 지원하지 않으므로, 이 기가비트 이더넷 옵션과 호환 가능하지 않습니다. 또한 점보 프레임이 이더넷 스위치에서 지원되는 경우 점보 프레임을 사용하도록 이더넷 스위치를 구성해야 합니다.

네트워크 설정에서 이전에 어댑터의 MTU 크기를 선택하는 것은 중요하므로 모든 장치 및 스위치를 적절하게 구성할 수 있습니다. 또한 많은 AIX 조정 옵션은 선택된 MTU 크기에 따라 다릅니다.

MTU 크기 성능 영향

네트워크의 MTU 크기는 성능에 많은 영향을 미칠 수 있습니다. 대형 MTU 크기의 사용은 운영 시스템이 더 큰 크기의 더 적은 패킷을 전송하여 동일한 네트워크 처리량에 도달하게 합니다. 패킷을 더 크게하면 운영 시스템에서 필요로하는 처리를 줄이며, 작업 부하가 대형 메시지를 전송하도록 허용한다고 가정합니다. 작업 부하가 유일하게 전송하는 작은 메시지인 경우, 더 큰 MTU 크기는 도움이 되지 않습니다.

가능하면, 어댑터와 네트워크가 지원하는 가장 큰 MTU 크기를 사용하십시오. 예를 들어, ATM에서 디폴트 MTU 크기인 9180은 1500바이트인 MTU 크기를 사용하는 것보다 훨씬 더 효과적입니다(보통 LAN 에뮬레이션에서 사용됨). 기가비트 이더넷 사용 시, 네트워크의 모든 기계가 기가비트 이더넷 어댑터를 가지며 네트워크에는 10/100 어댑터가 없는 경우, 점보 프레임 모드를 사용하는 것이 최적입니다. 예를 들어, 컴퓨터 랩에서 서버간 연결은 보통 점보 프레임을 사용하여 수행될 수 있습니다.

기가비트 이더넷에서 점보 프레임 모드 선택

장치 옵션으로 점보 프레임 모드를 선택해야 합니다. ifconfig 명령으로 MTU 크기를 변경하려고 시도하는 것은 기능하지 않습니다. 다음 단계를 사용하여 어댑터 설정을 표시하려면 SMIT를 사용하십시오.

  1. 장치를 선택하십시오.
  2. 통신을 선택하십시오.
  3. 어댑터 유형을 선택하십시오.
  4. 이더넷 어댑터의 특성 변경/표시를 선택하십시오.
  5. 점보 프레임 전송 옵션을 아니오에서 로 변경하십시오.

SMIT 화면은 다음과 유사합니다.

                                            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                                    ent0
            Description                                         10/100/1000 Base-TX PCI-X Adapter (14106902)
            Status                                              Available
            Location                                            1H-08
            Receive descriptor queue size                      [1024]                                                      +#
            Transmit descriptor queue size                     [512]                                                       +#
            Software transmit queue size                       [8192]                                                      +#
            Transmit jumbo frames                               yes                                                         +
            Enable hardware transmit 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
          Esc+5=Reset                   Esc+6=Command                 Esc+7=Edit                    Esc+8=Image
          Esc+9=Shell                   Esc+0=Exit                    Enter=Do
          

명령 없이 네트워크 성능 조정

네트워크 옵션이나 no 명령은 전역 네트워크 옵션을 표시, 변경 및 관리합니다. 이 매개변수 중 일부를 조정하는 대체 메소드는ISNO(Interface-Specific Network Options) 섹션에서 설명됩니다.

다음 no 명령 옵션은 조정 매개변수를 변경하기 위해 사용됩니다.

옵션
정의
-a
모든 조정 기능 및 현재 값을 인쇄합니다.
-d [tunable]
지정된 조정 기능을 디폴트 값으로 다시 설정합니다.
-D
모든 옵션을 다시 디폴트 값으로 설정합니다.
-o tunable=[New Value]
값을 표시하거나 지정된 조정 기능을 지정된 새로운 값으로 설정합니다.
-h [tunable]
지정된 조정 기능 매개변수가 있는 경우 이에 대한 도움말을 표시합니다. 그렇지 않은 경우, no명령 사용문을 표시합니다.
-r
nextboot 파일에서 유형 재부트가 영구적이 되게 하는 조정 기능을 변경하려면 -o 옵션과 함께 사용됩니다.
-p
nextboot 파일에서 동적 조정 기능이 영구적이 되게 하려면 -o 옵션과 함께 사용됩니다.
-L [tunable]
행당 하나씩 또는 모든 조정 기능의 특성을 나열하려면 -o 옵션과 함께 사용됩니다.

다음은 no 명령의 예입니다.

          NAME                      CUR    DEF    BOOT   MIN    MAX    UNIT           TYPE     DEPENDENCIES
          
          -------------------------------------------------------------------------------------------------
          
          General Network Parameters
          
          -------------------------------------------------------------------------------------------------
          sockthresh                85     85     85     0      100    %_of_thewall      D
          -------------------------------------------------------------------------------------------------
          fasttimo                  200    200    200    50     200    millisecond       D
          -------------------------------------------------------------------------------------------------
          inet_stack_size           16     16     16     1             kbyte             R
          -------------------------------------------------------------------------------------------------
          ...lines omitted....
          
          
          여기서,
          CUR = current value
          
          DEF = default value
          
          BOOT = reboot value
          
          MIN = minimal value
          
          MAX = maximum value
          
          UNIT = tunable unit of measure
          
          TYPE = parameter type: D (for Dynamic), S (for Static), R for Reboot),B (for Bosboot), M (for Mount),
                                 I (for Incremental) and C (for Connect)
          
          DEPENDENCIES = list of dependent tunable parameters, one per line
          

일부 네트워크 속성은 언제든지 변경할 수 있는 실시간 속성입니다. netinet 커널 확장을 로드하기 전에 설정해야 하는 로드시간 속성도 있습니다.

주:
no 명령을 사용하여 매개변수를 변경할 때, 동적 매개변수는 메모리에서 변경되며 변경 내용은 다음 번 시스템 부트 때까지만 유효합니다. 여기에서 모든 매개변수는 재부트 설정값으로 설정됩니다. 동적 매개변수 변경사항이 영구적이게 하려면 no 명령의 -r또는 -p 옵션을 사용하여 nextboot 파일에서 옵션을 설정하십시오. 재부트 매개변수 옵션은 시스템 재부트가 유효하도록 요구합니다.

no 명령에 대한 자세한 정보는AIX 5L 버전 5.3 명령 참조서, 제4권에서 no 명령을 참조하십시오.

ISNO(Interface-Specific Network Options)

ISNO(Interface-Specific Network Options)는 최적 성능을 위해 사용자가 IP 네트워크 인터페이스를 조정할 수 있도록 허용합니다. 각 인터페이스에 대해 설정된 값은 no 명령을 사용해 설정한 시스템 전체 기반의 값보다 우선합니다. 이 기능은 no 명령 use_isno옵션을 사용하여 전체 시스템에 사용(디폴트 설정)하거나 사용할 수 없게 합니다. 시스템 관리자가 성능 문제점만 분류할 필요가 있는 경우에 발생할 수 있는 조정 오류를 제거하기 위한 진단 도구로서 이 단일 지점 ISNO 사용 불가능 옵션을 제공합니다.

프로그래머와 성능 분석가는 TCP 연결이 이루어진 후에만 소켓에 ISNO 값이 표시된다는 것(즉, 연결 전에는 getsockopt() 시스템 호출로 값을 읽어올 수 없음)에 유의하십시오. 이 소켓이 실제로 사용하는 특정 네트워크 인터페이스는 연결이 완료될 때까지 알 수 없으므로 소켓은 no 명령에 의한 시스템 디폴트 값을 반영합니다. TCP 연결을 승인하고 네트워크 인터페이스가 알려진 후에, ISNO 값을 소켓으로 넣습니다.

다음 매개변수가 각 지원되는 네트워크 인터페이스에 추가되었으며 TCP(UDP가 아님) 연결에만 유효합니다.

  • rfc1323
  • tcp_nodelay
  • tcp_sendspace
  • tcp_recvspace
  • tcp_mssdflt

고유 인터페이스에 설정되는 값은 시스템에 설정된 no 옵션 값보다 우선합니다. 이 매개변수는 SP™ 스위치의 css# IP 인터페이스를 제외한 모든 메인스트림 TCP/IP 인터페이스(토큰 링, FDDI, 10/100 이더넷 및 기가비트 이더넷)에 사용할 수 있습니다. 단순한 작업 환경에서 SP 스위치 사용자는 시스템 전반에 미치는 no 명령을 사용하여 스위치에 적합한 조정 옵션을 설정한 다음, ISNO를 사용하여 기타 시스템 인터페이스에 필요한 값을 설정할 수 있습니다.

이들 옵션은 네트워크 어댑터(ent0 또는 tok0)가 아닌 TCP/IP 인터페이스(en0 또는 tr0 등)에 대해 설정됩니다.

AIX는 MTU 1500 및 점보 프레임 모드(MTU 9000) 둘 다에 대해 기가비트 이더넷 인터페이스의 디폴트 값을 설정합니다. SMIT tcpip 화면을 통해 인터페이스를 구성설정하는 한, ISNO 옵션은 좋은 성능을 제공하는 디폴트 값으로 설정되어야 합니다.

10/100 이더넷 및 토큰 링 어댑터의 경우, ISNO 디폴트값은 시스템 전역 no 디폴트값으로 잘 기능하는 것처럼 시스템으로 설정되지 않습니다. 그러나 세트 디폴트값을 재정의하는 것이 필요한 경우 ISNO 속성을 설정할 수 있습니다.

다음 예제는 MTU 1500 모드에서 GigE의 tcp_sendspace  tcp_recvspace 디폴트 ISNO 값을 표시합니다.

          # ifconfig en0
          en0: flags=5e080863,c0<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST,GROUPRT,64BIT,CHECKSUM_OFFLOAD,PSEG,CHAIN>
                  inet 10.0.0.1 netmask 0xffffff00 broadcast 192.0.0.255
                  tcp_sendspace 131072 tcp_recvspace 65536
          
          

점보 프레임 모드의 경우, tcp_sendspace, tcp_recvspace  rfc1323의 디폴트 ISNO 값은 다음과 같이 설정됩니다.

           # ifconfig en0
          en0: flags=5e080863,c0<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST,GROUPRT,64BIT,CHECKSUM_OFFLOAD,PSEG,CHAIN>
                 inet 192.0.0.1 netmask 0xffffff00 broadcast 192.0.0.255
                 tcp_sendspace 262144 tcp_recvspace 131072 rfc1323 1
          
          

다음 메소드로 ISNO 옵션을 설정할 수 있습니다.

  • SMIT
  • chdev 명령
  • ifconfig 명령

SMIT 또는 chdev 명령을 사용하면 디스크에서 ODM 데이터베이스의 값을 변경하여 영구적이 되게 합니다. ifconfig 명령만이 메모리에서 값을 변경하므로, 다음 재부트 시 CDM에 저장된 이전 값으로 다시 돌아갑니다.

SMIT로 ISNO 옵션 수정

다음과 같이 ISNO 옵션을 변경할 수 있습니다.

          # smitty tcpip
          
          
  1. 상세 구성설정 옵션을 선택하십시오.
  2. 네트워크 인터페이스 옵션을 선택하십시오.
  3. 네트워크 인터페이스 선택을 선택하십시오.
  4. 네트워크 인터페이스의 특성 변경/표시를 선택하십시오.
  5. 사용자 커서로 인터페이스를 선택하십시오. 예를 들어, en0

그런 다음, 다음 화면이 표시됩니다.

          Change / Show a Standard Ethernet Interface
          
          Type or select values in entry fields.
          Press Enter AFTER making all desired changes.
          
                                                               [Entry Fields]
            Network Interface Name                              en0
            INTERNET ADDRESS (dotted decimal)                  [192.0.0.1]
            Network MASK (hexadecimal or dotted decimal)       [255.255.255.0]
            Current STATE                                       up                          +
            Use Address Resolution Protocol (ARP)?              yes                         +
            BROADCAST ADDRESS (dotted decimal)                 []
            Interface Specific Network Options
              ('NULL' will unset the option)
              rfc1323                                          []
              tcp_mssdflt                                      []
              tcp_nodelay                                      []
              tcp_recvspace                                    []
              tcp_sendspace                                    []
          
          
          F1=Help                       F2=Refresh                    F3=Cancel                     F4=List
          Esc+5=Reset                   Esc+6=Command                 Esc+7=Edit                    Esc+8=Image
          Esc+9=Shell                   Esc+0=Exit                    Enter=Do
          
          

내부적으로 설정되었다고 할지라도 ISNO 시스템 디폴트값이 표시되지 않음에 유의하십시오. 이 예제에서, tcp_sendspace의 디폴트 값을 재정의하고 65536으로 더 낮추십시오.

smitty tcpip로 인터페이스 백업을 가져오고 최소 구성설정 및 시작을 선택하십시오. 그런 다음 en0을 선택하고, 인터페이스가 처음 설정되었을 때 설정된 디폴트 값을 얻으십시오.

ifconfig 명령을 사용하여 ISNO 옵션을 표시하는 경우, tcp_sendspace 속성의 값이 이제 65536으로 설정됨을 볼 수 있습니다. 다음은 예입니다.

          # ifconfig en0
          en0: flags=5e080863,c0<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST,GROUPRT,64BIT,CHECKSUM_OFFLOAD,PSEG,CHAIN>
                    inet 192.0.0.1 netmask 0xffffff00 broadcast 192.0.0.255
                    tcp_sendspace 65536 tcp_recvspace 65536
          

lsattr 명령 출력에서는 이 속성의 시스템 디폴트가 재정의되었음을 표시합니다.

          # lsattr -E -l 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       192.0.0.1     Internet Address                           True
          netaddr6                    IPv6 Internet Address                      True
          netmask       255.255.255.0 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         up            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 65536         Set Socket Buffer Space for Sending        True
          
          

chdev 및 ifconfig 명령으로 ISNO 옵션 수정

시스템과 인터페이스 지원을 우선 검증한 뒤에 새로운 값을 설정하고 확인하기 위해 다음 명령을 사용할 수 있습니다.

  • 다음 명령으로 use_isno 옵션이 사용 가능한 상태인지 확인하십시오.
              # no -a | grep isno
              use_isno = 1
              
  • 다음 lsattr -El 명령을 사용하여 다섯 개의 새 ISNO 매개변수를 지원하는 인터페이스인지 확인하십시오.
              # lsattr -E -l en0 -H
              attribute     value description                                user_settable
              :
              rfc1323             Enable/Disable TCP RFC 1323 Window Scaling 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
              
              
  • ifconfig 또는 chdev 명령을 사용하여 인터페이스 고유 값을 설정하십시오. ifconfig 명령이 값을 임시로 설정합니다(테스트용으로 사용하기 적합함). chdev 명령은 ODM을 변경하므로 시스템이 재부트된 후 사용자 조정 값이 리턴됩니다.

    예를 들어 tcp_recvspace  tcp_sendspace를 64KB로 설정하고 tcp_nodelay 옵션을 사용할 경우, 다음 메소드 중 하나를 사용하십시오.

              # ifconfig en0 tcp_recvspace 65536 tcp_sendspace 65536 tcp_nodelay 1
              

    또는

              # chdev -l en0 -a tcp_recvspace=65536 -a tcp_sendspace=65536 -a tcp_nodelay=1
              
  • ifconfig 또는 lsattr 명령을 사용하여 설정값을 검증하십시오.
              # ifconfig en0
              en0: flags=5e080863,c0<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST,GROUPRT,64BIT,CHECKSUM_OFFLOAD,PSEG,CHAIN>
                      inet 9.19.161.100 netmask 0xffffff00 broadcast 9.19.161.255
                      tcp_sendspace 65536 tcp_recvspace 65536 tcp_nodelay 1
              

    또는

              # lsattr -El en0
              rfc1323             Enable/Disable TCP RFC 1323 Window Scaling True
              tcp_mssdflt         Set TCP Maximum Segment Size               True
              tcp_nodelay   1     Enable/Disable TCP_NODELAY Option          True
              tcp_recvspace 65536 Set Socket Buffer Space for Receiving      True
              tcp_sendspace 65536 Set Socket Buffer Space for Sending        True
              
              
              

TCP 작업 부하 조정

TCP 성능에 영향을 미칠 수 있는 여러 AIX 조정 값이 있습니다. 여러 응용프로그램은 ftp  rcp 명령을 포함하여 신뢰할만한 TCP(Transport Control Protocol)를 사용합니다.

주:
no -o 명령에서는 TCP/IP 연결에 영향을 미치는 조정 옵션 변경 시 변경사항이 작성된 후에 설정된 연결에만 변경사항이 적용됨을 경고합니다. 그리고 no -o 명령은 inetd 디먼이 새 연결을 청취 중인 프로세스에 영향을 미칠 수 있는 옵션이 변경될 때 inetd디먼을 재시작합니다.

TCP 스트림 및 작업 부하 조정

스트림 작업 부하는 하나의 종료점에서 다른 종료점으로 많은 양의 데이터를 이동시킵니다. 스트림 작업 부하의 예는 파일 전송, 백업 또는 복원 작업 부하 또는 대량의 데이터 전송입니다. 이 작업 부하에서 주요 관심 메트릭은 대역폭이지만 단말간 대기를 볼 수도 있습니다.

스트림 응용프로그램의 TCP 성능에 영향을 미치는 1차 조정 기능은 다음과 같습니다.

  • tcp_recvspace
  • tcp_sendspace
  • rfc1323
  • MTU path discovery
  • tcp_nodelayack
  • sb_max
  • 체크섬 오프로드 및 TCP 대량 전송과 같은 어댑터 옵션

다음 표에서는 어댑터 유형과 MTU 크기에 따라 최적 성능을 얻기 위한 조정 값의 제안 크기를 표시합니다.

장치속도MTU 크기tcp_sendspacetcp_recvspacesb_max1rfc1323
토큰 링4 또는 16Mbit14921638416384327680
이더넷10Mbit15001638416384327680
이더넷100Mbit15001638416384655360
이더넷기가비트1500131072655361310720
이더넷기가비트9000131072655352621440
이더넷기가비트900026214413107225242881
ATM155Mbit150016384163841310720
ATM155Mbit9180655356553531310720
ATM155Mbit65527655360655360413107201
FDDI100Mbit43524505645056900120
파이버 채널2기가비트6528065536065536013107201

주:
  1. sb_max 조정 기능을 위해 디폴트 값 1048576을 사용하는 것이 좋습니다. 테이블에 표시된 값은sb_max 조정 기능의 승인 가능한 최소 값입니다.
  2. 기가비트 이더넷의 점보 프레임에서 rfc1323이 사용 가능할 때 이 옵션 사용 시 성능은 약간 더 향상됩니다.
  3. TCP 송신 및과 수신 공간의 일정한 조합에서는 처리량이 매우 낮아집니다(1Mbit 이하). 이 문제점을 피하기 위해,tcp_sendspace 조정 기능을 MTU 크기의 최소 3배 또는 수신기의tcp_recvspace 값 이상으로 설정하십시오.
  4. TCP는 창 크기 용도로 16비트만 사용합니다. 그리고 최대 창 크기 65536바이트로 변환합니다. 큰 MTU 크기(예를 들어 32K 또는 64K)를 사용하는 어댑터에서는 TCP 스트림 성능이 매우 떨어질 수 있습니다. 예를 들어 64KB MTU 크기를 사용하고tcp_recvspace가 64KB로 설정된 장치에서 TCP는 하나의 패킷만 전송할 수 있으며, 전송 후 창이 닫힙니다. TCP는 수신자로부터 ACK를 대기하여 수신한 후에만 다시 패킷을 전송할 수 있습니다. 이러한 문제는 다음의 두 가지 방법으로 해결할 수 있습니다.

    • 한 옵션은 rfc1323을 사용 가능하게 하는 것으로, TCP가 향상되고 16비트 한계를 극복할 수 있게 하여 64KB를 초과하는 창 크기를 사용할 수 있습니다. 그런 다음,tcp_recvspace 조정 기능을 MTU 크기의 10배 정도의 큰 값으로 설정하여 TCP의 데이터 스트림과 성능 향상을 제공합니다.
    • 두 번째 옵션은 어댑터의 MTU 크기를 줄이는 것입니다. 예를 들어, ifconfig at0 mtu 16384 명령을 사용하여 ATM MTU 크기를 16KB로 설정하게 합니다. 이것은 TCP가 더 작은 MSS 값을 계산하게 합니다. 16KB MTU 크기 사용 시, TCP는 64KB 창 크기의 4 패킷을 전송할 수 있습니다.

다음은 TCP 스트림 작업 부하를 조정하는 일반 지침입니다.

  • TCP 송신 및 수신 공간을 MTU 크기의 10배 이상으로 설정하십시오.
  • 더 큰 TCP 수신 공간 값을 허용하기 위해 MTU 크기가 8KB를 초과 시 rfc1323을 사용 가능하게 해야 합니다.
  • 고속 어댑터의 경우, 더 큰 TCP가 공간 값 도움말 성능을 송수신합니다.
  • 고속의 어댑터의 경우, tcp_sendspace 조정 기능 값은 tcp_recvspace 값의 2배이어야 합니다.

ftp  rcp 명령은 tcp_sendspace  tcp_recvspace 조정 기능의 조정에서 이점을 얻을 수 있는 TCP 응용프로그램의 예입니다.

tcp_recvspace 조정 기능

tcp_recvspace 조정 기능은 수신 시스템이 수신 소켓 대기행렬에서 커널에 버퍼링할 수 있는 데이터 바이트 수를 지정합니다.tcp_recvspace 조정 기능은 TCP 창 크기를 설정하기 위해 TCP 프로토콜에서도 사용됩니다. 이 창 크기는 수신기가 데이터를 버퍼링할 수 있는 충분한 공간을 갖도록 수신기에 전송할 데이터의 바이트 수를 제한하기 위해 TCP가 사용합니다. tcp_recvspace 조정 기능은 TCP 성능을 위한 키 매개변수입니다. TCP는 여러 패킷을 네트워크에 전송하여 네트워크 파이프라인이 가득차도록 할 수 있어야 하기 때문입니다. TCP가 파이프라인에서 충분한 패킷을 유지할 수 없으면 성능이 저하됩니다.

다음 메소드를 사용하여 조정 가능한 tcp_recvspace를 설정할 수 있습니다.

  • 프로그램을 통한 setsockopt() 시스템 호출
  • no -o tcp_recvspace=[value] 명령
  • tcp_recvspace ISNO 매개변수

tcp_recvspace 조정 기능에 대한 공통적인 지침은 MTU 크기보다는 적으면서 최소 10배가 되도록 값을 설정하는 것입니다. 다음 공식으로 계산되는 bandwidth-delay product 값을 8로 나눠서tcp_recvspace 조정 기능 값을 판별할 수 있습니다.

          bandwidth-delay product = capacity(bits)= bandwidth(bits/second) x round-trip time (seconds)
          

용량 값을 8로 나누면 네트워크 파이프라인을 가득 찬 상태로 유지하는 데 필요한 양호한 TCP 창 크기 측정 값이 제공됩니다. 왕복 지연이 길어지고 네트워크 속도가 더 빨라지면, bandwidth-delay product값이 더 커지므로 TCP 창은 더 커집니다. 예를 들어, 왕복 시간이 0.2 밀리초인 100 Mbit 네트워크를 사용할 경우 위의 공식을 사용하여 bandwidth-delay product 값을 계산할 수 있습니다.

          bandwidth-delay product = 100000000 x 0.0002 = 20000
          20000/8 = 2500
          
          

따라서 이 예제에서는 TCP 창 크기가 최소 2500바이트여야 합니다. 단일 LAN의 100 메가비트 및 기가비트 이더넷에서는 최상의 성능을 위해 tcp_recvspace  tcp_sendspace 조정 기능 값을 계산된bandwidth-delay product 값의 2 - 3 배로 설정할 수 있습니다.

tcp_sendspace 조정 기능

tcp_sendspace 조정 기능은 전송 응용프로그램이 전송 호출에서 블록화되기 전에 커널에서 버퍼링할 수 있는 데이터 양을 지정합니다. TCP 소켓 전송 버퍼는 응용프로그램 데이터가 TCP 프로토콜이 수신기로 전송되기까지 커널에서 mbufs/cluster를 사용하여 데이터를 버퍼링하는 데 사용됩니다. 전송 버퍼의 디폴트 크기는 조정 가능한 tcp_sendspace 값 또는 프로그램으로 지정되거나setsockopt() 서브루틴을 사용하여 값을 바꿀 수 있습니다.

tcp_sendspace 조정 기능 값은 최소 tcp_recvspace 값만큼 설정하고, 더 높은 속도의 어댑터에 대해서는 tcp_sendspace 값을 최소 tcp_recvspace 값의 두 배로 설정해야 합니다.

응용프로그램이 입출력을 차단하지 않도록 하는 소켓에 O_NDELAY 또는 O_NONBLOCK을 지정하는 경우, 전송 버퍼가 가득 차면 응용프로그램이 유휴 상태로 되는 대신 EWOULDBLOCK/EAGAIN 오류를 보고합니다. 이러한 오류를 처리할 수 있도록 응용프로그램 코드가 작성되어야 합니다(권장되는 해결책은 얼마간 유휴 상태로 두었다가 재전송을 시도하는 것임).

rfc1323 조정 기능

rfc1323 조정 기능은 TCP 창 스케일링 옵션을 사용할 수 있도록 합니다. TCP 창 스케일링 옵션은 TCP 조정 옵션이므로 적용되도록 하려면 TCP 연결의 두 종료점 모두에서 사용 가능하게 해야 합니다. 기본적으로, TCP 창 크기는 65536바이트(64K)로 제한되지만,rfc1323 값을 1로 설정하면 값을 올릴 수 있습니다. tcp_recvspace 값을 65536보다 큰 값으로 설정할 경우, 연결의 양쪽 상대방 각각에 rfc1323 값을 1로 설정하십시오. 연결의 두 종료점에서 rfc1323 값을 설정하지 않으면, tcp_recvspace 조정 기능의 유효 값은 65536이 됩니다. 이 옵션은 TCP 프로토콜 헤더에 12 초과 바이트를 추가합니다. 이는 사용자 페이로드 데이터에서 감해지므로 소형 MTU 어댑터에서는 이 옵션이 성능에 다소 해를 입힐 수 있습니다.

큰 MTU 크기(32K 또는 64K 등)를 사용하는 어댑터를 통해 데이터를 전송하는 경우, 단일 패킷이 전체 TCP 창 크기를 소비하게 되므로 이 옵션을 사용 가능하게 하지 않는 한 TCP 스트림 성능이 최적이 아닐 수도 있습니다. 따라서 TCP는 패킷마다 수신기로부터 TCP 응답과 창 갱신을 기다려야 하므로 복수 패킷을 스트리밍할 수 없습니다. no -o rfc1323=1 명령을 사용하여 rfc1323 옵션을 작동시키는 경우, TCP의 창 크기를 4GB까지 설정할 수 있습니다. rfc1323 옵션을 1로 설정한 후에는 tcp_recvspace 매개변수를 MTU 크기의 10배와 같이 훨씬 큰 값으로 증가시킬 수 있습니다.

전송 및 수신 시스템이 rfc1323 옵션을 지원하지 않을 경우, MTU 크기를 줄이는 것은 대형 MTU 어댑터의 스트리밍 성능을 향상시킬 수 있는 한 가지 방법입니다. 예를 들어, MTU 크기 65536(TCP를 단 하나의 미결 패킷으로 제한하는)을 사용하는 대신 더 작은 MTU 크기 16384를 선택하면 TCP가tcp_recvspace 값이 65536바이트인 네 개의 미결 패킷을 가질 수 있어서 성능이 향상됩니다. 그러나 네트워크의 모든 노드는 동일 MTU 크기를 사용해야 합니다.

TCP Path MTU 전개

AIX에서 TCP Path MTU 전개 옵션은 디폴트로 사용 가능합니다. tcp_pmtu_discover 네트워크 조정 가능은 이 옵션을 제어합니다. TCP 경로 MTU 전개 옵션을 사용하면 TCP가 TCP 연결에 대해 두 호스트 사이의 경로에 있는 네트워크에서 최소 MTU 크기를 판별할 수 있으므로, 사용자가 네트워크에서 라우트마다 MTU 크기를 설정하지 않아도 됩니다.

네트워크 MTU 크기는 네트워크 성능에 영향을 미칩니다. MTU 크기가 작은 네트워크가 더 큰 크기의 MTU를 가지고 있는 두 네트워크 사이에 삽입될 경우, TCP 트래픽은 가장 작은 네트워크의 MTU 크기를 사용하여 네트워크를 거쳐 이동합니다. 예를 들어, MTU 크기가 64KB인 두 개의 SP 스위치 네트워크가 MTU 크기가 1500바이트인 이더넷에 의해 상호연결된 경우, 두 SP 네트워크 사이의 TCP 트래픽은 최대 1500바이트 크기의 패킷으로 수행됩니다.

tcp_pmtu_discover 조정 기능을 0으로 설정하여 TCP 경로 MTU 전개 옵션을 사용 불가능하게 한 경우, 정적 라우트에 대해 라우트마다 MTU 크기를 설정하거나 글로벌 no 명령 옵션에서 tcp_mssdflt 매개변수를 조정해야 합니다. 그렇지 않으면 어댑터마다 ISNO 옵션에서 tcp_mssdflt 매개변수를 설정해야 합니다.

tcp_nodelayack 조정 가능

tcp_nodelayack 옵션은 TCP가 일반적인 200ms 지연이 아닌 즉시 응답을 전송하도록 요청하는 프롬프트를 표시합니다. 즉시 응답을 전송하면 오버헤드가 약간 더 부가될 수 있지만 어떤 경우에는 성능이 상당히 향상될 수 있습니다.

TCP가 200ms 동안 응답 전송을 지연할 경우 성능 문제점이 발생했습니다. 이는 전송기가 수신기로부터의 응답을 기다리고 수신기가 전송기로부터 더 많은 데이터에 대해 기다리기 때문입니다. 따라서 스트림 처리량이 낮아질 수 있습니다. 이 문제점인 것으로 간주되면, tcp_nodelayack 옵션을 사용 가능하게 하여 스트리밍 성능을 향상시키는지 보십시오. 그렇지 않으면 tcp_nodelayack 옵션을 사용 불가능하게 하십시오.

sb_max 조정 가능

sb_max 조정 가능은 개별 소켓에 대기행렬화되는 소켓 버퍼 수의 상한을 설정합니다. 이 매개변수는 전송자 소켓 또는 수신자 소켓에 대기행렬화되는 버퍼에 의해 사용되는 버퍼 영역의 크기를 제어합니다. 시스템은 버퍼의 내용이 아닌 버퍼의 크기에 기초하여 사용되는 소켓 버퍼를 설명합니다.

장치 드라이버가 100바이트의 데이터를 2048바이트 버퍼에 넣는 경우, 시스템은 2048바이트의 소켓 버퍼 영역이 사용되는 것으로 간주합니다. 이는 어댑터 최대 크기 패킷을 충분히 받을 수 있는 크기의 버퍼로 버퍼를 수신하는 장치 드라이버에서 공통적입니다. 이로 인해 버퍼 영역이 낭비되는 경우도 있지만 데이터를 더 작은 크기의 버퍼로 복사하는 데는 더 많은 CPU 주기가 요구됩니다.

주:
AIX에서, sb_max 조정 기능의 디폴트 값은 1048576(큰 값)입니다. 커널 mbuf 메모리를 유지해야 할 필요가 없으면(예를 들어, 32비트 커널에서) 이 값을 변경하지 마십시오. 이 매개변수를 변경할 경우 제안되는 sb_max 값에 대해서는 위의 표를 참조하십시오.

TCP 요청/응답 작업 부하 조정

TCP 요청/응답 작업 부하는 2방식 정보 교환과 관련된 작업 부하입니다. 요청/응답 작업 부하의 예제는 웹 서버, NFS 파일 시스템(전송 프로토콜의 TCP 사용) 또는 데이터베이스의 잠금 관리 프로토콜에 대한 웹 브라우저 요청과 같이 응용프로그램 또는 클라이언트/서버 응용프로그램의 원격 프로시저 호출(RPC) 유형입니다. 그러한 요청은 많은 응답이 있는 간단한 메시지이거나 응답이 거의 없는 복잡한 요청일 수 있습니다.

이 작업 부하에서 1차 관심 메트릭은 네트워크의 왕복 대기입니다. 이 요청이나 응답 중 여러 곳에서 작은 메시지를 사용하므로, 네트워크 대역폭은 주요 고려사항이 아닙니다.

하드웨어는 대기에 주요 영향을 미칩니다. 예를 들어, 네트워크의 유형, 임의 네트워크 스위치나 라우터의 유형 및 성능, 각 네트워크 노드에서 사용되는 프로세서의 속도, 어댑터 및 버스 대기는 모두 왕복 시간에 영향을 미칩니다.

최소 대기(최적 응답)를 제공하기 위해 옵션을 조정하면 보통 더 높은 CPU 오버헤드를 야기하여 시스템이 더 많은 패킷을 전송하고, 더 많은 인터럽트를 가져오는 등으로 대기 및 응답 시간을 최소화합니다. 이것은 고전적인 성능의 트레이드오프입니다.

요청/응답 응용프로그램의 1차 조정 기능은 다음과 같습니다.

  • tcp_nodelay 또는 tcp_nagle_limit
  • tcp_nodelayack
  • 어댑터 인터럽트 연합 설정값

주:
일부 요청/응답 작업 부하는 한 방향으로 많은 양의 데이터를 관련시킵니다. 그러한 작업 부하는 작업 부하에 따라 스트림 및 대기 조합으로 조정될 필요가 있을 수 있습니다.

tcp_nodelay 또는 tcp_nagle_limit 옵션

AIX에서 TCP_NODELAY 소켓 옵션은 디폴트로 사용 불가능하여, 단 몇 바이트를 전송하고 응답을 기다릴 수 있는 요청/응답 워크로드로 인해 큰 지연이 발생할 수 있습니다. TCP는 응답 패킷에서 TCP 응답을 다시 piggy할 것으로 예상하므로 지연된 응답을 개선합니다. 지연은 보통 200ms입니다.

대부분의 TCP 구현은 nagle 알고리즘을 구현합니다. 이 알고리즘에서는 TCP 연결이 아직 응답되지 않은 단 하나의 소규모 미결 세그먼트를 가질 수 있습니다. 이로서 TCP는 응답을 수신하거나 더 많은 데이터를 번들로 묶어서 전체 크기 세그먼트를 전송할 수 있을 때까지 더 많은 패킷을 전송하기 위해 지연됩니다.

요청/응답 워크로드를 사용하는 응용프로그램은 setsockopt() 호출을 사용하여 TCP_NODELAY 옵션을 사용 가능하게 해야 합니다. 예를 들어, telnet  rlogin 유틸리티, NFS(Network File System)및 웹 서버는 이미 TCP_NODELAY 옵션을 사용하여 nagle을 사용 불가능하게 합니다. 그러나 일부 응용프로그램은 이렇게 하지 않으므로, 네트워크 MTU 크기와 소켓으로 전송하는(쓰는) 데이터 크기에 따라 성능이 나빠질 수 있습니다.

TCP_NODELAY를 사용 가능하게 하지 않는 응용프로그램을 처리할 경우, 다음 조정 옵션을 사용하여 nagle을 사용 불가능하게 하십시오.

  • tcp_nagle_limit
  • tcp_nodelay ISNO 옵션
  • tcp_nodelayack
  • fasttimo
  • 어댑터에서의 인터럽트 합체

tcp_nagle_limit 옵션

tcp_nagle_limit 네트워크 옵션은 글로벌 네트워크 옵션이며 디폴트 설정은 65536입니다. TCP는 이 값과 같거나 더 큰 세그먼트에 대해 nagle 알고리즘을 사용 불가능하게 하므로 nagle이 사용 가능하게 되는 임계값을 조정할 수 있습니다. 예를 들어, 전체적으로 nagle을 사용 불가능하게 하려면,tcp_nagle_limit 값을 1로 설정하십시오. TCP가 전송 데이터를 번들로 묶고 최소 256바이트의 패킷을 전송할 수 있도록 하려면 tcp_nagle_limit 값을 256으로 설정하십시오.

tcp_nodelay ISNO 옵션

인터페이스 레벨에는 TCP_NODELAY를 사용 가능하게 하는 tcp_nodelay ISNO 옵션이 있습니다.tcp_nodelay 값을 1로 설정하면 TCP가 지연되지 않아서, nagle을 사용 불가능하게 하고 응용프로그램 전송 또는 쓰기마다 각각의 패킷을 전송합니다.

tcp_nodelayack 옵션

tcp_nodelayack 네트워크 옵션을 사용하여 지연되는 응답을 사용 불가능하게 할 수 있습니다(일반적으로 200ms 타이머). 응답을 지연시키지 않으면 지연성이 감소되어 전송기(nagle이 사용 가능할 수 있는)가 응답을 수신할 수 있으므로 그 다음의 부분 세그먼트를 바로 전송할 수 있습니다.

fasttimo 옵션

fasttimo 네트워크 옵션을 사용하여 디폴트인 200ms 타이머를 100 또는 50ms로 줄일 수 있습니다. TCP는 열려 있는 모든 TCP 연결에 대해 수행하는 다른 기능에 대해 이 타이머를 사용하므로, 이 타이머를 줄이면 모든 TCP 연결을 더 자주 스캔해야 하므로 시스템에 더 많은 오버헤드가 부가됩니다. 위의 옵션들은 최상의 선택사항이며 시스템 조정 시 마지막 재정렬로 fasttimo옵션을 사용해야 합니다.

인터럽트 연합

지연성이 낮은 응용프로그램의 경우, 어댑터에서 인터럽트 합체를 사용 불가능하게 합니다(응용프로그램에서 이 기능을 지원할 경우). 자세한 정보는 인터럽트 회피  인터럽트 연합을 참조하십시오.

UDP 조정

UDP(User Datagram Protocol)는 NFS(Network File System), 이름 서버(이름 붙여진), 기본 파일 전송 프로토콜(TFTP) 및 기타 특수 목적의 프로토콜에서 사용되는 데이터그램 프로토콜입니다.

UDP는 데이터그램 프로토콜이므로, 전체 메시지(데이터그램)는 전송 조작에서 하나의 원자적 조작으로 커널에 복사되어야 합니다. 또한 데이터그램은 recv 또는 recvfrom 시스템 호출 시 하나의 전체 메시지로 수신됩니다. 소켓당 기초로 버퍼링 요구사항을 처리하려면 udp_sendspace udp_recvspace 매개변수를 설정해야 합니다.

전송될 수 있는 가장 큰 UDP 데이터그램은 64KB에서 UDP 헤더 크기(8바이트) 및 IP 헤더 크기(IPv4의 경우 20바이트 또는 IPv6 헤더의 경우 40바이트)를 뺍니다.

다음 조정 기능은 UDP 성능에 영향을 미칩니다.

  • udp_sendspace
  • udp_recvspace
  • UDP 패킷 체인
  • 인터럽트 연합과 같은 어댑터 옵션

udp_sendspace 조정 기능

udp_sendspace 조정 기능 값을 전송할 최신 UDP 데이터그램 이상의 값으로 설정하십시오. 간단히 말해서, 이 매개변수를 65536(가능한 가장 큰 UDP 패킷을 처리하기에 충분한 크기)으로 설정하십시오. 이 값을 더 크게 설정해도 이득이 없습니다.

udp_recvspace 조정 기능

udp_recvspace 조정 기능은 각 UDP 소켓에서 대기행렬에 넣어진 수신 데이터를 위한 공간량을 제어합니다. 하나의 소켓에 대해udp_recvspace 한계에 도달하면, 수신 패킷은 버려집니다. 버린 패킷의 통계는 소켓 버퍼 오버플로우 열 아래에 있는 netstat -p udp 명령 출력에 자세히 표시됩니다. 자세한 정보는 AIX 5L 버전 5.3 명령 참조서, 제4권 netstat 명령을 참조하십시오.

복수의 UDP 데이터그램이 도달하여 소켓에서 응용프로그램이 데이터그램을 읽기를 기다릴 수 있으므로, udp_recvspace 조정 기능 값은 더 높게 설정해야 합니다. 또한 많은 UDP 응용프로그램이 특정 소켓을 사용하여 패킷을 수신합니다. 이 소켓은 서버 응용프로그램과 대화하는 모든 클라이언트로부터 패킷을 수신하는 데 사용됩니다. 따라서 수신 공간은 복수 클라이언트로부터 도달할 수 있는 대량의 데이터그램을 처리하고 소켓의 대기행렬에 놓여 읽혀질 때까지 기다릴 수 있도록 충분히 커야 합니다. 이 값이 너무 작으면 수신 패킷이 버려지므로 전송기는 패킷을 다시 전송해야 합니다. 이렇게 하면 성능이 나빠질 수 있습니다.

통신 서브시스템이 버퍼의 내용이 아닌 사용된 버퍼에 대해 설명하므로 udp_recvspace를 설정할 때 이것을 고려해야 합니다. 예를 들어, 8KB 데이터그램은 6개의 수신 버퍼를 사용하는 6개의 패킷으로 프래그먼트화됩니다. 이더넷의 경우에는 2048바이트가 됩니다. 따라서 하나의 8KB 데이터그램에 의해 사용되는 소켓 버퍼의 총 크기는 다음과 같습니다.

          6*2048=12,288바이트
          

여기서 수신되는 버퍼링의 효율에 따라 udp_recvspace를 더 높은 값으로 조정해야 함을 알 수 있을 것입니다. 그 값은 데이터그램 크기와 장치 드라이버에 따라 달라집니다. 64바이트 데이터그램을 전송하는 데 64바이트 데이터그램당 2KB 버퍼씩 사용됩니다.

사용자는 이 하나의 소켓으로 대기행렬화될 수 있는 데이터그램의 수를 고려해야 합니다. 예를 들어 NFS 서버는 잘 알려진 한 소켓에서 모든 클라이언트에서 보내는 UDP 패킷을 받습니다. 해당 소켓의 대기행렬 깊이가 최대 30개의 패킷일 경우, NFS(Network File System)가 8KB 데이터그램을 사용하면udp_recvspace 값으로 30 * 12,288 = 368,640을 사용합니다. NFS 버전 3에서는 최대 32KB 데이터그램이 허용됩니다.

udp_recvspace에 권장하는 초기값은 udp_sendspace 값의 10배입니다. 그 이유는 UDP가 다른 패킷 도달 이전에 받는 패킷을 응용프로그램으로 전달하지 못할 가능성 때문입니다. 또한 여러 개의 노드를 동시에 하나의 노드로 보낼 수 있습니다. 약간의 단계 영역을 제공하기 위해, 후속 패킷을 버리기 전에 10개 패킷이 단계화될 수 있는 크기로 설정할 수 있습니다. UDP를 사용하는 대형 병렬 응용프로그램에서는 이 값을 증가시켜야 하는 경우도 있습니다.

주:
소켓 버퍼의 최대 소켓 버퍼 크키를 지정하는 sb_max 값은 최대 UDP와 TCP 전송 및 수신 버퍼 크기의 2배 이상이어야 합니다.

UDP 패킷 체인

전송되는 UDP 데이터그램이 어댑터 MTU 크기보다 크면, IP 프로토콜 계층은 데이터그램을 MTU 크기의 프래그먼트로 프래그먼트합니다. 이더넷 인터페이스는 UPD 패킷 체인 기능을 포함합니다. 이 기능은 AIX에서 디폴트로 사용 가능합니다.

UDP 패킷 체인은 IP가 프래그먼트의 전체 체인을 구축하고 해당 체인을 하나의 호출에서 이더넷 장치 드라이버로 하향 패스합니다. 이것은 ARP 및 인터페이스 계층을 통해 드라이버로의 호출을 줄여 성능을 개선시킵니다. 또한 이것은 SMP 환경에서 잠금  잠금 해제 호출을 줄입니다. 또한 코드 루프의 캐쉬 유사 관계를 돕습니다. 이 변경사항은 전송인의 CPU 활용을 줄입니다.

ifconfig 명령으로 UDP 패킷 체인 옵션을 볼 수 있습니다. 다음 예제는 en0 인터페이스의 ifconfig 명령 출력을 표시하며, 여기서CHAIN 플래그는 사용 가능 시 해당 패킷 체인을 표시합니다.

          # ifconfig en0
          en0: flags=5e080863,80<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST,GROUPRT,64BIT,CHECKSUM_OFFLOAD,PSEG,CHAIN>
                   inet 192.1.6.1 netmask 0xffffff00 broadcast 192.1.6.255
                  tcp_sendspace 65536 tcp_recvspace 65536 tcp_nodelay 1
          
          

패킷 체인은 다음 명령으로 사용 불가능할 수 있습니다.

          # ifconfig en0 -pktchain
          
          # ifconfig en0
          en0: flags=5e080863,80<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST,GROUPRT,64BIT,CHECKSUM_OFFLOAD,PSEG>
                   inet 192.1.6.1 netmask 0xffffff00 broadcast 192.1.6.255
                  tcp_sendspace 65536 tcp_recvspace 65536 tcp_nodelay 1
          
          

패킷 체인은 다음 명령으로 다시 사용 가능해질 수 있습니다.

          # ifconfig en0 pktchain
          
          # ifconfig en0
          en0: flags=5e080863,80<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST,GROUPRT,64BIT,CHECKSUM_OFFLOAD,PSEG,CHAIN>
                   inet 192.1.6.1 netmask 0xffffff00 broadcast 192.1.6.255
                  tcp_sendspace 65536 tcp_recvspace 65536 tcp_nodelay 1
          
          

어댑터 오프로드 옵션

일부 어댑터는 AIX 시스템에서 어댑터로 작업을 오프로드할 옵션을 제공합니다. 이 옵션은 사용 가능 또는 사용 불가능하게 할 수 있습니다. 다음 표는 어댑터와 어댑터가 제공하는 옵션, 그리고 시스템 디폴트 설정을 보여줍니다.

어댑터 유형기능 코드TCP 체크섬 오프로드디폴트 설정TCP 대량 전송디폴트 설정
GigE, PCI, SX 및 TX2969, 2975OFFOFF
GigE, PCI-X, SX 및 TX5700, 5701ONON
GigE dual port PCI-X, TX 및 SX5706, 5707ONON
10/100 이더넷4962ONOFF
ATM 155, UTP 및 MMF4953, 4957예(전송 전용)ON아니오사용 불가능
ATM 622, MMF2946ON아니오사용 불가능

TCP 체크섬 오프로드

TCP 체크섬 오프로드 옵션은 네트워크 어댑터가 전송 및 수신에서 TCP 체크섬을 계산할 수 있도록 합니다. 체크섬을 계산하도록 하여 AIX 호스트 CPU를 절약합니다. 절약 정도는 패킷 크기에 따라 다릅니다. 이 옵션을 사용할 경우 작은 패킷에는 아주 약간 절약되거나 절약되지 않고 큰 패킷에 대해서는 크게 절약됩니다. PCI-X GigE 어댑터에서는 MTU 1500에 대한 절약이 보통 CPU 사용률의 약 5% 감소이고 MTU 9000(Jumbo Frames)의 경우에는 CPU 사용률의 약 15% 감소만큼 절약됩니다.

MTU 1500에서의 TCP 스트리밍 처리량은 TCP 체크섬 오프로드 옵션이 사용 가능한 경우, 400®MHz보다 더 빠른 프로세서가 있는 시스템에서 더 느립니다. 왜냐하면 호스트 시스템은 기가비트 이더넷 PCI 어댑터인 FC2969 및 FC 2975보다 빠른 체크섬을 실행할 수 있기 때문입니다. 따라서, 디폴트로 이 옵션은 이러한 어댑터에서 오프 상태입니다. 이러한 어댑터가 점보 프레임을 사용할 경우, 체크섬을 계산해야 할 경우에도 와이어 속도도 실행할 수 있습니다.

PCI-X 기가비트 이더넷 어댑터는 TCP 체크섬 오프로드 옵션이 사용 가능한 상태에서 와이어 속도로 실행할 수 있고 호스트 CPU 처리를 감소시키므로 디폴트로 사용 가능합니다.

TCP 대량 전송 오프로드

TCP 대형 전송 오프로드 옵션을 사용하여 AIX TCP 레이어는 TCP 메시지를 64KB까지 빌드하고 IP 및 이더넷 장치 드라이버를 통한 스택의 1회 콜다운으로 메시지를 전송할 수 있습니다. 그러면 어댑터는 메시지를 복수 TCP 프레임으로 다시 세그먼트화하고 와이어에서 전송합니다. 와이어에서 전송된 TCP 패킷은 MTU 1500의 경우 1500바이트 프레임이고 MTU 9000(점보 프레임)의 경우 9000바이트까지의 프레임입니다.

TCP 대형 전송 오프로드 옵션을 사용할 경우, 어댑터가 많은 양의 커널 처리를 수행하는 것을 볼 수 있습니다. 예를 들어, 64KB의 데이터를 전송하려면 1500바이트 패킷을 사용하여 스택을 44번 콜다운합니다. TCP 대형 전송 옵션을 사용할 경우 스택의 1회 콜다운으로 이를 수행할 수 있습니다. 이로서 호스트 처리가 감소하여 호스트 CPU에서 CPU 사용률이 낮아집니다. 절약 정도는 평균 TCP 대형 전송 크기에 따라 다릅니다. 예를 들어, MTU 크기 1500의 PCI-X GigE 어댑터에서는 호스트 CPU 사용률이 60 - 75% 감소합니다. 점보 프레임의 경우에는 시스템이 이미 대형 프레임을 전송해 있으므로 절약이 덜 합니다. 예를 들어, 점보 프레임에서는 호스트 CPU 사용률이 40% 감소하는 것을 볼 수 있습니다.

최초 생성 기가비트 이더넷 PCI 어댑터(FC2969 및 FC 2975)는 TCP 대형 전송 오프로드 옵션을 지원합니다. 사용자의 기본 관심이 낮은 호스트 CPU 사용률일 경우 이 옵션을 사용하십시오. 그러나 최상이 원시 처리량이 중요할 경우에는 이 옵션을 사용 가능하게 하면 안됩니다. 와이어에서의 데이터 전송률은 이 옵션을 사용할 경우 더 느려지기 때문입니다.

PCI-X GigE 어댑터가 있을 경우, TCP 대형 전송 오프로드 옵션을 사용하면 최상의 원시 처리량과 최하위의 호스트 CPU 사용률을 얻을 수 있으므로, 디폴트로 이 옵션은 사용 가능합니다.

인터럽트 회피

호스트 CPU 순환의 관점에서 볼 때, 인터럽트 처리는 비용이 많이 듭니다. 인터럽트를 처리하려면, 시스템은 이전 기계 상태를 저장하고 인터럽트 발생 위치를 판별하고 다양한 정리 작업 타스크를 수행하고 적당한 장치 드라이버 인터럽트 처리기를 호출해야 합니다. 일반적으로 장치 드라이버는 기계 속도에 비해 느리고, SMP 잠금을 실행하고 버퍼를 가져와서 사용 가능하게 하는 어댑터를 기반으로 인터럽트 상태 레지스터 읽기와 같이 높은 오버헤드 조작을 수행합니다.

대부분의 AIX 장치 드라이버는 전송 완료 인터럽트를 사용하지 않으므로 패킷 전송 시 인터럽트를 피할 수 있습니다. 전송 완료 처리는 보통 다음 전송 조작에 의해 처리되므로, 개별적인 전송 완료 인터럽트를 피할 수 있게 됩니다. 명령(예: netstat -v, entstat,atmstat 또는 fddistat 명령)을 사용하여 송수신된 패킷 계수와 송수신된 인터럽트 계수의 상태를 볼 수 있습니다. 통계에서 전송 인터럽트가 무효로 되었는지 명확하게 확인할 수 있습니다. 일부 써드 파티 어댑터 및 드라이버의 경우 이 규칙에 따르지 않을 수도 있습니다.

인터럽트 연합

수신 조작 시 인터럽트는 일반적으로 패킷이 장치의 입력 대기행렬에 도착했음을 호스트 CPU에 알립니다. 어댑터에 어떤 형태로든 인터럽트 완화 논리가 없는 경우, 각 수신 패킷에 대해 인터럽트가 발생할 수 있습니다. 하지만 수신 패킷 비율이 증가함에 따라 장치 드라이버는 하나의 패킷 처리를 완료하고 나서 드라이버를 종료하고 인터럽트를 정리하기 전에 먼저 그 이상의 패킷이 수신 대기행렬에 있는지 확인하기 위해 검사합니다. 이때 드라이버는 패킷 비율이 증가함에 따라 각 인터럽트에 대해 복수 패킷을 처리하거나 처리 종료할 패킷이 더 있음을 발견합니다. 다시 말해서 시스템은 로드가 증가함에 따라 효율이 더 높아집니다.

그러나 일부 어댑터에서는 인터럽트가 수신될 때 훨씬 더 많은 부분을 제어할 수 있는 추가 기능을 제공합니다. 이 기능은 흔히 인터럽트 합치기 또는 인터럽트 완화 논리라고 불리며, 이 기능을 사용하여 여러 개의 패킷을 수신할 수 있고 서로 다른 패킷에 대해 하나의 인터럽트를 생성할 수도 있습니다. 타이머는 최초 패킷이 도착할 때 시작되고, 그때부터 인터럽트가 n마이크로초 동안 또는m개의 패킷이 도착할 때까지 지연됩니다. 메소드는 어댑터에 따라 혹은 장치 드라이버를 사용하여 사용자가 제어할 수 있는 기능에 따라 다릅니다.

부하가 적을 때 인터럽트를 합치게 되면 패킷 도착 시간에 대기 시간이 추가됩니다. 패킷이 호스트 메모리에 있어도 호스트는 일정 시간이 지날 때까지 패킷을 인식하지 못합니다. 하지만 패킷 로드량이 클수록 생성되는 인터럽트 수가 적어지고 호스트는 각 인터럽트에 대해 여러 개의 패킷을 처리하기 때문에 CPU 순환 사용 횟수가 줄어들어 시스템 수행 효율이 향상됩니다.

인터럽트 완화 기능이 포함된 AIX 어댑터의 경우, 대기 시간을 많이 추가하지 않고 인터럽트 오버헤드를 줄이기 위해서는 값을 보통 레벨로 설정해야 합니다. 대기 시간이 최소가 되어야 하는 응용프로그램의 경우, 대기 시간을 줄이기 위해 초당 인터럽트 수를 늘리려면 옵션을 사용할 수 없도록 하거나 변경해야 합니다.

Gigabit Ethernet 어댑터는 인터럽트 완화 기능을 제공합니다. FC 2969 및 FC 2975 GigE PCI 어댑터는 지연 값과 버퍼 계수 메소드를 제공합니다. 어댑터는 최초 패킷이 도착할 때 타이머를 시작하고 타이머가 종료되거나 호스트의 n 버퍼가 사용되었을 때 인터럽트가 발생합니다.

FC 5700, FC 5701, FC 5706 및 FC 5707 GigE PCI-X 어댑터는 인터럽트 스로틀 비율 메소드를 사용합니다. 인터럽트 스로틀 비율 메소드는 지정된 빈도로 인터럽트를 생성하며, 이 방법은 시간에 따른 패킷 집군을 허용합니다. 디폴트 인터럽트 비율은 초당 10,000 인터럽트입니다. 인터럽트 오브헤드가 낮은 경우, 인터럽트 비율을 초당 최소 2,000 인터럽트로 설정할 수 있습니다. 짧은 대기 시간과 빠른 응답 시간이 필요한 작업 부하의 경우, 인터럽트 비율을 최대 20,000 인터럽트로 설정할 수 있습니다. 인터럽트 비율을 0으로 설정하면 인터럽트 스로틀을 완전히 사용할 수 없도록 합니다.

LAN 어댑터에서 스레드 사용 작동 가능(dog 스레드)

디폴트 설정에서 드라이버는 IP를 직접 호출하여 인터럽트 레벨로 실행 중에 소켓 레벨로 프로토콜 스택을 호출합니다. 이 경우에 명령 경로 길이는 최소화되지만 인터럽트 보류 시간은 증가합니다. SMP 시스템에서는 단일 CPU가 빠른 어댑터로부터 패킷을 수신하는 데 병목 현상을 일으킬 수 있습니다.dog threads 기능을 사용 가능하게 하여 드라이버가 수신 패킷을 스레드 대기행렬에 넣으면, 스레드는 IP, TCP 및 소켓 코드의 호출을 처리합니다. 스레드는 대기 중일 수 있는 기타 CPU에서 실행될 수 있습니다. 따라서 dog 스레드를 사용하면 수신 패킷 비율이 높은 곳에서는 복수의 CPU가 동시에 수신 패킷을 처리할 수 있기 때문에 경우에 따라 시스템의 용량을 증가시킬 수 있습니다.

dog 스레드 기능의 아래쪽은, 패킷이 스레드의 대기행렬에 배치되어야 하고 해당 스레드가 작업 지정되어야 하므로 경장하에 의해 대기 시간을 증가시키고 호스트 CPU 사용량을 증가시킬 수 있게 되어 있습니다.

주:
이 기능은 경로 길이만 추가하고 성능은 저하시키기 때문에 단일 프로세서에서는 지원되지 않는 기능입니다.

LAN 어댑터의 입력 측(수신)에 사용되는 기능으로 ifconfig 명령(ifconfig interface thread 또는 ifconfiginterface hostname up thread)을 사용하여 인터페이스 레벨에서 구성설정할 수 있습니다.

해당 기능을 사용할 수 없도록 하려면, 다음 예제에서와 같이 ifconfiginterface-thread 명령을 사용하십시오.

          # ifconfig en0 thread
          
          # ifconfig en0
          en0: flags=5e080863,e0<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST,GROUPRT,64BIT,CHECKSUM_OFFLOAD,PSEG,THREAD,CHAIN>
                  inet 192.1.0.1 netmask 0xffffff00 broadcast 192.1.0.255
          
          # ifconfig en0 -thread
          
          # ifconfig en0
          en0: flags=5e080863,c0<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST,GROUPRT,64BIT,CHECKSUM_OFFLOAD,PSEG,THREAD,CHAIN>
                  inet 192.1.0.1 netmask 0xffffff00 broadcast 192.1.0.255
          
          
          

또한 netstat -s 명령은 스레드가 처리한 패킷 수를 표시하고 스레드 대기행렬이 수신 패킷을 삭제한 경우 일부 계수기를 표시합니다. 다음은 netstat -s 명령의 예제입니다.

          # netstat -s| grep hread
          
                  352 packets processed by threads
                  0 packets dropped by threads
          
          

dog 스레드를 사용할 때 다음과 같은 사항을 고려하십시오.

  • 어댑터 수보다 많은 CPU를 설치해야 합니다. 일반적으로 어댑터보다 2배 이상 많은 CPU를 설치할 것을 권장합니다.
  • 고속 CPU가 장착된 시스템이 더 불리합니다. 속도가 느린 CPU를 사용하는 기계에서 최대 효과를 낼 수 있습니다.
  • 이 기능은 입력 패킷 속도가 높을 때 성능을 향상시킬 가능성이 높습니다. 성능은 기가비트에서 MTU 9000(점보 프레임)과 비교해 MTU 1500에서 더 많이 향상되는데, 패킷 속도가 소형 MTU 패킷에서 더 높기 때문입니다.

    dog 스레드는 해당 대기행렬에서 더 많은 작업이 발견될 때 최상으로 실행되며 유휴(입력 대기) 상태로 돌아갈 필요가 없습니다. 따라서 드라이버가 스레드를 불러오고 시스템이 스레드를 보내는 데 따른 오버헤드가 줄어듭니다.

  • dog 스레드는 또한 고유의 CPU가 마스크된 인터럽트에 소비하는 시간도 줄일 수 있습니다. 결과적으로 CPU의 로드가 빠르게 제거되므로 일반 사용자 레벨의 작업을 더 빨리 재개할 수 있습니다.
  • dog 스레드는 패킷 속도가 너무 빨라서 스레드의 지속적인 실행이 불가능한 경우에 성능을 10% 정도 저하시킬 수 있습니다. 10%란 값은 스레드 스케줄 및 작업 지정에 필요하여 증가된 CPU 오버헤드의 평균치입니다.

어댑터 자원 조정

어댑터 및 드라이버의 범위가 넓기 때문에 어댑터 속성 유형을 모두 설명하기가 어렵습니다. 다음은 시스템 성능에 영향을 줄 수 있는 대부분의 네트워크 어댑터 및 드라이버가 갖는 공통 속성에 대한 정보입니다.

대부분의 통신 드라이버는 자원의 송수신을 제어하는 데 사용되는 조정 가능한 매개변수 세트를 제공합니다. 이들 매개변수는 전송 대기행렬 및 수신 대기행렬 한계를 제어하는 것이 일반적이지만, 버퍼 또는 기타 자원의 수와 크기를 제어할 수도 있습니다. 이 매개변수는 전송 시에 대기행렬화될 수 있는 버퍼 또는 패킷의 수를 제한하거나, 패킷 수신에 사용 가능한 수신 버퍼의 수를 제한합니다. 이 매개변수는 어댑터 레벨에서 시스템 또는 네트워크에 의해 생성된 최대 부하를 처리하기에 충분히 대기행렬화되도록 조정될 수 있습니다.

다음은 몇 가지 일반적인 지침입니다.

  • 어댑터 자원 및 발생할 수 있는 모든 오류에 대한 자세한 정보를 표시하려면, 사용하는 어댑터에 따라 다음 명령을 사용하십시오.
    • netstat -v
    • entstat
    • atmstat
    • fddistat
    • tokstat
  • errpt  errpt -a 명령을 사용하여 시스템 오류 로그 보고서를 모니터하십시오.
  • 다음 중 임의의 조건이 적용되는 경우에만 매개변수를 변경해야 합니다.
    • 자원 부족을 나타내는 증거가 있습니다.
    • 대기행렬이 과수행된 상태입니다.
    • 성능 분석에서 시스템 성능 조정이 필요한 경우를 표시합니다.

전송 대기행렬

전송의 경우, 장치 드라이버가 전송 대기행렬 한계를 지정할 수도 있습니다. 드라이버 및 어댑터에 따라, 하드웨어 대기행렬 한계와 소프트웨어 대기행렬 한계가 모두 있을 수 있습니다. 하드웨어 대기행렬만 있는 드라이버가 있는 반면, 하드웨어 및 소프트웨어 대기행렬을 모두 갖는 드라이버도 있습니다. 일부 드라이버는 내부적으로는 하드웨어 대기행렬을 제어하고 소프트웨어 대기행렬 한계를 수정만 할 수 있도록 허용합니다. 일반적으로 장치 드라이버는 전송 패킷을 직접 어댑터 하드웨어 대기행렬에 넣습니다. 네트워크 속도나 SMP 시스템에서의 속도와 비교해 시스템 CPU 속도가 빠를 경우, 시스템의 전송 패킷 생성 속도가 네트워크에서의 패킷 전송 속도보다 빠를 수 있습니다. 이로 인해 하드웨어 대기행렬이 가득 차게 됩니다. 하드웨어 대기행렬이 가득 차면, 일부 드라이버에서 소프트웨어 대기행렬을 제공하여 전송 패킷을 소프트웨어 대기행렬로 보냅니다. 소프트웨어 전송 대기행렬도 한계에 도달할 경우, 전송 패킷은 버려집니다. 그로 인해 성능에 영향이 미치는데, 상위 레벨 프로토콜이 시간종료된 후 패킷을 재전송해야 하기 때문입니다. 하지만 어떤 점에서, 예를 들어 제공하는 공간이 너무 크면 효력이 상실된 패킷이 전송되는 결과를 초래할 수 있으므로, 어댑터는 패킷을 버려야 합니다.

다음은 PCI 어댑터 전송 대기행렬 크기에 대한 예입니다.

어댑터 유형기능 코드ODM 속성디폴트 값범위
IBM 10/100Mbps Ethernet PCI Adapter2968tx_que_size819216-16384
10/100 Mbps Ethernet Adapter II4962tx_que_sz8192512-16384
Gigabit Ethernet PCI(SX 또는 TX)2969, 2975tx_que_size8192512-16384
Gigabit Ethernet PCI(SX 또는 TX)5700, 5701, 5706, 5707tx_que_sz8192512-16384
ATM 155(MMF 또는 UTP)4953, 4957sw_txq_size204850-16384
ATM 622(MMF)2946sw_txq_size2048128-32768
FDDI2741, 2742, 2743tx_queue_size2563-2048

어댑터에서 제공하는 하드웨어 대기행렬 한계 값을 변경하면, 연관된 제어 블록 및 버퍼로 인해 수신에 더 많은 양의 실제 메모리가 사용됩니다. 따라서 제공된 한계는 반드시 필요한 경우 또는 메모리 사용의 증가에 따른 영향을 무시할 수 있는 대형 시스템에서만 증가시키십시오. 소프트웨어 전송 대기행렬 한계를 증가시켜도 메모리 사용은 증가되지 않습니다. 단지 상위 계층 프로토콜에 의해 이미 할당된 패킷만이 대기행렬화되도록 합니다.

전송 설명자

몇 가지 드라이버를 사용하여 전송 호출음 크기나 전송 설명자 갯수를 조정할 수 있습니다. 하드웨어 전송 대기행렬은 동시 전송용 어댑터 대기행렬에 끼워 넣을 수 있는 최대 버퍼 수를 제어합니다. 하나의 설명자는 일반적으로 하나의 버퍼만을 지시하고 메시지는 복수 버퍼로 전송할 수 있습니다. 많은 드라이버에서 매개변수 변경은 허용되지 않습니다.

어댑터 유형기능 코드ODM 속성디폴트 값범위
Gigabit Ethernet PCI-X, SX 또는 TX5700, 5701, 5706, 507txdesc_que_sz512128-1024, 128의 배수

수신 자원

일부 어댑터의 경우, 사용자가 네트워크로부터 패킷 수신에 사용되는 자원의 수를 구성설정할 수 있는데, 수신 버퍼 갯수(및 버퍼 크기) 또는 DMA 수신 설명자 갯수가 여기에 포함될 수 있습니다. 일부 드라이버에는 다른 작업 부하에 대해 조정할 필요가 있을 수 있는 다양한 크기의 버퍼로 복수의 수신 버퍼 풀이 있습니다. 일부 드라이버는 이와 같이 드라이버 내부에 있는 자원을 관리하며, 해당 자원의 변경은 허용되지 않습니다.

네트워크에서 최대 버스트를 처리하려면 수신 자원을 늘려야 할 수 있습니다. 네트워크 인터페이스 장치 드라이버는 수신 대기행렬에 수신하는 패킷을 넣습니다. 수신 설명자 목록 또는 호출음이 가득 차거나 버퍼가 사용 가능하지 않은 경우, 패킷이 삭제되고 유실되므로 송신자가 재전송해야 합니다. 수신 설명자 대기행렬은 SMIT 도구나 chdev 명령을 사용하여 조정 가능합니다(매개변수 변경 방법 참조). 각 통신 어댑터 유형별로 최대 대기행렬 크기가 지정되며, 일반적으로 SMIT 도구에서 F4 또는 리스트키를 사용하여 확인할 수 있습니다.

어댑터 유형기능 코드ODM 속성디폴트 값범위
IBM 10/100Mbps 이더넷 PCI 어댑터2968rx_que_size25616, 32 ,64, 128, 26
rx_buf_pool_size38416-2048
10/100Mbps Ethernet PCI Adapter II4962rx_desc_que_sz512100-1024
rxbuf_pool_sz1024512-2048
Gigabit Ethernet PCI(SX 또는 TX)2969, 2975rx_queue_size512512(수정)
Gigabit Ethernet PCI-X(SX 또는 TX)5700, 5701, 5706, 5707rxdesc_que_sz1024128-1024, 128의 배수
rxbuf_pool_sz2048512-2048
ATM 155(MMF 또는 UTP)4953, 4957rx_buf4k_minx60x60-x200(96-512)
ATM 622(MMF)2946rx_buf4k_min256 20-4096
rx_buf4k_max010-14000
FDDI2741, 2742, 2743RX_buffer_cnt421-512

주:
  1. ATM 어댑터의 rx_buf4k_max 속성은 수신 버퍼 풀의 최대 버퍼 갯수입니다. 값이 0으로 설정되어 있을 때 드라이버는 시스템의 메모리량에 따라 값을 지정합니다. 예제: (rxbuf4k_max=thewall * 6 / 320) 단, 버퍼 상한은 ATM 155 어댑터의 경우 9500개이고 ATM 622 어댑터의 경우 16360개입니다. 필요하지 않을 때는 버퍼가 해제됩니다(결국 rx_buf4k_min로 됨).
  2. ATM 어댑터의 rx_buf4k_min 속성은 풀에서 사용 가능한 최소 버퍼 갯수입니다. 드라이버는 풀에서 사용 가능한 버퍼량만 유지하려고 합니다. 풀은 최대 rx_buf4k_max 값으로 확장할 수 있습니다.

장치 속성의 조회 및 변경 명령

몇 가지 상태 유틸리티는 전송 대기행렬 최고 한계 및 자원 없음 또는 버퍼 없음 오류 갯수를 표시하는 데 사용할 수 있습니다.netstat -v 명령을 사용하거나 어댑터 통계 유틸리티(이더넷용 entstat, 토큰 링용 tokstat, FDDI용 fddistat, ATM용 atmstat 등)로 바로 이동할 수 있습니다.

entstat 예제 출력에 대해서는 entstat 명령을 참조하십시오. netstat -i 유틸리티를 사용하는 메소드도 있습니다. 출력에서 인터페이스의 Oerrs 열에 0이 아닌 숫자가 있으면, 일반적으로 출력 대기행렬 오버플로우가 있는 것입니다.

네트워크 어댑터 설정값 열람

lsattr -E -l adapter-name 명령을 사용하거나 SMIT 명령(smitty commodev)을 사용하여 어댑터 구성설정을 표시할 수 있습니다.

다른 어댑터는 이 변수에 대해 다른 이름을 사용합니다. 예를 들어 전송 대기행렬 매개변수에는sw_txq_size, tx_que_size 또는xmt_que_size 등의 이름을 사용할 수 있습니다. 수신 대기행렬 크기와 수신 버퍼 풀 매개변수에는 rec_que_size, rx_que_size 또는 rv_buf4k_min 등의 이름을 사용할 수 있습니다.

다음은 IBM PCI 622Mbps ATM 어댑터에서 lsattr -E -l atm0 명령을 출력한 예제입니다. 출력에서sw_txq_size가 2048로 설정되어 있고 rx_buf4K_min 수신 버퍼가 256으로 설정되어 있음을 알 수 있습니다.

          # lsattr -E -l atm0
          adapter_clock  0           Provide SONET Clock                          True
          alt_addr       0x0           ALTERNATE ATM MAC address (12 hex digits)  True
          busintr        99          Bus Interrupt Level                          False
          interface_type 0           Sonet or SDH interface                       True
          intr_priority  3           Interrupt Priority                           False
          max_vc         1024        Maximum Number of VCs Needed                 True
          min_vc         64          Minimum Guaranteed VCs Supported             True
          regmem         0xe0008000  Bus Memory address of Adapter Registers      False
          rx_buf4k_max   0           Maximum 4K-byte pre-mapped receive buffers   True
          rx_buf4k_min   256         Minimum 4K-byte pre-mapped receive buffers   True
          rx_checksum    yes         Enable Hardware Receive Checksum             True
          rx_dma_mem     0x4000000   Receive  bus memory address range            False
          sw_txq_size    2048        Software Transmit Queue size                 True
          tx_dma_mem     0x2000000   Transmit bus memory address range            False
          uni_vers       auto_detect SVC UNI Version                              True
          use_alt_addr   no          Enable ALTERNATE ATM MAC address             True
          virtmem        0xe0000000  Bus Memory address of Adapter Virtual Memory False
          
          

다음은 lsattr -E -l ent0 명령을 사용한 PCI-X Gigabit Ethernet 어댑터 설정값의 예제입니다. 이 출력에서 tx_que_size는 8192로,rxbuf_pool_sz는 2048로, rx_que_size는 1024로 설정되어 있음을 알 수 있습니다.

          # lsattr -E -l ent0
          
          alt_addr       0x000000000000   Alternate ethernet address                    True
          busintr        163              Bus interrupt level                           False
          busmem         0xc0080000       Bus memory address                            False
          chksum_offload yes              Enable hardware transmit and receive checksum True
          compat_mode    no               Gigabit Backward compatibility                True
          copy_bytes     2048             Copy packet if this many or less bytes        True
          flow_ctrl      yes              Enable Transmit and Receive Flow Control      True
          intr_priority 3               Interrupt priority                 False
          intr_rate      10000            Max rate of interrupts generated by adapter   True
          jumbo_frames   no               Transmit jumbo frames                         True
          large_send     yes              Enable hardware TX TCP resegmentation         True
          media_speed    Auto_Negotiation Media speed                                   True
          rom_mem        0xc0040000       ROM memory address                            False
          rx_hog         1000             Max rcv buffers processed per rcv interrupt   True
          rxbuf_pool_sz  2048             Rcv buffer pool, make 2X rxdesc_que_sz        True
          rxdesc_que_sz  1024             Rcv descriptor queue size                     True
          slih_hog       10               Max Interrupt events processed per interrupt  True
          tx_que_sz      8192             Software transmit queue size                  True
          txdesc_que_sz  512              TX descriptor queue size                      True
          use_alt_addr   no               Enable alternate ethernet address             True
          
          

네트워크 매개변수 변경

가능한 경우, smitty 명령을 사용하여 네트워크 매개변수를 변경하십시오. 특정 장치 유형을 선택하려면, smitty commodev 명령을 사용하십시오. 그 다음, 표시되는 리스트에서 어댑터 유형을 선택하십시오. 다음은 smitty commodev 명령으로 이더넷 어댑터의 네트워크 매개변수를 변경하는 예제입니다.

                                             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                                    ent2
            Description                                         10/100/1000 Base-TX PCI-X Adapter (14106902)
            Status                                              Available
            Location                                            1V-08
            Receive descriptor queue size                      [1024]                                                      +#
            Transmit descriptor queue size                     [512]                                                       +#
            Software transmit queue size                       [8192]                                                      +#
            Transmit jumbo frames                               no                                                             +
            Enable hardware transmit 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
          Esc+5=Reset                   Esc+6=Command                 Esc+7=Edit                    Esc+8=Image
          Esc+9=Shell                   Esc+0=Exit                    Enter=Do
          
          

매개변수 값을 변경하려면 다음과 같이 수행하십시오.

  1. 다음 명령을 실행하여 인터페이스 접속을 해제하십시오.

              # ifconfig en0 detach
              

    여기서 en0은 어댑터 이름입니다.

  2. SMIT(시스템 관리 인터페이스 도구)를 사용하여 어댑터 설정값을 표시하십시오. 장치 -> 통신 -> 어댑터 유형-> 변경/보기...를 선택합니다.
  3. 커서를 변경할 필드로 옮긴 후 F4를 눌러 필드에 대한 최소 - 최대 범위(또는 지원되는 고유 크기 범위)를 표시하십시오.
  4. 적절한 크기를 선택한 후 Enter를 눌러 ODM 데이터베이스를 갱신하십시오.
  5. 다음 명령을 실행하여 어댑터를 다시 접속하십시오.

              # ifconfig en0 hosthame up
              

이들 매개변수 값을 변경하는 다른 메소드는 다음 명령을 실행하는 것입니다.

          # chdev -l [ifname] -a [attribute-name]=newvalue
          

예를 들어 en0에서 tx_que_size를 128로 변경하려면 다음 순서대로 명령을 수행하십시오. 이 드라이버는 네 종류의 크기만 지원하므로 SMIT 명령을 사용하여 설정값을 보는 것이 더 좋습니다.

          # ifconfig en0 detach
          # chdev -l ent0 -a tx_que_size=128
          # ifconfig en0 hostname up
          

TCP 최대 세그먼트 크기 조정

네트워크에서 가능한 가장 큰 패킷 크기를 전송하기가 더 효과적이므로 TCP가 전송하는 최대 크기 패킷은 대역폭에서 주요 영향을 미칠 수 있습니다. TCP는 각 TCP 연결의 경우, MSS(Maximum Segment Size)라고 알려진 이 최대 크기를 제어합니다. 직접 접속 네트워크의 경우, TCP는 네트워크 인터페이스의 MTU 크기를 사용하여 MSS를 계산한 후 프로토콜 헤더를 빼어 TCP 패킷에서 데이터의 크기를 제안합니다. 예를 들어, MTU가 1500인 이더넷은 IPv4 헤더의 경우 20바이트를 빼고 TCP 헤더의 경우 20바이트를 뺀 후에 MSS가 1460인 결과를 가져옵니다.

TCP 프로토콜은 연결 작성 시 연결에서 사용되는 MSS를 알리기 위해 연결된 두 상대방의 메커니즘을 포함합니다. 각 상대방은 TCP 헤더의 옵션 필드를 사용하여 제안된 MSS를 알립니다. 두 상대방이 제공한 값 중에서 작은 값이 MSS로 선택됩니다. 하나의 종료점이 MSS를 제공하지 않는 경우, 성능이 좋지 않은 536바이트가 가정됩니다.

문제점은 각 TCP 종료점만이 접속된 네트워크의 MTU를 아는 것입니다. 두 종료점간에 있을 수 있는 다른 네트워크의 MTU 크기를 알지 못합니다. 그러므로 종료점 모두가 동일한 네트워크에 있는 경우 TCP만이 올바른 MSS를 압니다. 그러므로 더 작은 MTU 네트워크에서 IP 프래그먼트화를 요구할 수 있는 패킷 전송을 피하려는 경우, TCP는 네트워크 구성설정에 따라 MSS의 광고를 다르게 처리합니다.

연결을 설정하는 중에 TCP 소프트웨어에 의해 알려진 MSS 값은 상대방이 동일한 물리적 네트워크 상의 국지 시스템(즉, 시스템이 동일한 네트워크 번호 사용)인지 또는 다른 원격 네트워크에 있는지의 여부에 따라 결정됩니다.

동일한 네트워크의 호스트

연결의 반대쪽 상대방이 동일한 IP 네트워크에 있는 경우, TCP에 의해 알려진 MSS는 다음과 같이 국지 네트워크 인터페이스의 MTU에 따라 결정됩니다.

          TCP MSS = MTU - TCP header size - IP header size
          

TCP 크기는 20바이트이며, IPv4 헤더 크기는 20바이트이며, IPv6 헤더 크기는 40바이트입니다.

이 값은 IP 프래그먼트화 없이 수용할 수 있는 최대 MSS이므로 고유의 최적값입니다. 따라서 국지 네트워크에 대한 MSS 조정은 필요하지 않습니다.

다른 네트워크에서의 호스트

연결의 반대편 상대방이 원격 네트워크에 있는 경우, 운영 시스템의 TCP는 아래 메소드에서 결정된 MSS를 알리도록 디폴트 값을 지정합니다. TCP Path MTU 전개가 사용 가능하거나 사용 불가능한 경우 메소드는 다양합니다. 경로 MTU 전개가 사용 가능하지 않은 경우, 여기서 tcp_pmtu_discover=0이며, TCP는 다음 순서로 사용할 MSS를 결정합니다.

  1. route add 명령에서 이 라우트로 MTU 크기를 지정한 경우, MSS는 이 MTU 크기에서 계산됩니다.
  2. ISNO의 tcp_mssdflt 매개변수가 사용 중인 네트워크 인터페이스용으로 정의된 경우,tcp_mssdflt 값이 MSS에 사용됩니다.
  3. 위의 것 중 어떤 것도 정의되지 않으면, TCP는 전역 notcp_mssdflt 조정 값을 사용합니다. 이 옵션의 디폴트 값은 1460바이트입니다.

TCP Path MTU 전개

TCP Path MTU 전개 프로토콜 옵션은 AIX에서 디폴트로 사용 가능합니다. 이 옵션은tcp_pmtu_discover=1 네트워크 옵션으로 제어됩니다. 이 옵션은 프로토콜 스택이 두 개의 호스트 간의 경로에 현재 있는 임의 네트워크에서 최소 MTU 크기를 결정하게 합니다.

AIX 5.3에서 시작되는 TCP Path MTU 전개 구현의 경우, ICMP ECHO 메시지가 아닌 연결 자체의 TCP 패킷을 사용합니다. TCP/IP 커널 확장하면, 관련된 PMTU 전개 정보가 저장된 테이블인 PMTU 테이블이 유지보수됩니다. 각 대상에 대한 입력 항목은 TCP 연결이 해당 대상에 설치될 때 PMTU 테이블에 작성됩니다. PMTU 값은 송신 인터페이스 MTU 값입니다.

TCP 패킷은 IP 헤더에 설정된 비트인 Don't Fragment 또는 DF를 사용하여 전송됩니다. TCP 패킷의 크기보다 작은 MTU 값을 갖는 네트워크 라우터에 TCP 패킷이 도달한 경우, 라우터는 프래그먼트화할 수 없으므로 메시지를 전달할 수 없다는 내용의 ICMP 오류 메시지를 반송합니다. 오류 메시지를 전송하는 라우터가 RFC 1191로 컴파일하는 경우, 네트워크의 MTU 값이 ICMP 오류 메시지에 포함됩니다. 그렇지 않으면, TCP 패킷이 재전송될 경우 MTU 크기는 AIX TCP/IP 커널 확장 허용 범위 내에 명확한 MTU 값 테이블에서 비교적 작은 값으로 지정해야 합니다. 이 경우, 대상의 PMTU 값은 PMTU 테이블에서 새로 작성된 소형 MTU 크기로 갱신되고 TCP 패킷이 재전송됩니다. 해당 대상에 대한 모든 후속 TCP 연결은 갱신된 PMTU 값을 사용합니다.

pmtu 명령을 사용하여 PMTU 입력 항목을 보거나 삭제할 수 있습니다. 다음은 pmtu 명령의 예제입니다.

          # pmtu display
          
             dst           gw            If    pmtu     refcnt   redisc_t    exp
          
           -------------------------------------------------------------------------
          
          
          10.10.1.3    10.10.1.5        en1    1500        2          9       0
          
          10.10.2.5    10.10.2.33       en0    1500        1          0       0
          
          

사용하지 않는 PMTU 항목, 다시 말해서 값이 0인 refcnt 입력 항목은 PMTU 테이블이 너무 커지지 않도록 하기 위해 삭제됩니다. 사용하지 않는 항목은 refcnt 값이 0이 되고 pmtu_expire분 후에 삭제됩니다. pmtu_expire 네트워크 옵션의 디폴트 값은 10분입니다. PMTU 항목이 만기되지 않게 하려면,pmtu_expire 값을 0으로 설정하십시오.

라우팅 테이블을 더 작고 관리하기 쉽게 하기 위한 라우트 복제는 TCP 경로 MTU 전개 구현에 필요하지 않습니다.

정적 라우트

고유의 원격 네트워크로의 정적 라우트를 지정하여 1460바이트의 디폴트 MSS 값을 재정의할 수 있습니다. route 명령의 -mtu 옵션을 사용하여 해당 네트워크에 대한 MTU를 지정하십시오. 이 경우, MSS 값을 계산하는 대신 라우트의 실제 최소 MTU를 지정합니다. 예를 들어, 다음 명령은 네트워크 192.3.3에 대한 라우트의 경우 디폴트 MTU 크기를 1500으로 설정하고 해당 게이트웨이로 가져올 디폴트 호스트는 en0host2입니다.

          # route add -net 192.1.0 jack -mtu 1500
          1500 net 192.3.3: gateway en0host2
          

netstat -r 명령은 라우트 테이블을 표시하며 PMTU 크기가 1500바이트임을 표시합니다. TCP는 해당 MTU 크기에서 MSS를 계산합니다. 다음은 netstat -r 명령의 예입니다.

          # netstat -r
          Routing tables
          Destination      Gateway           Flags   Refs     Use  If   PMTU Exp Groups
          
          Route tree for Protocol Family 2 (Internet):
          default          res101141         UGc       0        0  en4     -   -
          ausdns01.srv.ibm res101141         UGHW      8       40  en4  1500   -
          10.1.14.0        server1           UHSb      0        0  en4     -   -  =>
          10.1.14/24       server1           U         5     4043  en4     -   -
          server1          loopback          UGHS      0      125  lo0     -   -
          10.1.14.255      server1           UHSb      0        0  en4     -   -
          127/8            loopback          U         2  1451769  lo0     -   -
          192.1.0.0        en0host1          UHSb      0        0  en0     -   -  =>
          192.1.0/24       en0host1          U         4       13  en0     -   -
          en0host1         loopback          UGHS      0        2  lo0     -   -
          192.1.0.255      en0host1          UHSb      0        0  en0     -   -
          192.1.1/24       en0host2          UGc       0        0  en0     -   -
          en1host1         en0host2          UGHW      1   143474  en0  1500   -
          192.3.3/24       en0host2          UGc       0        0  en0  1500   -
          192.6.0/24       en0host2          UGc       0        0  en0     -   -
          
          Route tree for Protocol Family 24 (Internet v6):
          loopbackv6       loopbackv6        UH        0        0  lo0 16896   -
          

주:
netstat -r 명령은 PMTU 값을 표시하지 않습니다. pmtu display 명령으로 PMTU 값을 볼 수 있습니다.route add 명령으로 대상에 대한 라우트를 추가하고 MTU 값을 지정할 때 해당 대상에 대한 PMTU 테이블에 PMTU 항목이 작성됩니다.

작고 안정적인 환경에서, 이 메소드를 사용하면 네트워크별로 정확하게 MSS를 제어할 수 있습니다. 이 방법에는 다음과 같은 단점이 있습니다.

  • 이 방법은 동적 라우팅에서는 작동하지 않습니다.
  • 원격 네트워크의 수가 증가할 때는 비실용적이 됩니다.
  • 양쪽 모두에서 디폴트보다 큰 MSS를 조정하도록 하려면 정적 라우트가 양쪽 모두에 설정되어야 합니다.

no 명령의 tcp_mssdflt 옵션 사용

tcp_mssdflt 옵션은 원격 네트워크와 통신하기 위한 최대 패킷 크기를 설정하는 데 사용됩니다. no 명령의 글로벌 tcp_mssdflt 옵션은 모든 네트워크에 적용됩니다. 그러나 ISNO 옵션을 지원하는 네트워크 인터페이스의 경우, 각 인터페이스에서 tcp_mssdflt 옵션을 설정할 수 있습니다. 이 값은 네트워크를 사용하여 라우트의 전역 no 명령 값을 재정의합니다.

tcp_mssdflt 옵션은 TCP 데이터 크기를 나타내는 TCP MSS 크기입니다. 이 MSS 크기를 계산하려면, 원하는 MTU 크기에서 40바이트(IP를 위한 20과 TCP 헤더를 위한 20)를 빼십시오. rfc1323 옵션과 같은 다른 옵션이 사용되는 경우 TCP가 이 조정을 처리하는 것처럼 다른 프로토콜 옵션을 조정할 필요가 없습니다.

디폴트 MTU를 초과하는 환경에서, 이 메소드의 장점은 MSS를 네트워크 단위로 설정할 필요가 없다는 점입니다. 다음과 같은 단점이 있습니다.

  • 대상이 실제로 원격 네트워크에 있고 중간 네트워크의 MTU를 알 수 없는 경우, 디폴트를 증가시키면 IP 라우터 프래그먼트화가 발생할 수 있습니다.
  • tcp_mssdflt 옵션은 대상 호스트에서도 동일한 값으로 설정되어야 합니다.

주:
AIX 5.3에서 시작하여 tcp_pmtu_discover 옵션이 0으로 설정된 경우에는 tcp_mssdflt 옵션만 사용할 수 있습니다.

서브넷화(subnetting) 및 no 명령의 subnetsarelocal 옵션

TCP가 원격 종료점을 로컬(동일한 네트워크에서) 또는 원격으로 원격 종료점을 고려할 때 제어하기 위해 no 명령의subnetsarelocal 옵션을 사용할 수 있습니다. 서브넷화를 통해 여러 물리적 네트워크가 동일한 네트워크 번호를 공유하도록 만들 수 있습니다. subnetsarelocal 옵션은 전체 시스템 기반에서 서브넷이 국지 네트워크와 원격 네트워크 중 어느 것으로 간주될지를 지정합니다. no -o subnetsarelocal=1 명령을 사용할 경우, 서브넷 1의 호스트 A는 서브넷 2의 호스트 B가 동일한 물리적 네트워크에 있는 것으로 간주합니다.

결과적으로 호스트 A와 호스트 B가 서로 연결될 때, 두 호스트는 서로 동일한 네트워크에 존재한다고 간주하고 MSS를 조정합니다. 두 호스트는 해당 네트워크 인터페이스의 MTU에 기초하여 MSS를 알리게 되는데, 보통은 최적의 MSS가 선택됩니다.

이 방법에는 다음과 같은 장점이 있습니다.

  • 어떠한 정적 바인딩도 필요하지 않습니다. MSS가 자동으로 조정되기 때문입니다.
  • TCP MSS 절충을 불가능하게 하거나 대체하지 않으므로, 인접한 서브넷 간의 MTU 내에 있는 작은 차이가 적절하게 처리될 수 있습니다.

이 방법에는 다음과 같은 단점이 있습니다.

  • 두 개의 고 MTU 네트워크가 하나의 저 MTU 네트워크를 통해 연결된 경우, IP 라우터 프래그먼트화가 예상됩니다. 다음은 이러한 문제점을 보여주는 그림입니다.

    그림 23. 서브넷간 프래그먼트화. MTU=4352인 FDD1을 통하고 라우터 1을 통해 호스트 A에서 MTU=1500인 이더넷으로의 데이터 경로를 보여줍니다. 여기서 다시 라우터 2와 MTU=2의 다른 FDDI로, 다시 호스트 B로 이동합니다. 이 예에서 어떻게 프래그먼트화가 일어나는지에 대해서는 그림 바로 다음에 설명합니다.Artwork for h09i12
  • 이 시나리오에서, 호스트 A 및 B는 공통 MTU(4352)를 기본으로 연결을 설정합니다. A에서 B로 가는 패킷은 라우터 1에 의해 프래그먼트화된 다음 라우터 2에 의해 프래그먼트 모음이 되고, B에서 A로 가는 패킷에는 이와 반대 현상이 일어납니다.
  • 소스 및 대상은 두 서브넷이 모두 국지라고 간주해야 합니다.

주:
AIX 5.3에서 시작하여 tcp_pmtu_discover 값이 1인 경우에는 MSS 값이 송신 인터페이스 MTU에 따라 계산됩니다.subnetsarelocal 값은 tcp_pmtu_discover 네트워크 옵션 값이 0인 경우에만 고려됩니다.

IP 프로토콜 성능 조정 권장사항

IP 계층에서 조정할 수 있는 매개변수는 ipqmaxlen뿐으로, IP 입력 대기행렬의 길이를 제어하는 매개변수입니다. 일반적으로 인터페이스는 대기행렬화를 수행하지 않습니다. 패킷은 매우 빠르게 도착하여 IP 입력 대기행렬을 능가합니다. netstat -s 또는 netstat -p ip 명령을 사용하여 오버플로우 계수기(ipintrq overflows)를 볼 수 있습니다.

리턴된 숫자가 0보다 크면, 오버플로우가 발생한 것입니다. no 명령을 사용하여 대기행렬의 최대 길이를 설정하십시오. 예를 들어, 다음과 같습니다.

          # no -o ipqmaxlen=100
          

위 예에서는 100개의 패킷을 대기행렬화할 수 있습니다. 사용할 정확한 값은 최대 수신 비율에 의해 결정됩니다. 이 값을 판별할 수 없는 경우, 오버플로우 수를 사용하면 얼마나 늘려야 하는지를 판별하는 데 도움이 됩니다. 대기행렬 길이를 늘려도 추가 메모리가 사용되지는 않습니다. 단, 길이를 늘리면 IP의 입력 대기행렬에서 처리할 패킷이 더 많아지기 때문에 오프 레벨 인터럽트 처리기에서 시간이 더 많이 소비될 수 있습니다. 이는 CPU 시간이 필요한 프로세스에 악영향을 미칩니다. 양자의 균형을 유지하면 다른 처리에 대한 CPU 가용성과 비교해 패킷 삭제가 줄어듭니다. 사용자 환경에서 이러한 균형을 고려해야 하는 경우, ipqmaxlen을 적당한 크기만큼 증가시키는 것이 가장 좋습니다.



원본글 : http://blog.naver.com/wrkim001/80018963923