Remix.run Logo
barryvand 2 days ago

ooh no more DPDK, this will make it a lot easier. I just started working with trex but it's all really complicated. Going to give this a try

tptacek 2 days ago | parent [-]

I think, and I'm saying this in part to get someone to correct me, that post-XDP (so 5 years or so now) DPDK is basically obsolete. Is there a circumstance where it would make sense to start from DPDK rather than XDP?

touisteur 2 days ago | parent | next [-]

I think access to offload engines is a big part of the appeal of dpdk still, especially for me all the GPUdirect nvidia-only packet steerer.

I need to check about the af_xdp ecosystem around fragmentation/reassembly in UDP too, every time I needed something there DPDK had it, often with an offload path.

Some silly stuff in DPDK are very useful for testing too (in-memory devices).

Also I'm not clear on the virtualization story on af_xdp, with dpdk I got something working at full blast 400G in VMs with little (but finnicky) work.

tptacek 2 days ago | parent [-]

I am corrected. Thanks! :)

touisteur a day ago | parent [-]

I half-wished I'd get Cunningham's law-ed here. I read a bit more and there seems to be some support for tcp and udp offload, https://netdevconf.info/0x17/sessions/talk/tcp-offload-via-a... but I haven't checked how easy it is to use.

A lot of the socket featureset of io_uring seems available in AF_XDP https://docs.kernel.org/networking/af_xdp.html which shows lots of progress since I looked last.

To get an idea of what DPDK gives low-level access to there is the overview https://doc.dpdk.org/guides/nics/features.html and my "favorite annual terabit read" https://doc.dpdk.org/guides/nics/mlx5.html#mlx5-net-features for NVIDIA NICs. Broadcom has some fun stuff too. The first time you hit top RX speed (2x400G my latest) with only one busy core (yay DMA engines) is always a thrill.

tptacek a day ago | parent [-]

I'm definitely familiar with DPDK, but when I think about it I mostly just think "polling mode driver" and not "offloading".

pstavirs 2 days ago | parent | prev | next [-]

At this point there's a much bigger ecosystem for DPDK than AF_XDP I think. Also more people know about DPDK than AF_XDP right now e.g. the Ostinato traffic generator's line-rate Turbo functionality uses AF_XDP but most customers assume it uses DPDK.

Disclosure: Ostinato creator here.

trevex 2 days ago | parent | prev | next [-]

While I am a big proponent of XDP there are use-cases better suited to DPDK: Being able to offload flows and crypto operations to the NIC is important to a lot of use-cases. The first packet to user space is essentially the slow path even with DMA, that sets up the fast path.

bgpdude 2 days ago | parent | prev [-]

I think you're correct. Not really aware of any real limitations, other than it's slightly slower than dpdk (it's not a complete bypass), but at a much easier ease of use.

tptacek 2 days ago | parent [-]

AF_XDP kind of is a complete bypass, right? RX get scooped right off the DMA buffer for the card, and TX get shoved right back in.

bgpdude 2 days ago | parent [-]

Yeah fair point. I should have been more precise. AF_XDP with ZC bypasses the kernel networking stack and the NIC DMA's directly into UMEM and so in that sense it absolutely is a kernel bypass.

The difference I was getting at vs DPDK is that the kernel NIC driver/NAPI/XDP path is still involvd. With DPDK the userspace PMD is effectively driving the NIC and accessing the queues directly.

either way, it's great and everyone should use it :) that is assuming they have a use case for it. The use-cases are perhaps somewhat limited as it also bypasses the kernel tcp-ip stack, so you gotta do a lot yourself.