검색

34장. 네트워크 성능 튜닝

download PDF

네트워크 설정 튜닝은 복잡한 프로세스이며 고려해야 할 여러 가지 요소가 있습니다. 예를 들어 여기에는 CPU-메모리 아키텍처, CPU 코어 양 등이 포함됩니다. Red Hat Enterprise Linux는 대부분의 시나리오에 최적화된 기본 설정을 사용합니다. 그러나 특정 경우에는 처리량이나 대기 시간을 늘리거나 패킷 드롭과 같은 문제를 해결하기 위해 네트워크 설정을 튜닝해야 할 수 있습니다.

34.1. 네트워크 어댑터 설정 조정

40Gbps 이상의 고속 네트워크에서 네트워크 어댑터 관련 커널 설정의 특정 기본 값은 패킷 감소 및 성능 저하의 원인이 될 수 있습니다. 이러한 설정을 튜닝하면 이러한 문제가 발생하지 않을 수 있습니다.

34.1.1. nmcli를 사용하여 높은 패킷 드롭 속도를 줄이기 위해 링 버퍼 크기를 늘리십시오.

패킷 드롭 비율로 인해 애플리케이션이 데이터, 시간 초과 또는 기타 문제가 발생하는 경우 이더넷 장치의 링 버퍼 크기를 늘립니다.

수신 링 버퍼는 장치 드라이버와 NIC(네트워크 인터페이스 컨트롤러) 간에 공유됩니다. 카드는 전송(TX) 및 수신(RX) 링 버퍼를 할당합니다. 이름에서 알 수 있듯이 링 버퍼는 오버플로가 기존 데이터를 덮어쓰는 순환 버퍼입니다. NIC에서 커널로 데이터를 이동하는 방법은 두 가지입니다. 하드웨어 인터럽트 및 소프트웨어 인터럽트(예: system-IRQ)라고도 하는 소프트웨어 인터럽트도 있습니다.

커널은 장치 드라이버가 이를 처리할 수 있을 때까지 RX 링 버퍼를 사용하여 들어오는 패킷을 저장합니다. 장치 드라이버는 일반적으로 SoftIRQs를 사용하여 RX 링을 드레이닝하여 들어오는 패킷을 sk_buff 또는 skb 라는 커널 데이터 구조에 배치하여 커널과 관련 소켓을 소유하는 애플리케이션까지 이동합니다.

커널은 TX 링 버퍼를 사용하여 네트워크로 전송해야 하는 발신 패킷을 보관합니다. 이러한 링 버퍼는 스택의 맨 아래에 있으며 패킷 드롭이 발생할 수 있는 중요한 지점이며, 이로 인해 네트워크 성능에 부정적인 영향을 미칩니다.

절차

  1. 인터페이스의 패킷 삭제 통계를 표시합니다.

    # ethtool -S enp1s0
        ...
        rx_queue_0_drops: 97326
        rx_queue_1_drops: 63783
        ...

    명령 출력은 네트워크 카드 및 드라이버에 따라 다릅니다.

    삭제 또는 드롭 카운터의 높은 값은 사용 가능한 버퍼가 패킷을 처리할 수 있는 속도보다 빠르게 채워지는 것을 나타냅니다. 링 버퍼를 늘리면 이러한 손실을 피할 수 있습니다.

  2. 최대 링 버퍼 크기를 표시합니다.

    # ethtool -g enp1s0
     Ring parameters for enp1s0:
     Pre-set maximums:
     RX:             4096
     RX Mini:        0
     RX Jumbo:       16320
     TX:             4096
     Current hardware settings:
     RX:             255
     RX Mini:        0
     RX Jumbo:       0
     TX:             255

    Pre-set maximums 섹션의 값이 현재 하드웨어 설정 섹션에서보다 높은 경우 다음 단계에서 설정을 변경할 수 있습니다.

  3. 인터페이스를 사용하는 NetworkManager 연결 프로필을 식별합니다.

    # nmcli connection show
    NAME                UUID                                  TYPE      DEVICE
    Example-Connection  a5eb6490-cc20-3668-81f8-0314a27f3f75  ethernet  enp1s0
  4. 연결 프로필을 업데이트하고 링 버퍼를 늘립니다.

    • RX 링 버퍼를 늘리려면 다음을 입력하십시오.

      # nmcli connection modify Example-Connection ethtool.ring-rx 4096
    • TX 링 버퍼를 늘리려면 다음을 입력하십시오.

      # nmcli connection modify Example-Connection ethtool.ring-tx 4096
  5. NetworkManager 연결을 다시 로드합니다.

    # nmcli connection up Example-Connection
    중요

    NIC가 사용하는 드라이버에 따라 링 버퍼를 변경하면 네트워크 연결이 곧 중단될 수 있습니다.

34.1.2. 패킷이 손실되지 않도록 네트워크 장치 백로그 큐 조정

네트워크 카드가 패킷을 수신하고 커널 프로토콜 스택이 처리되기 전에 커널은 이러한 패킷을 백로그 큐에 저장합니다. 커널은 각 CPU 코어에 대해 별도의 대기열을 유지 관리합니다.

코어의 백로그 큐가 가득 차면 커널은 netif_receive_skb() 커널 함수가 이 큐에 할당하는 추가 수신 패킷을 모두 삭제합니다. 서버에 10Gbps 또는 더 빠른 네트워크 어댑터 또는 여러 개의 1Gbps 어댑터가 포함된 경우 이 문제를 방지하려면 백로그 큐 크기를 조정합니다.

사전 요구 사항

  • 10Gbps 이상 또는 여러 개의 1Gbps 네트워크 어댑터

절차

  1. 백로그 큐가 필요한지 여부를 확인하고 카운터를 /proc/net/softnet_stat 파일에 표시합니다.

    # awk '{for (i=1; i<=NF; i++) printf strtonum("0x" $i) (i==NF?"\n":" ")}' /proc/net/softnet_stat | column -t
    221951548  0      0  0  0  0  0  0  0  0  0  0  0
    192058677  18862  0  0  0  0  0  0  0  0  0  0  1
    455324886  0      0  0  0  0  0  0  0  0  0  0  2
    ...

    awk 명령은 /proc/net/softnet_stat 의 값을 16진수에서 10진수 형식으로 변환하고 테이블 형식으로 표시합니다. 각 행은 코어 0으로 시작하는 CPU 코어를 나타냅니다.

    관련 열은 다음과 같습니다.

    • 첫 번째 열: 수신된 총 프레임 수
    • 두 번째 열: 전체 백로그 큐로 인한 삭제된 프레임 수
    • 마지막 열: CPU 코어 번호
  2. /proc/net/softnet_stat 파일의 두 번째 열에 있는 값이 시간에 따라 증가하면 백로그 대기열의 크기를 늘립니다.

    1. 현재 백로그 큐 크기를 표시합니다.

      # sysctl net.core.netdev_max_backlog
      net.core.netdev_max_backlog = 1000
    2. 다음 콘텐츠를 사용하여 /etc/sysctl.d/10-netdev_max_backlog.conf 파일을 만듭니다.

      net.core.netdev_max_backlog = 2000

      net.core.netdev_max_backlog 매개변수를 현재 값의 double로 설정합니다.

    3. /etc/sysctl.d/10-netdev_max_backlog.conf 파일에서 설정을 로드합니다.

      # sysctl -p /etc/sysctl.d/10-netdev_max_backlog.conf

검증

  • /proc/net/softnet_stat 파일에서 두 번째 열을 모니터링합니다.

    # awk '{for (i=1; i<=NF; i++) printf strtonum("0x" $i) (i==NF?"\n":" ")}' /proc/net/softnet_stat | column -t

    값이 여전히 증가하면 net.core.netdev_max_backlog 값을 다시 두 배로 늘립니다. 패킷 드롭 카운터가 더 이상 증가하지 않을 때까지 이 프로세스를 반복합니다.

34.1.3. 전송 오류 수를 줄이기 위해 NIC의 전송 대기열 길이 늘리기

커널은 패킷을 전송하기 전에 전송 대기열에 저장합니다. 기본 길이(1000 패킷)는 일반적으로 10Gbps에 충분하며 40Gbps 네트워크에도 적합합니다. 그러나 더 빠른 네트워크에서 또는 어댑터에서 전송 오류가 증가하는 경우 큐 길이를 늘립니다.

절차

  1. 현재 전송 대기열 길이를 표시합니다.

    # ip -s link show enp1s0
    2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    ...

    이 예에서 enp1s0 인터페이스의 전송 대기열 길이(qlen)는 1000 입니다.

  2. 네트워크 인터페이스의 소프트웨어 전송 큐의 드롭된 패킷 카운터를 모니터링합니다.

    # tc -s qdisc show dev enp1s0
    qdisc fq_codel 0: root refcnt 2 limit 10240p flows 1024 quantum 1514 target 5ms interval 100ms memory_limit 32Mb ecn drop_batch 64
     Sent 16889923 bytes 426862765 pkt (dropped 191980, overlimits 0 requeues 2)
    ...
  3. 전송 오류 수가 높거나 증가하는 경우 더 높은 전송 대기열 길이를 설정합니다.

    1. 이 인터페이스를 사용하는 NetworkManager 연결 프로필을 식별합니다.

      # nmcli connection show
      NAME                UUID                                  TYPE      DEVICE
      Example-Connection  a5eb6490-cc20-3668-81f8-0314a27f3f75  ethernet  enp1s0
    2. 다음 콘텐츠를 사용하여 /etc/NetworkManager/dispatcher.d/99-set-tx-queue-length-up NetworkManager 디스패치 스크립트를 만듭니다.

      #!/bin/bash
      # Set TX queue length on enp1s0 to 2000
      
      if [ "$1" == "enp1s0" ] && [ "$2" == "up" ] ; then
          ip link set dev enp1s0 txqueuelen 2000
      fi
    3. /etc/NetworkManager/dispatcher.d/99-set-tx-queue-length-up 파일에서 실행 가능 비트를 설정합니다.

      # chmod +x /etc/NetworkManager/dispatcher.d/99-set-tx-queue-length-up
    4. 변경 사항을 적용합니다.

      # nmcli connection up Example-Connection

검증

  1. 전송 대기열 길이를 표시합니다.

    # ip -s link show enp1s0
    2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 2000
    ...
  2. 삭제된 패킷 카운터를 모니터링합니다.

    # tc -s qdisc show dev enp1s0

    삭제된 카운터가 계속 증가하면 전송 대기열 길이를 다시 두 배로 늘립니다. 카운터가 더 이상 증가하지 않을 때까지 이 프로세스를 반복합니다.

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.