Linux 네트워크 성능의 왕인 XDP 기술에 대해 이야기해 보겠습니다.
안녕하세요 여러분, 오늘은 사진 몇 장을 통해 XDP 기술에 대해 이야기해보겠습니다.
많은 Linux 개발자, 특히 네트워크 관련 개발에 종사하는 개발자는 XDP 기술에 익숙하지 않을 수 있습니다. Linux 개발자이고 XDP 기술을 모른다면 많은 기회를 놓칠 수 있습니다.
한 번은 XDP 기술을 적용하여 프로젝트를 최적화하고 네트워크 처리 성능을 3~4배 향상시키는 데 성공했습니다. 일부 사람들은 프로젝트의 원래 성능이 좋지 않다고 생각할 수 있으므로 개선의 여지가 상당히 큽니다.
현재 소프트웨어 아키텍처에서는 추가 최적화를 수행하더라도 성능 병목 현상을 제거하기가 쉽지 않을 것이라고 생각합니다. 보다 포괄적인 관점에서 이 문제를 해결하려면 보다 효율적인 아키텍처를 채택해야 합니다.
제 후속 프로젝트인 Magic Box에도 XDP 기술을 사용할 예정인데, XDP 기술을 사용한 후 Magic Box의 네트워크 성능이 약 3배 향상될 것으로 예상됩니다.
1. XDP 기술 소개
1.1 XDP 기술 배경
초고대역폭 네트워크 기술인 10G, 40G, 100G 네트워크의 출현으로 Linux 커널 프로토콜 스택은 점점 더 새로운 네트워크 기술의 개발에 적응할 수 없게 되었습니다. Linux 커널 프로토콜 스택은 병목 현상과 장애가 된 것 같습니다. 네트워크 성능의 낭비를 해결하기 위해 리눅스 커널은 새로운 기술인 Kernel Bypass 기술을 도입했습니다. Kernel Bypass 기술의 핵심 아이디어는 네트워크 데이터 패킷이 커널 프로토콜 스택을 건너 뛰고 처리된다는 것입니다. 이는 커널 프로토콜 스택을 방지하여 네트워크 성능을 크게 향상시킵니다.
XDP는 DPDK 기술에 대응하는 Linux 전용 커널 우회 기술입니다. DPDK는 성능 측면에서 우수한 성능을 발휘하지만 Linux 시스템에는 완전히 적합하지 않습니다.
1.2 XDP란 무엇인가요?
XDP는 eBPF 메커니즘을 사용하여 커널 공간에서 고성능 패킷 처리 및 전달을 달성하는 Linux 커널 기술입니다.
XDP는 네트워크 성능을 크게 향상시키고 유연한 프로그래밍 인터페이스를 제공하여 사용자가 다양한 맞춤형 네트워크 기능을 구현할 수 있도록 합니다. 기존 사용자 공간 패킷 처리와 비교하여 XDP는 패킷 처리 지연 및 CPU 사용량을 효과적으로 줄일 수 있습니다.
XDP 기술 작업 모드:
기본 모드(고성능, 네트워크 카드 지원 필요) 드라이버 모드는 네트워크 카드 드라이버에서 XDP 프로그램을 실행하고 네트워크 카드 드라이버에서 네트워크 데이터 패킷을 리디렉션합니다. 이 모드는 더 많은 네트워크 카드를 지원하며 네트워크 성능이 뛰어납니다. 카드가 지원한다면 이 모드를 사용해 보십시오.
제거 모드(최고 성능, 최소 지원 네트워크 카드)는 XDP 프로그램을 네트워크 카드에서 직접 제거하므로, 지금은 이에 대해 논의하지 않습니다.
범용 모드(우수한 성능, 최고의 Linux 커널 지원) XDP 프로그램은 드라이버 지원 없이 Linux 커널 프로토콜 스택의 입구에서 실행됩니다. 성능은 XDP의 다른 두 모드보다 낮지만 XDP 범용 모드에서도 최고의 시스템 성능은 약간의 개선을 가져옵니다.
향후 XDP 기술에 관한 특별한 주제가 있을 예정이므로 여기서는 다루지 않겠습니다.
2. AF_XDP 작동 원리
2.1 전체 아키텍처
많은 학생들이 XDP와 AF_XDP 기술을 쉽게 혼동합니다.
- XDP 기술은 BPF 기술을 기반으로 한 새로운 네트워크 기술입니다.
- AF_XDP는 XDP 기술의 응용 시나리오입니다. AF_XDP는 고성능 Linux 소켓입니다.
AF_XDP는 소켓 기능을 통해 생성되어야 합니다.
으아악AF_XDP 기술에는 몇 가지 중요한 지식 포인트가 포함됩니다.
사진
- AF_XDP는 네트워크 데이터 패킷의 전송 및 수신을 완료하려면 XDP 프로그램의 협력이 필요합니다.
- XDP 프로그램의 주요 작업은 MAC 주소, 5중 정보 등과 같은 이더넷 프레임의 관련 정보를 기반으로 데이터 패킷을 필터링하고 리디렉션하는 것입니다.
- AF_XDP는 이더넷 데이터 프레임을 처리하므로 사용자 프로그램은 이더넷 데이터 프레임을 보내고 받습니다.
- 사용자 프로그램인 AF_XDP, XDP는 UMEM이라는 공유 메모리 영역을 운영하게 됩니다.
- 네트워크 데이터 패킷을 수신하고 전송하려면 4개의 잠금 없는 링 큐를 사용해야 합니다.
2.2 UMEM 공유 메모리
UMEM 공유 메모리는 setockopt 함수를 통해 적용됩니다.
으아악UMEM 공유 메모리는 일반적으로 한 단위로 4K이고, 각 단위는 하나의 데이터 패킷을 저장할 수 있으며, UMEM 공유 메모리는 일반적으로 4096개 단위입니다.
수신 및 전송된 데이터 패킷은 UMEM 메모리 장치에 저장됩니다.
사용자 프로그램과 커널 모두 이 메모리 영역을 직접 운영할 수 있으므로 데이터 패킷을 보내고 받을 때 단순한 메모리 복사일 뿐이며 시스템 호출이 필요하지 않습니다.
用户程序需要维护一个UMEM内存使用记录,记录每一个UMEM单元是否已被使用,每个记录都会有一个相对地址,用于定位UMEM内存单元地址。
2.2 无锁环形队列
AF_XDP socket总共有4个无锁环形队列,分别为:
- 填充队列(FILL RING)
- 已完成队列(COMPLETION RING)
- 发送队列(TX RING)
- 接收队列(RX RING)
图片
环形队列创建方式:
//创建FILL RINGsetsockopt(fd, SOL_XDP, XDP_UMEM_FILL_RING,&umem->config.fill_size, sizeof(umem->config.fill_size)); //创建COMPLETION RINGsetsockopt(fd, SOL_XDP, XDP_UMEM_COMPLETION_RING,&umem->config.comp_size, sizeof(umem->config.comp_size));//创建RX RING setsockopt(xsk->fd, SOL_XDP, XDP_RX_RING,&xsk->config.rx_size, sizeof(xsk->config.rx_size));//创建TX RINGsetsockopt(xsk->fd, SOL_XDP, XDP_TX_RING, &xsk->config.tx_size, sizeof(xsk->config.tx_size));
4个环形队列实现方式基本相同,环形队列是对数组进行封装的数据结构,环形队列由5个重要部分组成:
- 生产者序号(producer)
生产者序号用于指示数组当前可生产的元素位置,如果队列已满,将不能再生产。
- 消费者序号(consumer)
消费者序号用于指示当前可消费的元素位置,如果队列已空,将不能再消费。
- 队列长度(len)
队列长度即数组长度。
- 队列掩码(mask)
mask=len-1,生产者和消费者序号不能直接使用,需要配合掩码使用,producer,consumer和mask进行与运算,可以获取到数组的索引值。
- 固定长度数组
数组的每一个元素记录了UMEM单元的相对地址,如果UMEM单元有发送和接收的数据包,还会记录数据包的长度。
环形队列的无锁化通过原子变量来实现,原子变量和原子操作在高性能编程中经常会用到。
2.3 AF_XDP接收数据包
AF_XDP接收数据包需要FILL RING,RX RING两个环形队列配合工作。
第一步:XDP程序获取可用UMEM单元。
FILL RING记录了可以用来接收数据包的UMEM单元数量,用户程序根据UMEM使用记录,定期的往FILL RING生产可用UMEM单元。
第二步:XDP填充新的接收数据包
XDP程序消费FILL RING中UMEM单元用于存放网络数据包,接收完数据包后,将UMEM单元和数据包长度重新打包,填充至RX RING队列,生产一个待接收的数据包。
第三步:用户程序接收网络数据包
用户程序检测到RX RING有待接的收数据包,消费RX RING中数据包,将数据包信息从UMEM单元中拷贝至用户程序缓冲区,同时用户程序需要再次填充FILL RING队列推动XDP继续接收数据。
图片
2.4 AF_XDP发送数据包
AF_XDP发送数据包需要COMP RING,TX RING两个环形队列配合工作。
第一步:用户程序确保有足够的UMEM发送单元
COMP RING记录了已完成发送的数据包(UMEM单元)数量,用户程序需要回收这部分UMEM单元,确保有足够的UMEM发送单元。
第二步:用户程序发送数据包
用户程序申请一个可用的UMEM单元,将数据包拷贝至该UMEM单元,然后生产一个待发送数据包填充值TX RING。
第三步:XDP发送数据包
XDP程序检测到TX RING中有待发送数据包,从TX RING消费一个数据包进行发送,发送完成后,将UMEM单元填充至COMP RING,生产一个已完成发送数据包,用户程序将对该数据包UMEM单元进行回收。
图片
3. AF_XDP高效的秘密
AF_XDP之所以高效,主要有三大原因:
- 内核旁路技术
内核旁路技术在处理网络数据包的时候,可以跳过Linux内核协议栈,相当于走了捷径,这样可以降低链路开销。
- 内存映射
用户程序和内核共享UMEM内存和无锁环形队列,采用mmap技术将内存进行映射,用户操作UMEM内存不需要进行系统调用,减少了系统调用上下文切换成本。
- 无锁环形队列
无锁环形队列采用原子变量实现,可以减少线程切换和上下文切换成本。
基于以上几点,AF_XDP必然是一个高性能的网络技术,由于目前没有一个能够测试XDP极限性能的测试环境,大家如果对AF_XDP技术感兴趣,可以自行上网搜索相关资料。
위 내용은 Linux 네트워크 성능의 왕인 XDP 기술에 대해 이야기해 보겠습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











대 코드 시스템 요구 사항 : 운영 체제 : Windows 10 이상, MacOS 10.12 이상, Linux 배포 프로세서 : 최소 1.6GHz, 권장 2.0GHz 이상의 메모리 : 최소 512MB, 권장 4GB 이상의 저장 공간 : 최소 250MB, 권장 1GB 및 기타 요구 사항 : 안정 네트워크 연결, Xorg/Wayland (LINUX)

VS 코드 확장을 설치하는 이유는 다음과 같습니다. 네트워크 불안정성, 불충분 한 권한, 시스템 호환성 문제, C 코드 버전은 너무 오래된, 바이러스 백신 소프트웨어 또는 방화벽 간섭입니다. 네트워크 연결, 권한, 로그 파일, 업데이트 대 코드 업데이트, 보안 소프트웨어 비활성화 및 대 코드 또는 컴퓨터를 다시 시작하면 점차 문제를 해결하고 해결할 수 있습니다.

VS 코드는 Mac에서 사용할 수 있습니다. 강력한 확장, GIT 통합, 터미널 및 디버거가 있으며 풍부한 설정 옵션도 제공합니다. 그러나 특히 대규모 프로젝트 또는 고도로 전문적인 개발의 경우 VS 코드는 성능 또는 기능 제한을 가질 수 있습니다.

VS Code는 Full Name Visual Studio Code로, Microsoft가 개발 한 무료 및 오픈 소스 크로스 플랫폼 코드 편집기 및 개발 환경입니다. 광범위한 프로그래밍 언어를 지원하고 구문 강조 표시, 코드 자동 완료, 코드 스 니펫 및 스마트 프롬프트를 제공하여 개발 효율성을 향상시킵니다. 풍부한 확장 생태계를 통해 사용자는 디버거, 코드 서식 도구 및 GIT 통합과 같은 특정 요구 및 언어에 확장을 추가 할 수 있습니다. VS 코드에는 코드에서 버그를 신속하게 찾아서 해결하는 데 도움이되는 직관적 인 디버거도 포함되어 있습니다.

메모장은 Java 코드를 직접 실행할 수는 없지만 다른 도구를 사용하여 명령 줄 컴파일러 (Javac)를 사용하여 Bytecode 파일 (filename.class)을 생성하면 달성 할 수 있습니다. Java Interpreter (Java)를 사용하여 바이트 코드를 해석하고 코드를 실행하고 결과를 출력하십시오.

Linux의 주요 용도에는 다음이 포함됩니다. 1. 서버 운영 체제, 2. 임베디드 시스템, 3. 데스크탑 운영 체제, 4. 개발 및 테스트 환경. Linux는이 분야에서 뛰어나 안정성, 보안 및 효율적인 개발 도구를 제공합니다.

Visual Studio Code (VSCODE)는 Microsoft가 개발 한 크로스 플랫폼, 오픈 소스 및 무료 코드 편집기입니다. 광범위한 프로그래밍 언어에 대한 가볍고 확장 성 및 지원으로 유명합니다. VSCODE를 설치하려면 공식 웹 사이트를 방문하여 설치 프로그램을 다운로드하고 실행하십시오. VScode를 사용하는 경우 새 프로젝트를 만들고 코드 편집, 디버그 코드, 프로젝트 탐색, VSCODE 확장 및 설정을 관리 할 수 있습니다. VSCODE는 Windows, MacOS 및 Linux에서 사용할 수 있으며 여러 프로그래밍 언어를 지원하며 Marketplace를 통해 다양한 확장을 제공합니다. 이점은 경량, 확장 성, 광범위한 언어 지원, 풍부한 기능 및 버전이 포함됩니다.

vs 코드 1 단계/다음 단계 바로 가기 키 사용 : 1 단계 (뒤로) : Windows/Linux : Ctrl ←; MACOS : CMD ← 다음 단계 (앞으로) : Windows/Linux : Ctrl →; MACOS : CMD →
