Linux tc qdisc를 통한 10Gbps 문제가 해결되었습니까?

Linux tc qdisc를 통한 10Gbps 문제가 해결되었습니까?

tc10Gbps NIC가 있는 시스템에서 트래픽 셰이핑을 시도했지만 어떤 qdisc로도 10Gbps 근처에 도달할 수 없다는 것을 발견했습니다. 내가 할 때 :

tc qdisc add dev $ifc root handle 1: htb default ffff
tc class add dev $ifc parent 1:0 classid 1:1 htb rate 32Gbit
tc class add dev $ifc parent 1:1 classid 1:ffff htb rate 1Gbit ceil 16Gbit burst 1G cburst 1G

내 처리량은 약 3Gbps로 제한됩니다. 저는 CBQ와 HFSC의 변형을 시도했습니다. 내가 무엇을 하든 이 문제를 해결할 수 없는 것 같습니다.

그냥 qdiscdos를 추가하세요아니요문제를 일으킵니다(앞서 말했듯이). 나는 모든 언급 tcqdisc내가 찾을 수 있는 "10G"를 읽는 데 며칠을 보냈습니다. 6~10년 전에 메일링 리스트 활동이 많이 있었던 것 같습니다(아마도 10G가 대중화되고 1G를 대체하는 시점). 그러나 해결책은 없습니다. 내가 뭐 놓친 거 없니? Linux에서는 초당 기가비트를 형성하는 것이 불가능합니까?

답변1

이는 qdisc 잠금 문제 때문입니다(기본적으로 하나의 CPU 코어에 고정됨). 알려진 솔루션은 XDP-리디렉션, XPS 및HTB 제거.

XDP 리디렉션 솔루션은xdp-cpumap-tc각 CPU 코어에 대해 별도의 HTB qdisc를 생성한 다음 XDP 리디렉션을 사용하여 해당 CPU/최상위 HTB에 대한 IP 트래픽을 필터링합니다.

우리는 이라는 프로그램을 개발했습니다.무료 QoSxdp-cpumap-tc를 사용하며 우리는 XDP가 적어도 우리 사용 사례에서는 매우 좋은 솔루션이라는 것을 알았습니다. 트래픽을 CPU 코어당 약 4~6Gbps로 나눌 수 있어야 하는 등 몇 가지 중요한 제한 사항이 있습니다. 이는 큰 총 처리량(약 20Gbps 이상)이 될 수 있지만, 4Gbps 이상의 처리량을 형성하기 위해 단일 HTB 리프가 필요한 경우 HTB의 qdisc 잠금 문제가 커널에서 해결될 때까지는 불가능합니다.

HTB 오프로딩도 잠재적인 솔루션입니다. 처리량이 매우 좋습니다. 단점은 Mellanox/Intel 네트워크 카드만 지원하고 최대 리프 깊이가 레벨 3이라는 점입니다.

관련 정보