1.
고속매매시스템에서의 네트워킹에서 소개했던 글이 있습니다. 유명한 Jump Trading에서 일하는 개발자가 쓴 논문입니다.
he Anatomy of Networking in High Frequency Trading
Low Latency와 관련한 주제를 다룰 때 항상 등장하는 주제를 다루고 있습니다. 논문 마지막의 주제는 Kernel Bypass입니다. Kernel Bypass는 제 블로그에서도 자주 다루었던 주제입니다. Kernel ByPass를 이해하려면 Linux Networking에서 Kernel의 역할을 이해하여야 합니다. 이를 잘 설명하는 글이 Linux Networking Part 1 : Kernel Net Stack입니다.
Kernel Bypass와 관련한 기술을 모두 소개하는 글이 있습니다. 2024년에 작성한 글인 Kernel Bypass Techniques in Linux for High-Frequency Trading: A Deep Dive입니다.
또다른 논문은 2022년 NetDev 때 발표한 Merging the Networking Worlds입니다.
위 글에서 다루는 주제는 아래입니다.
DPDK (Data Plane Development Kit)
PF_RING ZC (Zero Copy)
RDMA (Remote Direct Memory Access)
Solarflare/OpenOnload
Netmap
eBPF/XDP (Extended Berkeley Packet Filter/Express Data Path)
NetDev때 발표한 글이 위 주제를 깊게 다루고 있습니다. 발표자료가 정리한 XDP와 RDMA의 흐름도입니다.
2.
이 중에서 DPDK와 eBPF/XDP를 제외한 내용은 다루었습니다. 오늘은 eBPF/XDP를 소개하도록 하겠습니다. 먼저 eBPF/XDP와 관련한 처음 다룬 논문은 The eXpress data path: fast programmable packet processing in the operating system kernel입니다 Redhat 엔지니어들이 작성한 논문입니다. 위 논문을 우리말로 자세히 해제한 글입니다.
The eXpress Data Path (XDP): Fast Programmable Packet Processing in the Operating System Kernel 1
The eXpress Data Path (XDP): Fast Programmable Packet Processing in the Operating System Kernel 2
The eXpress Data Path (XDP): Fast Programmable Packet Processing in the Operating System Kernel 3
위 글외에도 숨핑 이라는 블로그중 The eXpress Data Path: Fast Programmable Packet Processing in the Operating System Kernel 혹은 eBPF/XDP: 당신만 모르는 안전하고 빠른 Networking은 우리말로 논문을 자세히 설명하고 있습니다. 두로 참고하시면.
위 논문에 있는 XDP 구조도입니다. AF_XDP 라고 하는 커널을 통하여 Userspace에서 직접 Device와 연겷하는 방식입니다.
AF_XDP (Address Family eXpress Data Path)는 2018년 리눅스 커널 4.18 버전에서 처음 도입하였고 고성능 패킷 처리를 위해 설계된 리눅스 커널 모듈입니다. AF_XDP는 eBPF 및 XDP(eXpress Data Path) 기술을 기반으로 합니다.
3.
eBPF/XDP를 이용하여 네트워크 프로그램을 개발하기 위한 다양한 자료가 있습니다. 최초 XDP개념을 제안했던 Redhat이 제공하는 글입니다.
Achieving high-performance, low-latency networking with XDP: Part I
Using eXpress Data Path (XDP) maps in RHEL 8: Part 2
ACM Journal에 실린 개념부터 프로그래밍 예제까지를 다루고 있는 논문입니다.
Fast Packet Processing with eBPF and XDP: Concepts, Code, Challenges, and Applications
위 논문을 읽으려면 권한이 필요한데 저자가 작성한 논문 초안을 읽을 수 있습니다.
Fast Packet Processing with eBPF and XDP: Concepts, Code,Challenges and Applications
영어가 아닌 한글로 된 글도 많은데 그중 하나입니다.
eBPF & XDP 기반의 고속 네트워크 프로그래밍
eBPF & XDP 기반의 고속 네트워크 프로그래밍(2)
개발자를 위한 정보는 조재혁님이 정리한 XDP(eXpress Data Path)이 무척 좋습니다. 제가 좋아하는 도표로 흐름을 이해할 수 있도록 해주셨습니다.
본문중 이런 부분이 있습니다.
AF_XDP는 고 성능의 패킷처리를 위해서 최적화된 Address family중에 하나입니다.
AF_XDP는 Kernel network stack을 거치지 않고 User space로 frames를 이동하는 것이며 Kernel을 완전히 우회(bypass) 하는 것은 아니지만 최대한 짧은 시간내에 Kernel내에서의 빠른 경로(in-kernel fast path)를 생성하며 Kernel space와 User space간 zero copy 및 XDP bytecode를 NIC에서 offloading 하는 이점등을 제공하며 Interrupt mode 및 Polling mode (DPDK polling mode driver는 항상 polling합니다.
우회가 아니다라고 합니다. 영어로 XDP=The eXpress Data Path라는 말의 뜻은 가장 빠른 경로라고 해석합니다. Bypass와 다른 의미입니다.
eBPF/XDP와 관련한 글을 보면서 든 생각을 정리하면. AF_XDP와 관련한 라이브러리를 이용하여 프로그램을 개발하여야 하기 때문에 범용성이 떨어집니다. Socket에 익숙한 개발자의 경우 학습을 해야 하는 시간이 필요합니다. 또한 Libvma나 OpenOnload가 제공하는 가속기능(TCP Accelerator)을 지원하지 않기때문에 별도로 구현하여야 하는 부담이 있슴니다.
근본적으로 특정한 하드웨어(이더넷 카드)에 종속적이지만 하드웨어 지원이 없이 XDP를 이용한 프로그램이 libvma나 Openonload와 비교하여 더 latency를 줄일 수 있을지 의문이 드네요.





