24장. 네트워크 결정성 팁
TCP는 대기 시간에 큰 영향을 미칠 수 있습니다. TCP는 대기 시간을 추가하여 효율성을 확보하고, 혼잡을 제어하고, 안정적인 제공을 보장합니다. 네트워크 결정성을 위한 튜닝 시 정렬된 전달이 필요한지, 패킷 손실에 대한 보호가 필요한지, TCP가 필요한지 여부를 고려하십시오.
네트워크 결정성을 위한 튜닝 시 다음을 고려하십시오.
- 주문 배송이 필요하십니까?
패킷 손실에 대한 보호가 필요합니까?
패킷을 두 번 이상 전송하면 지연이 발생할 수 있습니다.
TCP가 필요하십니까?
소켓에서
TCP_NODELAY를 사용하여 나글 버퍼링 알고리즘을 비활성화하는 것이 좋습니다. 나글 알고리즘은 모두 한 번에 보낼 작은 발신 패킷을 수집하고 대기 시간에 부정적인 영향을 미칠 수 있습니다.
24.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이름에서
드롭삭제, 삭제또는오류가포함된 패킷 카운터를 식별합니다. 이러한 특정 통계는 NIC(네트워크 인터페이스 컨트롤러) 패킷 버퍼에서 실제 패킷 손실을 측정하며, NIC 병합으로 인해 발생할 수 있습니다.이전 단계에서 확인한 패킷 카운터 값을 모니터링합니다.
네트워크에 대해 예상되는 값과 비교하여 특정 인터페이스에 병목 현상이 발생하는지 확인합니다. 네트워크 병목 현상의 몇 가지 일반적인 표시에는 다음이 포함되지만 이에 국한되지는 않습니다.
- 네트워크 인터페이스에 많은 오류
- 높은 패킷 손실
네트워크 인터페이스의 사용량이 많이 있음
참고다른 중요한 요인은 네트워크 병목 현상을 식별할 때 CPU 사용량, 메모리 사용량, 디스크 I/O 등의 중요한 요소입니다.
현재 인터럽트 병합 설정을 확인합니다.
# 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 드라이버마다 알고리즘이 다릅니다).
-
필요에 따라 병합 설정을 수정합니다. 예를 들면 다음과 같습니다.
ethtool.coalesce-adaptive-rx는 비활성화되지만 RX 패킷에 대해 인터럽트를 100 마이크로초로 생성하기 전에 지연을 설정하도록 ethtool.coalesce-rx를 구성합니다.# nmcli connection modify enp1s0 ethtool.coalesce-rx-usecs 100ethtool.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 또는 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으로 유지하거나 0에서 가까운 필드(네트워크 트래픽 및 시스템 리소스에 따라 수백 개 이상)를 유지합니다. 이러한 필드의 높은 값은 네트워크 문제를 나타냅니다. 카운터는 다른 이름을 가질 수 있습니다. 이름에 "drop", "discard" 또는 "error"가 포함된 패킷 카운터를 밀접하게 모니터링합니다.rx_packets,tx_packets,rx_bytes,tx_bytes의 값은 시간이 지남에 따라 증가합니다. 값이 증가하지 않으면 네트워크에 문제가 있을 수 있습니다. NIC 드라이버에 따라 패킷 카운터의 이름이 다를 수 있습니다.중요ethtool명령 출력은 사용 중인 NIC 및 드라이버에 따라 다를 수 있습니다.대기 시간이 매우 짧은 사용자는 모니터링 목적으로 애플리케이션 수준 메트릭 또는 커널 패킷 시간 샘플링 API를 사용할 수 있습니다.