8.15. 네트워크 RHEL 시스템 역할을 사용하여 높은 패킷 드롭 속도를 줄이기 위해 링 버퍼 크기 증가

패킷 삭제 속도가 발생하면 이더넷 장치의 링 버퍼 크기를 늘리면 애플리케이션이 데이터 손실, 시간 초과 또는 기타 문제가 보고됩니다.

링 버퍼는 오버플로가 기존 데이터를 덮어쓰는 순환 버퍼입니다. 네트워크 카드는 전송(TX)을 할당하고(RX) 링 버퍼를 수신합니다. 수신 링 버퍼는 장치 드라이버와 NIC(네트워크 인터페이스 컨트롤러) 간에 공유됩니다. 데이터는 SoftIRQs라고도 하는 하드웨어 인터럽트 또는 소프트웨어 인터럽트를 통해 NIC에서 커널로 이동할 수 있습니다.

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

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

중요

네트워크 RHEL 시스템 역할을 사용하는 플레이를 실행하고 설정 값이 플레이에 지정된 값과 일치하지 않으면 역할은 동일한 이름의 기존 연결 프로필을 재정의합니다. 이러한 값을 기본값으로 재설정하지 않으려면 구성이 이미 존재하는 경우에도 플레이에서 네트워크 연결 프로필의 전체 구성을 항상 지정합니다.

Ansible 제어 노드에서 다음 프로세스를 수행합니다.

사전 요구 사항

  • 제어 노드와 관리형 노드가 준비되었습니다.
  • 관리 노드에서 플레이북을 실행할 수 있는 사용자로 제어 노드에 로그인되어 있습니다.
  • 관리형 노드에 연결하는 데 사용하는 계정에는 sudo 권한이 있습니다.
  • 장치가 지원하는 최대 링 버퍼 크기를 알고 있습니다.

절차

  1. 다음 콘텐츠를 사용하여 플레이북 파일(예: ~/playbook.yml )을 생성합니다.

    ---
    - name: Configure the network
      hosts: managed-node-01.example.com
      tasks:
        - name: Configure an Ethernet connection with increased ring buffer sizes
          ansible.builtin.include_role:
            name: rhel-system-roles.network
          vars:
            network_connections:
              - name: enp1s0
                type: ethernet
                autoconnect: yes
                ip:
                  address:
                    - 198.51.100.20/24
                    - 2001:db8:1::1/64
                  gateway4: 198.51.100.254
                  gateway6: 2001:db8:1::fffe
                  dns:
                    - 198.51.100.200
                    - 2001:db8:1::ffbb
                  dns_search:
                    - example.com
                ethtool:
                  ring:
                    rx: 4096
                    tx: 4096
                state: up

    이 플레이북은 다음 설정으로 enp1s0 연결 프로필을 생성하거나 프로필이 이미 있는 경우 업데이트합니다.

    • 정적 IPv4 주소 - 198.51.100.20 ( /24 서브넷 마스크 포함)
    • /64 서브넷 마스크가 포함된 정적 IPv6 주소 - 2001:db8:1::1
    • IPv4 기본 게이트웨이 - 198.51.100.254
    • IPv6 기본 게이트웨이 - 2001:db8:1::fffe
    • IPv4 DNS 서버 - 198.51.100.200
    • IPv6 DNS 서버 - 2001:db8:1::ffbb
    • DNS 검색 도메인 - example.com
    • 최대 링 버퍼 항목 수:

      • 수신(RX): 4096
      • 전송(TX): 4096
  2. 플레이북 구문을 확인합니다.

    $ ansible-playbook --syntax-check ~/playbook.yml

    이 명령은 구문만 검증하고 잘못되었지만 유효한 구성으로부터 보호하지 않습니다.

  3. 플레이북을 실행합니다.

    $ ansible-playbook ~/playbook.yml

추가 리소스

  • /usr/share/ansible/roles/rhel-system-roles.network/README.md file
  • /usr/share/doc/rhel-system-roles/network/ 디렉터리