travelping / upg-vpp

User Plane Gateway (UPG) based on VPP
Apache License 2.0
150 stars 50 forks source link

Integration of upg-vpp inside PacketRusher #372

Closed linouxis9 closed 9 months ago

linouxis9 commented 10 months ago

Hi,

I'm currently working on an open-source gNB/UE Simulator which can act as 5G Core stress tester to evaluate the performance of the 5G Core, called PacketRusher. It can stress test a 5G Core both on the control plane and user plane side using a great amount of UEs.

For now, I've been using free5gc's gtp5g kernel module as the GTP-U stack of the tool. However, kernel modules have a lot of shortcomings and I've been looking to replace the GTP-U stack with something else.

Lately, I've been working on integrating eUPF's eBPF code inside PacketRusher. However, as PacketRusher is to be a performance-testing tool, I'm interested in also offering something more performant.

As such, I would be interested in integrating upg-vpp inside PacketRusher. PacketRusher is a Go tool unlike upg-vpp, and I'm not really interested in writing C-Go bindings to reuse the upg-vpp's code from PacketRusher.

Do you think it would make sense for a tool like PacketRusher to embed the full upg-vpp as-is, and then create sessions externally similar to your e2e tests in Go, eg. PacketRusher would configure PFCP Sessions inside upg-vpp to act as a RAN and send traffic toward the 5GC's UPF?

Sorry for the long message :-)

Thanks and cheers, Valentin

mgumz commented 9 months ago

@linouxis9

PacketRusher would configure PFCP Sessions inside upg-vpp to act as a RAN and send traffic toward the 5GC's UPF?

Just to understand your intend: You want to use upg-vpp as … load-generator to test 5GCs upf?

mogaika commented 9 months ago

Hi, @linouxis9

If I understand correctly load itself will be generated using linux udp/tcp sockets, so kernel sockets will be your limiting factor and it makes not much sense to integrate upg-vpp for this. GTPU encapsulation is simplest part of this processing and it's relatively easy to implement in golang with tap/XDP libraries

linouxis9 commented 9 months ago

Hi @mogaika,

Thanks a lot for your appreciated insights, you are totally right! And I've already began work on eBPF XDP over tap.

Thanks to the both of you.

Cheers, Valentin