검색

18장. 네트워크 결정성 팁

download PDF

TCP는 대기 시간에 큰 영향을 미칠 수 있습니다. TCP는 효율성을 확보하고, 정체를 제어하고, 안정적인 제공을 보장하기 위해 대기 시간을 추가합니다. 튜닝할 때 다음 사항을 고려하십시오.

  • Do you need ordered delivery?
  • 패킷 손실을 방지할 필요가 있습니까?

    두 번 이상 패킷을 전송하면 지연이 발생할 수 있습니다.

  • TCP를 사용해야 합니까?

    소켓에서 TCP_NODELAY 를 사용하여 Nagle 버퍼링 알고리즘을 비활성화하는 것이 좋습니다. Nagle 알고리즘은 작은 발신 패킷을 수집하여 한 번에 모두 전송하며 대기 시간에 심각한 영향을 미칠 수 있습니다.

18.1. 대기 시간 또는 처리량에 민감한 서비스를 위해 RHEL 최적화

병합 튜닝의 목표는 지정된 워크로드에 필요한 인터럽트 수를 최소화하는 것입니다. 처리량이 높은 상황에서 목표는 높은 데이터 속도를 유지하면서 가능한 한 적은 수의 인터럽트를 보유하는 것입니다. 대기 시간이 짧은 상황에서는 더 많은 인터럽트를 사용하여 트래픽을 신속하게 처리할 수 있습니다.

네트워크 카드의 설정을 조정하여 단일 인터럽트로 결합된 패킷 수를 늘리거나 줄일 수 있습니다. 결과적으로 트래픽의 처리량 또는 대기 시간을 개선할 수 있습니다.

절차

  1. 병목 현상이 발생하는 네트워크 인터페이스를 식별합니다.

    # ethtool -S enp1s0
    NIC statistics:
         rx_packets: 1234
         tx_packets: 5678
         rx_bytes: 12345678
         tx_bytes: 87654321
         rx_errors: 0
         tx_errors: 0
         rx_missed: 0
         tx_dropped: 0
         coalesced_pkts: 0
         coalesced_events: 0
         coalesced_aborts: 0

    이름에 "drop", "discard" 또는 "error"가 포함된 패킷 카운터를 식별합니다. 이러한 특정 통계는 NIC(네트워크 인터페이스 카드) 패킷 버퍼에서 실제 패킷 손실을 측정하며, NIC 병합으로 인해 발생할 수 있습니다.

  2. 이전 단계에서 확인한 패킷 카운터 값을 모니터링합니다.

    네트워크에 대해 예상되는 값과 비교하여 특정 인터페이스에 병목 현상이 발생하는지 확인합니다. 네트워크 병목 현상의 몇 가지 일반적인 표시에는 다음이 포함되지만 이에 국한되지는 않습니다.

    • 네트워크 인터페이스에 많은 오류
    • 높은 패킷 손실
    • 네트워크 인터페이스의 사용량이 많이 있음

      참고

      다른 중요한 요인은 네트워크 병목 현상을 식별할 때 CPU 사용량, 메모리 사용량, 디스크 I/O 등의 중요한 요소입니다.

  3. 현재 병합 설정을 확인합니다.

    # ethtool enp1s0
    Settings for enp1s0:
            Supported ports: [ TP ]
            Supported link modes:   10baseT/Half 10baseT/Full
                                    100baseT/Half 100baseT/Full
                                    1000baseT/Full
            Supported pause frame use: No
            Supports auto-negotiation: Yes
            Advertised link modes:  10baseT/Half 10baseT/Full
                                    100baseT/Half 100baseT/Full
                                    1000baseT/Full
            Advertised pause frame use: No
            Advertised auto-negotiation: Yes
            Speed: 1000Mb/s
            Duplex: Full
            Port: Twisted Pair
            PHYAD: 0
            Transceiver: internal
            Auto-negotiation: on
            MDI-X: Unknown
            Supports Wake-on: g
            Wake-on: g
            Current message level: 0x00000033 (51)
                                   drv probe link
            Link detected: yes

    이 출력에서 SpeedDuplex 필드를 모니터링합니다. 이러한 필드에는 네트워크 인터페이스 작업과 예상된 값으로 실행 중인지에 대한 정보가 표시됩니다.

  4. 현재 인터럽트 병합 설정을 확인합니다.

    # ethtool -c enp1s0
    Coalesce parameters for enp1s0:
            Adaptive RX: off
            Adaptive TX: off
            RX usecs: 100
            RX frames: 8
            RX usecs irq: 100
            RX frames irq: 8
            TX usecs: 100
            TX frames: 8
            TX usecs irq: 100
            TX frames irq: 8
    • usecs 값은 인터럽트를 생성하기 전에 수신자 또는 송신기가 대기하는 마이크로초의 수를 나타냅니다.
    • 프레임 값은 인터럽트를 생성하기 전에 수신자 또는 송신기가 대기하는 프레임 수를 나타냅니다.
    • irq 값은 네트워크 인터페이스에서 인터럽트를 이미 처리하고 있을 때 인터럽트 모드를 구성하는 데 사용됩니다.

      참고

      모든 네트워크 인터페이스 카드에서 예제 출력의 모든 값을 보고하고 변경하는 데 지원되지는 않습니다.

    • Adaptive RX/TX 값은 인터럽트 병합 설정을 동적으로 조정하는 Adaptive 인터럽트 병합 메커니즘을 나타냅니다. 패킷 상태에 따라 Adaptive RX/TX 가 활성화된 경우 NIC 드라이버에서 병합 값을 자동으로 계산합니다(각 NIC 드라이버마다 알고리즘이 다릅니다).
  5. 필요에 따라 병합 설정을 수정합니다. 예를 들면 다음과 같습니다.

    • ethtool.coalesce-adaptive-rx 는 비활성화되지만 RX 패킷에 대해 인터럽트 를 100 마이크로초로 생성하기 전에 지연을 설정하도록 ethtool.coalesce-rx 를 구성합니다.

      # nmcli connection modify enp1s0 ethtool.coalesce-rx-usecs 100
    • ethtool.coalesce-rx-usecs 가 기본값으로 설정된 동안 ethtool.coalesce-adaptive-rx -rx를 활성화합니다.

      # nmcli connection modify enp1s0 ethtool.coalesce-adaptive-rx on

      다음과 같이 Adaptive-RX 설정을 수정하는 것이 좋습니다.

      • 짧은 대기 시간(sub-50us)에 관련된 사용자는 Adaptive-RX 를 활성화해서는 안 됩니다.
      • 처리량에 관련된 사용자는 손상 없이 Adaptive-RX 를 활성화할 수 있습니다. Adaptive 인터럽트 병합 메커니즘을 사용하지 않으려면 100us와 같은 큰 값을 설정하거나 ethtool.coalesce-rx-usecs 로 250us를 설정할 수 있습니다.
      • 사용자가 문제가 발생할 때까지 요구 사항에 대해 잘 모르는 경우 이 설정을 수정해서는 안 됩니다.
  6. 연결을 다시 활성화합니다.

    # nmcli connection up enp1s0

검증 단계

  • 네트워크 성능을 모니터링하고 삭제된 패킷을 확인합니다.

    # ethtool -S enp1s0
    NIC statistics:
         rx_packets: 1234
         tx_packets: 5678
         rx_bytes: 12345678
         tx_bytes: 87654321
         rx_errors: 0
         tx_errors: 0
         rx_missed: 0
         tx_dropped: 0
         coalesced_pkts: 12
         coalesced_events: 34
         coalesced_aborts: 56
    ...

    rx_errors,rx_dropped,tx_errors, tx_dropped 필드의 값은 0이어야 합니다(네트워크 트래픽 및 시스템 리소스에 따라 최대 수백 개까지). 이러한 필드의 높은 값은 네트워크 문제를 나타냅니다. 카운터는 다른 이름을 가질 수 있습니다. 이름에 "drop", "discard" 또는 "error"가 포함된 패킷 카운터를 밀접하게 모니터링합니다.

    rx_packets,tx_packets,rx_bytes, tx_bytes 의 값은 시간이 지남에 따라 증가해야 합니다. 값이 증가하지 않으면 네트워크에 문제가 있을 수 있습니다. NIC 드라이버에 따라 패킷 카운터의 이름이 다를 수 있습니다.

    중요

    ethtool 명령 출력은 사용 중인 NIC 및 드라이버에 따라 다를 수 있습니다.

    대기 시간이 매우 짧은 사용자는 모니터링 목적으로 애플리케이션 수준 메트릭 또는 커널 패킷 시간 샘플링 API를 사용할 수 있습니다.

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.