멀티 큐 네트워크 카드는 원래 네트워크 IO QoS(서비스 품질) 문제를 해결하기 위해 사용된 기술입니다. 이후 네트워크 IO의 대역폭이 계속 증가함에 따라 단일 코어 CPU는 이러한 요구 사항을 완전히 충족할 수 없었습니다. 네트워크 카드 다중 대기열 네트워크 카드 드라이버 지원을 통해 네트워크 카드의 요구 사항을 충족하기 위해 인터럽트를 통해 각 대기열을 다른 코어에 바인딩합니다.
일반적인 것에는 Intel의 82575, 82576, Boardcom의 57711 등이 있습니다. 회사 서버에서 일반적으로 사용하는 Intel 82575 네트워크 카드를 예로 들어 다중 대기열 네트워크 카드의 하드웨어 구현을 분석합니다. 그리고 리눅스 커널 소프트웨어의 지원.
그림 1.1은 4개의 하드웨어 대기열이 있는 Intel 82575 하드웨어 논리 다이어그램입니다. 패킷이 수신되면 패킷 헤더의 SIP, Sport, DIP 및 Dport 4중을 해싱하여 항상 동일한 대기열에서 흐름을 수신합니다. 동시에 큐에 바인딩된 인터럽트가 트리거됩니다.
그림 1.1 82575 하드웨어 논리도
RSS(Receive Side Scaling)는 Networking을 할 수 있는 방식이다. 프로세서 시스템 아래의 여러 CPU 간에 수신된 메시지를 효율적으로 배포할 수 있는 카드 드라이버 기술입니다.
네트워크 카드는 수신된 메시지를 구문 분석하여 IP 주소, 프로토콜 및 포트 5배 정보를 얻습니다.
네트워크 카드는 구성된 HASH를 전달합니다. 함수는 5-튜플 정보를 기반으로 HASH 값을 계산하며, 2, 3, 4-튜플 정보를 기반으로 HASH 값을 계산할 수도 있습니다.
HASH 값(특정 네트워크 카드는 다를 수 있음)의 하위 숫자를 RETA(리디렉션 테이블)의 인덱스로 사용
RETA의 저장에 따라 해당 CPU에 값이 배분됩니다
다음 그림은 전체 처리 흐름을 설명합니다.
RSS 기술을 기반으로 프로그램은 배분할 수 있습니다. RETA를 수정하여 하드웨어 흐름을 통한 여러 CPU 간의 데이터 전송 및 동적 로드 밸런싱을 달성할 수 있습니다.
DPDK는 정적 해시 값 설정 및 RETA 구성을 지원합니다. 그러나 DPDK의 RSS는 포트를 기반으로 하며 포트의 수신 대기열에 따라 패킷이 배포됩니다. 예를 들어, 포트에 3개의 수신 큐(0,1,2)를 구성하고 RSS를 활성화하면 다음과 같습니다:
{0,1,2,0,1,2,0 . ........}
서로 다른 CPU에서 실행되는 애플리케이션은 서로 다른 수신 대기열에서 메시지를 수신하여 메시지 배포 효과를 얻습니다.
rte_eth_conf
, mq_mode
에서 rx_mode.mq_mode = ETH_MQ_RX_RSS
필드를 설정하여 DPDK에서 RSS 기능을 활성화합니다.
RSS 기능을 켜면 RSS로 계산된 해시 값이 해당 메시지에 해당하는 rte_pktmbuf
에 저장되며 pktmbuf.hash.rss
을 통해 확인할 수 있습니다. 이 값은 빠른 전달, 패킷 흐름 식별 등 해시 값을 다시 계산하지 않고도 후속 패킷 처리에 직접 사용할 수 있습니다.
RETA는 런타임에 구성 가능하므로 애플리케이션은 CPU에 해당하는 수신 대기열을 동적으로 변경하여 메시지 배포를 동적으로 조정할 수 있습니다. ixgbe_dev_rss_reta_update
및 ixgbe_dev_rss_reta_query
과 같은 PMD 모듈의 드라이버를 통해 구체적으로 구성됩니다.
위 내용은 네트워크 카드 다중 대기열 기술 및 RSS 기능에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!