31.12. 인터럽트 병합 설정 튜닝
인터럽트 병합은 네트워크 카드로 생성되는 인터럽트 수를 줄이기 위한 메커니즘입니다. 일반적으로 인터럽트가 줄어들면 네트워크의 대기 시간과 전체 성능이 향상될 수 있습니다.
인터럽트 병합 설정을 튜닝하려면 다음을 제어하는 매개변수를 조정해야 합니다.
- 단일 인터럽트로 결합된 패킷 수입니다.
- 인터럽트를 생성하기 전에 지연입니다.
최적의 병합 설정은 사용 중인 특정 네트워크 조건 및 하드웨어에 따라 다릅니다. 따라서 환경 및 요구 사항에 가장 적합한 설정을 찾으려면 몇 가지 시도가 필요할 수 있습니다.
31.12.1. 대기 시간 또는 처리량에 민감한 서비스에 대해 RHEL 최적화
병합 튜닝의 목표는 지정된 워크로드에 필요한 인터럽트 수를 최소화하는 것입니다. 처리량이 높은 상황에서 목표는 높은 데이터 속도를 유지하면서 최대한 적은 인터럽트를 보유하는 것입니다. 대기 시간이 짧은 경우 더 많은 인터럽트를 사용하여 트래픽을 빠르게 처리할 수 있습니다.
네트워크 카드의 설정을 조정하여 단일 인터럽트로 결합된 패킷 수를 늘리거나 줄일 수 있습니다. 결과적으로 트래픽에 대한 처리량 또는 대기 시간을 개선할 수 있습니다.
절차
병목 현상이 발생하는 네트워크 인터페이스를 식별합니다.
# 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(네트워크 인터페이스 카드) 패킷 버퍼의 실제 패킷 손실을 측정합니다.
이전 단계에서 식별한 패킷 카운터의 값을 모니터링합니다.
네트워크를 네트워크의 예상 값과 비교하여 특정 인터페이스에 병목 현상이 발생하는지 확인합니다. 네트워크 병목 현상의 일반적인 신호에는 다음이 포함되지만 이에 국한되지는 않습니다.
- 네트워크 인터페이스에서 많은 오류
- 높은 패킷 손실
네트워크 인터페이스를 많이 사용
참고다른 중요한 요인은 네트워크 병목 현상을 식별할 때 CPU 사용량, 메모리 사용량, 디스크 I/O와 같은 요인입니다.
현재 coalescence 설정을 확인합니다.
# 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
이 출력에서 speed 및
Duplex
필드를 모니터링합니다.이러한 필드에는 네트워크 인터페이스 작업과 예상되는 값으로 실행 중인지에 대한 정보가 표시됩니다.
현재 인터럽트 병합 설정을 확인합니다.
# 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
값은 인터럽트 병합 설정을 동적으로 조정하는 조정 인터럽트 결합 메커니즘을 나타냅니다. 패킷 조건에 따라 NIC 드라이버는Adaptive RX/TX
가 활성화될 때 값을 자동으로 계산합니다(단, NIC 드라이버마다 알고리즘이 다릅니다).
-
필요에 따라 병합 설정을 수정합니다. 예를 들어 다음과 같습니다.
ethtool.coalesce-adaptive-rx
가 비활성화되어 있지만 RX 패킷의 인터럽트를 100마이크로초로 생성하기 전에ethtool.coalesce-rx-usecs
를 구성하여 지연을 설정합니다.# nmcli connection modify enp1s0 ethtool.coalesce-rx-usecs 100
ethtool.coalesce-adaptive-rx
를 활성화하면ethtool.coalesce-rx-usecs
가 기본값으로 설정됩니다.# nmcli connection modify enp1s0 ethtool.coalesce-adaptive-rx on
다음과 같이 Adaptive-RX 설정을 수정합니다.
-
낮은 대기 시간 (sub-50us)에 관련된 사용자는
Adaptive-RX
를 활성화해서는 안 됩니다. -
처리량에 관련된 사용자는 잠재적으로
Adaptive-RX
를 손상 없이 활성화할 수 있습니다. 사용자가 조정 인터럽트 병합 메커니즘을 사용하지 않으려면 100us와 같은 큰 값을 사용하거나 250us를ethtool.coalesce-rx-usecs
로 설정할 수 있습니다. - 요구 사항에 대해 확실하지 않은 사용자는 문제가 발생할 때까지 이 설정을 수정하지 않아야 합니다.
-
낮은 대기 시간 (sub-50us)에 관련된 사용자는
연결을 다시 활성화합니다.
# 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 드라이버에 따라 이름이 다를 수 있습니다.중요사용 중인 NIC 및 드라이버에 따라
ethtool
명령 출력이 다를 수 있습니다.대기 시간이 매우 짧은 사용자는 모니터링 목적으로 애플리케이션 수준 메트릭 또는 커널 패킷 시간 스탬프 API를 사용할 수 있습니다.
추가 리소스
- 모든 성능 문제에 대한 초기 조사
- 네트워크 튜닝에 사용할 수 있는 커널 매개변수는 무엇입니까? (Red Hat Knowledgebase)
- NIC ethtool 설정을 영구적으로 만드는 방법(부팅 시 자동으로 적용) (Red Hat Knowledgebase)
- 타임스탬프