Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

8.3. 패킷 수신 개요

네트워크 병목 현상 및 성능 문제에 대한 분석을 위해 패킷 수신 작동 방법을 이해하고 있어야 합니다. 수신 경로에서 프레임이 자주 손실되기 때문에 패킷 수신은 네트워크 성능 튜닝에서 중요합니다. 수신 경로에서 손실된 프레임은 네트워크 성능을 크게 저하시킬 수 있습니다.
네트워크 수신 경로 다이어그램

그림 8.1. 네트워크 수신 경로 다이어그램

Linux 커널은 각 프레임을 수신하고 다음과 같은 4 단계의 과정을 수행합니다:
  1. 하드웨어 리셉션: NIC (network interface card)는 와이어에서 프레임을 수신합니다. 해당 드라이버 설정에 따라 NIC는 프레임을 내부 하드웨어 버퍼 메모리 또는 지정된 링 버퍼로 전송합니다.
  2. 하드 IRQ: NIC는 CPU를 인터럽트하여 넷 프레임의 존재를 주장합니다. 이는 NIC 드라이버가 인터럽트를 승인하고 소프트 IRQ 작업을 스케줄링합니다.
  3. 소프트 IRQ: 이 단계에서는 실제 프레임 수신 프로세스를 구현하고 softirq 문맥에서 실행합니다. 즉 이 단계는 지정된 CPU에서 실행되고 있는 모든 애플리케이션을 먼저 실행하지만 하드 IRQ의 주장을 허용합니다.
    이 문맥에서 (하드 IRQ로 동일한 CPU에서 실행하여 잠금 오버헤드를 최소화하고 있는) 커널은 실제로 NIC 하드웨어 버퍼에서 프레임을 제거하여 네트워크 스택을 통해 처리합니다. 여기서 프레임은 대상 청취 소켓에 전송, 삭제 또는 전달됩니다.
    소켓에 전달되면 프레임은 소켓을 소유하는 애플리케이션에 추가됩니다. 이러한 프로세스는 NIC 하드웨어 버퍼가 프레임을 소진할 때 까지 또는 장치 무게 (device weight) (dev_weight) 까지 반복됩니다. 장치 무게에 대한 보다 자세한 내용은 8.4.1절. “NIC 하드웨어 버퍼 ”에서 참조하십시오.
  4. 애플리케이션 수신: 애플리케이션은 프레임을 수신하고 표준 POSIX 호출 (read, recv, recvfrom)을 통해 소유한 소켓에서 큐를 분리합니다. 이 때에 네트워크를 통해 수신된 데이터는 네트워크 스택에 더이상 존재하지 않습니다.

8.3.1. CPU/캐시 친화도

수신 경로에서 높은 처리량을 유지하려면 L2 캐시를 hot으로 유지하는 것이 좋습니다. 이미 설명했듯이 네트워크 버퍼는 존재를 알리는 IRQ와 동일한 CPU에서 수신됩니다. 즉 버퍼 데이터는 수신 CPU의 L2 캐시에 있는 것입니다.
이 기능을 사용하려면 L2 캐시와 동일한 코어를 공유하는 NIC에서 가장 많이 데이터를 수신할 것으로 예상되는 애플리케이션에 프로세스 친화도를 배치합니다. 이는 캐시 적중 확률을 극대화하여 성능을 향상시킵니다.