8장. 네트워킹
Red Hat Enterprise Linux의 네트워크 스택은 장기간에 걸쳐 수많은 자동 최적화 기능으로 업그레이드되었습니다. 대부분의 워크로드의 경우 자동 구성된 네트워크 설정이 최적의 성능을 제공합니다.
대부분의 경우 네트워크 성능 문제는 실제로 하드웨어의 결함이나 인프라의 장애에 기인하고 있습니다. 이러한 원인은 이 문서의 범위에서 벗어나는 것입니다. 이 장에서 다루어지는 성능 문제 및 해결 방법은 완전하게 기능적인 시스템을 최적화하는데 유용합니다.
네트워크는 섬세한 서브스시템으로 다른 부분이 민감한 연결에 형성되어 있습니다. 오픈 소스 커뮤니티와 Red Hat이 네트워크 성능을 자동으로 최적화하기 위해 구현 방법에 많은 노력을 기울이고 있는 것은 이 때문입니다. 따라서 대부분의 워크로드에서 성능을 위해 네트워크를 재구성할 필요가 없을 수 있습니다.
8.1. 네트워크 성능 개선
Red Hat Enterprise Linux 6.1에는 다음과 같은 네트워크 성능 개선 사항이 제공됩니다:
8.1.1. RPS (Receive Packet Steering)
RPS는 단일 NIC
rx
큐를 활성화하여 수신 softirq
워크로드를 여러 CPU에 분산하는 것을 허용합니다. 이는 네트워크 트래픽이 단일 NIC 하드웨어 큐에서의 병목 현상을 방지할 수 있습니다.
RPS를 활성화하려면 대상 CPU 이름을
/sys/class/net/ethX/queues/rx-N/rps_cpus
에 지정합니다. 여기서 ethX
는 NIC의 해당 장치 이름 (예: eth1
, eth2
)으로 rx-N
은 지정된 NIC 수신 큐로 대체합니다. 이렇게 하면 파일에 지정된 CPU가 ethX
에 있는 큐 rx-N
에서 데이터를 처리할 수 있습니다. CPU를 지정할 때 큐의 캐시 친화도 [4]를 고려합니다.
8.1.2. RFS (Receive Flow Steering)
RFS는 RPS의 확장 버전으로 애플리케이션이 데이터를 수신하고 네트워크 스택이 질문하여 자동으로 채워지는 해시 테이블을 관리자가 설정할 수 있게 합니다. 이는 어떤 애플리케이션이 네트워크 데이터의 어느 부분을 수신할 지를 결정합니다 (source:destination 네트워크 정보에 따라).
이 정보를 사용하여 네트워크 스택은 각각의 패킷을 수신하기 위해 최적의 CPU를 스케줄링할 수 있습니다. RFS를 설정하려면 다음과 같은 매개 변수를 사용합니다:
/proc/sys/net/core/rps_sock_flow_entries
- 이는 커널이 지정된 CPU 방향으로 조정할 수 있는 소켓/흐름의 최대 수를 제어합니다. 이는 시스템 전체의 공유 제한입니다.
/sys/class/net/ethX/queues/rx-N/rps_flow_cnt
- 이는 NIC (
ethX
)에서 커널이 특정 수신 큐 (rx-N
)를 조정할 수 있는 소켓/흐름의 최대 수를 제어합니다. 모든 NIC에서 이러한 조정 가능한 매개 변수의 모든 큐마다 값의 합계는 같거나/proc/sys/net/core/rps_sock_flow_entries
이하이어야 함에 유의합니다.
RPS와 달리 RFS는 패킷 흐름을 처리할 때 수신 큐와 애플리케이션 모두 동일한 CPU를 공유할 수 있게 합니다. 이는 경우에 따라 성능 개선으로 이어집니다. 하지만 이러한 개선은 캐시 계층, 애플리케이션 로드 등과 같은 요소에 따라 달라집니다.
8.1.3. TCP thin-stream의 getsockopt 지원
Thin-stream은 애플리케이션이 프로토콜의 재전송 메커니즘이 완전히 포화 상태가 되지 않도록 데이터를 매우 낮은 속도로 전송하는 것을 특징으로 전송 프로토콜에 사용되는 용어입니다. Thin-stream 프로토콜을 사용하는 애플리케이션은 일반적으로 TCP와 같은 신뢰성 프로토콜을 통해 전송합니다. 대부분의 경우, 이러한 애플리케이션은 매우 시간에 민감한 서비스를 제공합니다 (예: 주식 거래, 온라인 게임, 제어 시스템).
시간에 민감한 서비스의 경우 패킷 손실은 서비스의 품질에 막대한 손해를 가져올 수 있습니다. 이를 방지하기 위해
getsockopt
호출이 강화되어 다음과 같은 두 가지 옵션을 지원합니다:
- TCP_THIN_DUPACK
- 이 부울 값은 하나의 dupACK 후 thin stream의 재전송 동적 트리거를 활성화합니다.
- TCP_THIN_LINEAR_TIMEOUTS
- 이 부울 값은 thin stream의 선형 시간 초과 동적 트리거를 활성화합니다.
두 옵션 모두 애플리케이션에 의해 활성화됩니다. 이러한 옵션에 대한 자세한 내용은
file:///usr/share/doc/kernel-doc-version/Documentation/networking/ip-sysctl.txt
에서 참조하십시오. thin-stream에 대한 보다 자세한 내용은 file:///usr/share/doc/kernel-doc-version/Documentation/networking/tcp-thin.txt
에서 참조하십시오.
8.1.4. 투명 프록시 (TProxy) 지원
커널은 투명 프록시를 지원하기 위해 비로컬 바인딩된 IPv4 TCP 및 UDP 소켓을 처리할 수 있습니다. 이를 활성화하려면 iptable을 적절히 구성해야 합니다. 또한 정책 라우팅을 적절하게 설정 및 활성화해야 합니다.
투명 프록시에 대한 보다 자세한 내용은
file:///usr/share/doc/kernel-doc-version/Documentation/networking/tproxy.txt
에서 참조하십시오.
[4]
CPU와 NIC 간의 캐시 친화도를 보장하는 것은 동일한 L2 캐시를 공유하도록 설정하는 것을 의미합니다. 보다 자세한 내용은 8.3절. “패킷 수신 개요 ”에서 참조하십시오.