This describes simple performance measurements of several open source UPFs by using the traffic generator TRex as the performance measurement tool and Simple PFCP Client as the PFCP simulator. This was measured on the VMs on Proxmox VE. For other measurement results, please see Performance Measurement.
Note. Performance measurement results are highly dependent on the measurement conditions. These results are only examples of results under certain measurement conditions. And this is a very simple measurement, and according to this comment, it doesn't seem to make much sense to measure between VMs. I hope it will serve as a reference for a simple configuration when measuring on real devices.
- Simple Overview of UPF Performance Measurements
- Changes in configuration files of Simple PFCP Client, TRex and UPFs
- Changes in configuration files of Simple PFCP Client
- Changes in configuration files of TRex
- Changes in configuration files of UPFs
- a-1. Changes in configuration files of Open5GS 5GC UPF (TUN)
- a-2. Changes in configuration files of Open5GS 5GC UPF (TAP)
- b. Changes in configuration files of free5GC 5GC UPF
- c. Changes in configuration files of UPG-VPP
- d. Changes in configuration files of eUPF
- e-1. Changes in configuration files of OAI-CN5G-UPF (Simple Switch)
- e-2. Changes in configuration files of OAI-CN5G-UPF (eBPF/XDP)
- Network settings of TRex and UPFs
- Network settings of TRex
- a-1. Network settings of Open5GS 5GC UPF (TUN)
- a-2. Network settings of Open5GS 5GC UPF (TAP)
- b. Network settings of free5GC 5GC UPF
- c. Network settings of UPG-VPP
- d. Network settings of eUPF
- e-1. Network settings of OAI-CN5G-UPF (Simple Switch)
- e-2. Network settings of OAI-CN5G-UPF (eBPF/XDP)
- Build Simple PFCP Client, TRex and UPFs
- Run Simple PFCP Client, TRex and UPFs
- Measure UPF Performance
- Results
- Changelog (summary)
I will easily measure the performance of several open source UPFs by using TRex as the traffic generator and Simple PFCP Client as the PFCP simulator. Note that this configuration is implemented with Proxmox VE VMs.
The following minimum configuration was set as a condition.
- One PFCP client, TRex and DUT (UPF)
The built simulation environment is as follows.
Simple PFCP Client, TRex used are as follows.
- Simple PFCP Client (2026.01.14) - https://github.com/s5uishida/simple_pfcp_client
- TRex v3.08 (2025.11.05) - https://github.com/cisco-system-traffic-generator/trex-core
- Scapy v2.6.1 (2024.11.05) - https://github.com/secdev/scapy
The UPFs used are as follows.
- Open5GS v2.7.6 (2026.01.17) - https://github.com/open5gs/open5gs
- free5GC UPF (go-upf) v1.2.8 (2026.01.05) - https://github.com/free5gc/go-upf
gtp5g v0.9.16 (2025.12.02) - https://github.com/free5gc/gtp5g - UPG-VPP v1.13.0 (2024.03.25) - https://github.com/travelping/upg-vpp
- eUPF v0.7.1 (2025.06.16) - https://github.com/edgecomllc/eupf
- OAI-CN5G-UPF v2.2.0 (2025.12.13) - https://gitlab.eurecom.fr/oai/cn5g/oai-cn5g-upf
Each VMs are as follows.
| VM | SW & Role | IP address | OS | CPU | Mem | HDD |
|---|---|---|---|---|---|---|
| VM1 | Simple PFCP Client | 192.168.0.111/24 | Ubuntu 24.04 | 1 | 1GB | 10GB |
| VM-TG | TRex Traffic Generator |
192.168.0.131/24 | Ubuntu 24.04 | 3 | 8GB | 10GB |
| VM-DUT | each UPF DUT (Device Under Test) |
192.168.0.151/24 | Ubuntu 24.04 | 2 | 8GB | 20GB |
Each VM-DUT(UPFs) are as follows.
| # | SW / packet processing | Date | Commit | OS |
|---|---|---|---|---|
| a | Open5GS UPF v2.7.6 user space |
2026.01.17 | 926256b78de9409387ebbb3e05904784dd65e83a |
Ubuntu 24.04 |
| b | free5GC UPF (go-upf) v1.2.8 kernel module |
2026.01.05 | b798fe5ee6a984be492fa53958dd5f1305469f85 |
Ubuntu 24.04 |
| c | UPG-VPP v1.13.0 DPDK/VPP |
2024.03.25 | dfdf64000566d35955d7c180720ff66086bd3572 |
Ubuntu 24.04 |
| d | eUPF v0.7.1 eBPF/XDP |
2025.06.16 | a8d774a0533ad71ddd59899be26f4aee8a31b5d2 |
Ubuntu 24.04 |
| e | OAI-CN5G-UPF v2.2.0 eBPF/XDP |
2025.12.13 | e025cdfb3a9c18a228f2efe36bd06b9de998554c |
Ubuntu 24.04 |
The network interfaces of each VM except VM-DUT are as follows.
| VM | Device | Model | Linux Bridge | IP address | Interface |
|---|---|---|---|---|---|
| VM1 | ens18 | VirtIO | vmbr1 | 10.0.0.111/24 | (NAPT NW) |
| ens19 | VirtIO | mgbr0 | 192.168.0.111/24 | (Mgmt NW) | |
| ens20 | VirtIO | vmbr4 | 192.168.14.111/24 | N4 | |
| VM-TG | |||||
| ens19 | VirtIO | mgbr0 | 192.168.0.131/24 | (Mgmt NW) | |
| ens20 | VirtIO | vmbr3 | 192.168.13.131/24 | N3 (Under DPDK by uio_pci_generic) | |
| ens21 | VirtIO | vmbr6 | 192.168.16.152/24 | N6 (Under DPDK by uio_pci_generic) |
The network interfaces of each VM-DUT(UPFs) are as follows.
| # | SW | Device | Model | Linux Bridge | IP address | Interface |
|---|---|---|---|---|---|---|
| a | Open5GS UPF | |||||
| ens19 | VirtIO | mgbr0 | 192.168.0.151/24 | (Mgmt NW) | ||
| ens20 | VirtIO | vmbr3 | 192.168.13.151/24 | N3 | ||
| ens21 | VirtIO | vmbr4 | 192.168.14.151/24 | N4 | ||
| ens22 | VirtIO | vmbr6 | 192.168.16.151/24 | N6 | ||
| b | free5GC UPF (go-upf) |
|||||
| ens19 | VirtIO | mgbr0 | 192.168.0.151/24 | (Mgmt NW) | ||
| ens20 | VirtIO | vmbr3 | 192.168.13.151/24 | N3 | ||
| ens21 | VirtIO | vmbr4 | 192.168.14.151/24 | N4 | ||
| ens22 | VirtIO | vmbr6 | 192.168.16.151/24 | N6 | ||
| c | UPG-VPP | |||||
| ens19 | VirtIO | mgbr0 | 192.168.0.151/24 | (Mgmt NW) | ||
| ens20 | VirtIO | vmbr3 | 192.168.13.151/24 | N3 (Under DPDK by vfio-pci) | ||
| ens21 | VirtIO | vmbr4 | 192.168.14.151/24 | N4 (Under DPDK by vfio-pci) | ||
| ens22 | VirtIO | vmbr6 | 192.168.16.151/24 | N6 (Under DPDK by vfio-pci) | ||
| d | eUPF | |||||
| ens19 | VirtIO | mgbr0 | 192.168.0.151/24 | (Mgmt NW) | ||
| ens20 | VirtIO | vmbr3 | 192.168.13.151/24 | N3 (XDP) | ||
| ens21 | VirtIO | vmbr4 | 192.168.14.151/24 | N4 | ||
| ens22 | VirtIO | vmbr6 | 192.168.16.151/24 | N6 (XDP) | ||
| e | OAI-CN5G-UPF | |||||
| ens19 | VirtIO | mgbr0 | 192.168.0.151/24 | (Mgmt NW) | ||
| ens20 | VirtIO | vmbr3 | 192.168.13.151/24 | N3 (XDP) | ||
| ens21 | VirtIO | vmbr4 | 192.168.14.151/24 | N4 | ||
| ens22 | VirtIO | vmbr6 | 192.168.16.151/24 | N6 (XDP) |
Linux Bridges of Proxmox VE are as follows.
| Linux Bridge | Network CIDR | Interface |
|---|---|---|
| vmbr1 | 10.0.0.0/24 | NAPT NW |
| mgbr0 | 192.168.0.0/24 | Mgmt NW |
| vmbr3 | 192.168.13.0/24 | N3 |
| vmbr4 | 192.168.14.0/24 | N4 |
| vmbr6 | 192.168.16.0/24 | N6 |
UE IP address and TEID are as follows.
| UE IP address | UpLink TEID | DownLink TEID |
|---|---|---|
| 10.45.0.2/24 | 0x00000001 | 0x00000002 |
Please refer to the following for building Simple PFCP Client, TRex and UPFs respectively.
- Simple PFCP Client (2026.01.14) - https://github.com/s5uishida/simple_pfcp_client
- TRex v3.08 (2026.01.14) - https://github.com/s5uishida/install_trex
- Open5GS v2.7.6 (2026.01.17) - https://open5gs.org/open5gs/docs/guide/02-building-open5gs-from-sources/
- free5GC UPF (go-upf) v1.2.8 (2026.01.05) - https://free5gc.org/guide/
- UPG-VPP v1.13.0 (2024.03.25) - https://github.com/s5uishida/install_vpp_upf_dpdk
- eUPF v0.7.1 (2025.06.16) - https://github.com/s5uishida/install_eupf
- OAI-CN5G-UPF v2.2.0 (2025.12.13) - https://github.com/s5uishida/install_oai_upf
See here for the original file.
/root/pfcp_request.py
There is no change.
See here for the original file.
/etc/trex_cfg.yaml
There is no change.
See here for the original load profiles.
-
/opt/trex/stl/gtp_1pkt_simple.pyfor UpLink
There is no change. -
/opt/trex/stl/udp_1pkt_simple.pyfor DownLink
There is no change.
See here for the original latency profiles.
-
/opt/trex/stl/gtp_latency_1pkt_simple.pyfor UpLink
There is no change. -
/opt/trex/stl/udp_latency_1pkt_simple.pyfor DownLink
There is no change.
open5gs/install/etc/open5gs/upf.yaml
--- upf.yaml.orig 2024-05-02 19:52:00.000000000 +0900
+++ upf.yaml 2024-05-19 12:38:00.000000000 +0900
@@ -11,18 +11,18 @@
upf:
pfcp:
server:
- - address: 127.0.0.7
+ - address: 192.168.14.151
client:
# smf: # UPF PFCP Client try to associate SMF PFCP Server
# - address: 127.0.0.4
gtpu:
server:
- - address: 127.0.0.7
+ - address: 192.168.13.151
session:
- subnet: 10.45.0.0/16
gateway: 10.45.0.1
- - subnet: 2001:db8:cafe::/48
- gateway: 2001:db8:cafe::1
+ dnn: internet
+ dev: ogstun
metrics:
server:
- address: 127.0.0.7open5gs/install/etc/open5gs/upf.yaml
--- upf.yaml.orig 2024-05-02 19:52:00.000000000 +0900
+++ upf.yaml 2024-09-23 14:00:20.724467385 +0900
@@ -11,18 +11,18 @@
upf:
pfcp:
server:
- - address: 127.0.0.7
+ - address: 192.168.14.151
client:
# smf: # UPF PFCP Client try to associate SMF PFCP Server
# - address: 127.0.0.4
gtpu:
server:
- - address: 127.0.0.7
+ - address: 192.168.13.151
session:
- subnet: 10.45.0.0/16
gateway: 10.45.0.1
- - subnet: 2001:db8:cafe::/48
- gateway: 2001:db8:cafe::1
+ dnn: internet
+ dev: ogstap
metrics:
server:
- address: 127.0.0.7go-upf/upfcfg.yaml
--- upfcfg.yaml.orig 2024-10-14 04:53:12.341028732 +0900
+++ upfcfg.yaml 2024-10-14 06:11:36.636303534 +0900
@@ -4,8 +4,8 @@
# PFCP Configuration
# The listen IP and nodeID of the N4 interface on this UPF (Can't set to 0.0.0.0)
pfcp:
- addr: 127.0.0.8 # IP addr for listening
- nodeID: 127.0.0.8 # External IP or FQDN can be reached
+ addr: 192.168.14.151 # IP addr for listening
+ nodeID: 192.168.14.151 # External IP or FQDN can be reached
retransTimeout: 1s # retransmission timeout
maxRetrans: 3 # the max number of retransmission
@@ -18,7 +18,7 @@
# If you bind to a specific IP, ensure SMF uses the same IP in its N3 configuration.
# If you bind to all (0.0.0.0), SMF can use any of the available UPF IPs, but do not use 0.0.0.0 in SMF.
ifList:
- - addr: 127.0.0.8
+ - addr: 192.168.13.151
type: N3
# name: upf.5gc.nctu.me
# ifname: gtpif
@@ -28,9 +28,7 @@
# List of Data Network Names (DNN) supported by this UPF.
dnnList:
- dnn: internet # Data Network Name
- cidr: 10.60.0.0/16 # Classless Inter-Domain Routing for assigned IPv4 pool of UE
- - dnn: internet # Data Network Name
- cidr: 10.61.0.0/16 # Classless Inter-Domain Routing for assigned IPv4 pool of UE
+ cidr: 10.45.0.0/16 # Classless Inter-Domain Routing for assigned IPv4 pool of UE
# natifname: eth0
# Logging ConfigurationSee here for the original files.
-
upg-vpp/startup.conf
There is no change. -
upg-vpp/init.conf
There is no change.
See here for the original file.
eupf/config.yml
There is no change.
See here for the original file.
And change this config.yaml to apply Simple Switch mode.
Additionally, to prevent performance degradation, change the log level like this.
openair-upf/config.yaml
See here for the original file.
openair-upf/config.yaml
There is no change.
Set the OS kernel parameter according to this.
First, uncomment the next line in the /etc/sysctl.conf file and reflect it in the OS.
net.ipv4.ip_forward=1
# sysctl -p
Next, down the interface ens18 of the VM-DUT to delete default GW.
# ip link set dev ens18 down
Then, configure the TUNnel interface.
# ip tuntap add name ogstun mode tun
# ip addr add 10.45.0.1/16 dev ogstun
# ip link set ogstun up
First, uncomment the next line in the /etc/sysctl.conf file and reflect it in the OS.
net.ipv4.ip_forward=1
# sysctl -p
Next, down the interface ens18 of the VM-DUT to delete default GW.
# ip link set dev ens18 down
Then, configure the TAP interface.
# ip tuntap add name ogstap mode tap
# ip addr add 10.45.0.1/16 dev ogstap
# ip link set ogstap up
First, uncomment the next line in the /etc/sysctl.conf file and reflect it in the OS.
net.ipv4.ip_forward=1
# sysctl -p
Next, down the interface ens18 of the VM-DUT to delete default GW.
# ip link set dev ens18 down
See this.
First, uncomment the next line in the /etc/sysctl.conf file and reflect it in the OS.
net.ipv4.ip_forward=1
# sysctl -p
Next, down the interface ens18 of the VM-DUT to delete default GW.
# ip link set dev ens18 down
First, see this.
Then, down the interface ens18 of the VM-DUT to delete default GW.
# ip link set dev ens18 down
Down the interface ens18 of the VM-DUT to delete default GW.
# ip link set dev ens18 down
Please refer to the following for building Simple PFCP Client, TRex and UPFs respectively.
- Simple PFCP Client (2026.01.14) - https://github.com/s5uishida/simple_pfcp_client
- TRex v3.08 (2026.01.14) - https://github.com/s5uishida/install_trex
- Open5GS v2.7.6 (2026.01.17) - https://github.com/s5uishida/install_open5gs_upf
- free5GC UPF (go-upf) v1.2.8 (2026.01.05) - https://github.com/s5uishida/install_goupf
- UPG-VPP v1.13.0 (2024.03.25) - https://github.com/s5uishida/install_vpp_upf_dpdk
- eUPF v0.7.1 (2025.06.16) - https://github.com/s5uishida/install_eupf
- OAI-CN5G-UPF v2.2.0 (2025.12.13) - https://github.com/s5uishida/install_oai_upf
First run each UPF, then Simple PFCP Client and TRex last. Each UPF uses the same IP address, so start only the UPF you want to measure.
Please use the configuration files changed for TUN interface.
# cd open5gs
# ./install/bin/open5gs-upfd
Please use the configuration files changed for TAP interface.
# cd open5gs
# ./install/bin/open5gs-upfd
# cd go-upf
# ./upf -c upfcfg.yaml
See this.
See this.
See this.
See this.
See this.
Please refer to this to run TRex.
Please see below for methods for measuring UpLink and DownLink performances.
In this measurement, the UDP payload size is set to 1400 bytes.
| # | UPF / Date | UpLink Gbps |
Kpps |
(VM-TG) CPU%[1] |
DownLink Gbps |
Kpps |
(VM-TG) CPU%[1] |
|---|---|---|---|---|---|---|---|
| a-1 | Open5GS UPF v2.7.6 (TUN) 2026.01.17 |
Tx:1.79 Rx:1.11 |
Tx:150.05 Rx:95.96 |
1.82 | Tx:1.74 Rx:1.21 |
Tx:150.13 Rx:101.75 |
1.4 |
| a-2 | Open5GS UPF v2.7.6 (TAP) 2026.01.17 |
Tx:1.79 Rx:1.13 |
Tx:149.95 Rx:97.65 |
1.35 | Tx:1.73 Rx:1.2 |
Tx:149.53 Rx:100.92 |
1.57 |
| b | free5GC UPF v1.2.8 2026.01.05 |
Tx:5.92 Rx:4.81 |
Tx:496.44 Rx:416.04 |
6.51 | Tx:5.77 Rx:3.92 |
Tx:498.45 Rx:330.15 |
6.04 |
| c | UPG-VPP v1.13.0 2024.03.25 |
Tx:10.35 Rx:8.2 |
Tx:868.58 Rx:708.5 |
11.05 | Tx:10.04 Rx:8.19 |
Tx:867.78 Rx:690.39 |
12.78 |
| d | eUPF v0.7.1 (native mode) 2025.06.16 |
Tx:11.48 Rx:9.58 |
Tx:963.22 Rx:828.42 |
67.53 | Tx:11.08 Rx:9.72 |
Tx:957.63 Rx:815.05 |
65.42 |
| e-1 | OAI-CN5G-UPF v2.2.0 (Simple Switch) 2025.12.13 |
Tx:2.38 Rx:1.33 |
Tx:200.03 Rx:114.85 |
2.52 | Tx:2.31 Rx:1.99 |
Tx:199.61 Rx:166.65 |
2.41 |
| e-2 | OAI-CN5G-UPF v2.2.0 (eBPF/XDP) 2025.12.13 |
Tx:11.39 Rx:9.58 |
Tx:955.15 Rx:827.88 |
66.71 | Tx:11.25 Rx:9.82 |
Tx:972.35 Rx:823.87 |
65.25 |
- CPU load - per core of TRex VM (VM-TG). In this case only one core is used.
a-1. logs for Open5GS UPF v2.7.6 (TUN)
UpLink measurement
start -f stl/gtp_1pkt_simple.py -p 0 -m 150kpps -d 60
Global Statistics
connection : localhost, Port 4501 total_tx_L2 : 1.79 Gbps
version : STL @ v3.08 total_tx_L1 : 1.81 Gbps
cpu_util. : 1.82% @ 1 cores (1 per dual port) total_rx : 1.11 Gbps
rx_cpu_util. : 0.15% / 95.96 Kpps total_pps : 150.05 Kpps
async_util. : 0% / 17.83 bps drop_rate : 678.53 Mbps
total_cps. : 0 cps queue_full : 20,153 pkts
Port Statistics
port | 0 | 1 | total
-----------+-------------------+-------------------+------------------
owner | root | root |
link | UP | UP |
state | TRANSMITTING | IDLE |
speed | 200 Gb/s | 200 Gb/s |
CPU util. | 1.82% | 0.0% |
-- | | |
Tx bps L2 | 1.79 Gbps | 0.02 bps | 1.79 Gbps
Tx bps L1 | 1.81 Gbps | 0.03 bps | 1.81 Gbps
Tx pps | 150.05 Kpps | 0 pps | 150.05 Kpps
Line Util. | 0.91 % | 0 % |
--- | | |
Rx bps | 0 bps | 1.11 Gbps | 1.11 Gbps
Rx pps | 0 pps | 95.96 Kpps | 95.96 Kpps
---- | | |
opackets | 5732680 | 2 | 5732682
ipackets | 0 | 3637927 | 3637927
obytes | 8541693200 | 92 | 8541693292
ibytes | 0 | 5260438270 | 5260438270
tx-pkts | 5.73 Mpkts | 2 pkts | 5.73 Mpkts
rx-pkts | 0 pkts | 3.64 Mpkts | 3.64 Mpkts
tx-bytes | 8.54 GB | 92 B | 8.54 GB
rx-bytes | 0 B | 5.26 GB | 5.26 GB
----- | | |
oerrors | 0 | 0 | 0
ierrors | 0 | 0 | 0
status: |
Press 'ESC' for navigation panel...
status:
tui>
DownLink measurement
start -f stl/udp_1pkt_simple.py -p 1 -m 150kpps -d 60
Global Statistics
connection : localhost, Port 4501 total_tx_L2 : 1.74 Gbps
version : STL @ v3.08 total_tx_L1 : 1.76 Gbps
cpu_util. : 1.4% @ 1 cores (1 per dual port) total_rx : 1.21 Gbps
rx_cpu_util. : 0.25% / 101.76 Kpps total_pps : 150.13 Kpps
async_util. : 0% / 15.53 bps drop_rate : 530.42 Mbps
total_cps. : 0 cps queue_full : 27,375 pkts
Port Statistics
port | 0 | 1 | total
-----------+-------------------+-------------------+------------------
owner | root | root |
link | UP | UP |
state | IDLE | TRANSMITTING |
speed | 200 Gb/s | 200 Gb/s |
CPU util. | 0.0% | 1.4% |
-- | | |
Tx bps L2 | 1.41 bps | 1.74 Gbps | 1.74 Gbps
Tx bps L1 | 2.02 bps | 1.76 Gbps | 1.76 Gbps
Tx pps | 0 pps | 150.13 Kpps | 150.13 Kpps
Line Util. | 0 % | 0.88 % |
--- | | |
Rx bps | 1.21 Gbps | 0 bps | 1.21 Gbps
Rx pps | 101.75 Kpps | 0 pps | 101.75 Kpps
---- | | |
opackets | 6000003 | 1870234 | 7870237
ipackets | 1260211 | 3813208 | 5073419
obytes | 8940003026 | 2704355564 | 11644358590
ibytes | 1867629858 | 5513894596 | 7381524454
tx-pkts | 6 Mpkts | 1.87 Mpkts | 7.87 Mpkts
rx-pkts | 1.26 Mpkts | 3.81 Mpkts | 5.07 Mpkts
tx-bytes | 8.94 GB | 2.7 GB | 11.64 GB
rx-bytes | 1.87 GB | 5.51 GB | 7.38 GB
----- | | |
oerrors | 0 | 0 | 0
ierrors | 0 | 0 | 0
status: \
Press 'ESC' for navigation panel...
status:
tui>
a-2. logs for Open5GS UPF v2.7.6 (TAP)
UpLink measurement
start -f stl/gtp_1pkt_simple.py -p 0 -m 150kpps -d 60
Global Statistics
connection : localhost, Port 4501 total_tx_L2 : 1.79 Gbps
version : STL @ v3.08 total_tx_L1 : 1.81 Gbps
cpu_util. : 1.35% @ 1 cores (1 per dual port) total_rx : 1.13 Gbps
rx_cpu_util. : 0.15% / 97.65 Kpps total_pps : 149.95 Kpps
async_util. : 0% / 4.65 bps drop_rate : 657.79 Mbps
total_cps. : 0 cps queue_full : 10,721 pkts
Port Statistics
port | 0 | 1 | total
-----------+-------------------+-------------------+------------------
owner | root | root |
link | UP | UP |
state | TRANSMITTING | IDLE |
speed | 200 Gb/s | 200 Gb/s |
CPU util. | 1.35% | 0.0% |
-- | | |
Tx bps L2 | 1.79 Gbps | 0.7 bps | 1.79 Gbps
Tx bps L1 | 1.81 Gbps | 1.01 bps | 1.81 Gbps
Tx pps | 149.95 Kpps | 0 pps | 149.95 Kpps
Line Util. | 0.91 % | 0 % |
--- | | |
Rx bps | 0 bps | 1.13 Gbps | 1.13 Gbps
Rx pps | 0 pps | 97.65 Kpps | 97.65 Kpps
---- | | |
opackets | 2142215 | 1 | 2142216
ipackets | 0 | 1331921 | 1331921
obytes | 3191900350 | 46 | 3191900396
ibytes | 0 | 1925956366 | 1925956366
tx-pkts | 2.14 Mpkts | 1 pkts | 2.14 Mpkts
rx-pkts | 0 pkts | 1.33 Mpkts | 1.33 Mpkts
tx-bytes | 3.19 GB | 46 B | 3.19 GB
rx-bytes | 0 B | 1.93 GB | 1.93 GB
----- | | |
oerrors | 0 | 0 | 0
ierrors | 0 | 0 | 0
status: |
Press 'ESC' for navigation panel...
status:
tui>
DownLink measurement
start -f stl/udp_1pkt_simple.py -p 1 -m 150kpps -d 60
Global Statistics
connection : localhost, Port 4501 total_tx_L2 : 1.73 Gbps
version : STL @ v3.08 total_tx_L1 : 1.75 Gbps
cpu_util. : 1.57% @ 1 cores (1 per dual port) total_rx : 1.2 Gbps
rx_cpu_util. : 0.26% / 100.92 Kpps total_pps : 149.53 Kpps
async_util. : 0% / 8.55 bps drop_rate : 533.27 Mbps
total_cps. : 0 cps queue_full : 39,521 pkts
Port Statistics
port | 0 | 1 | total
-----------+-------------------+-------------------+------------------
owner | root | root |
link | UP | UP |
state | IDLE | TRANSMITTING |
speed | 200 Gb/s | 200 Gb/s |
CPU util. | 0.0% | 1.57% |
-- | | |
Tx bps L2 | 0.04 bps | 1.73 Gbps | 1.73 Gbps
Tx bps L1 | 0.06 bps | 1.75 Gbps | 1.75 Gbps
Tx pps | 0 pps | 149.53 Kpps | 149.53 Kpps
Line Util. | 0 % | 0.88 % |
--- | | |
Rx bps | 1.2 Gbps | 0 bps | 1.2 Gbps
Rx pps | 100.92 Kpps | 0 pps | 100.92 Kpps
---- | | |
opackets | 4500002 | 2700880 | 7200882
ipackets | 1782930 | 2865306 | 4648236
obytes | 6705001536 | 3905471080 | 10610472616
ibytes | 2642300824 | 4143231076 | 6785531900
tx-pkts | 4.5 Mpkts | 2.7 Mpkts | 7.2 Mpkts
rx-pkts | 1.78 Mpkts | 2.87 Mpkts | 4.65 Mpkts
tx-bytes | 6.71 GB | 3.91 GB | 10.61 GB
rx-bytes | 2.64 GB | 4.14 GB | 6.79 GB
----- | | |
oerrors | 0 | 0 | 0
ierrors | 0 | 0 | 0
status: -
Press 'ESC' for navigation panel...
status:
tui>
b. logs for free5GC UPF v1.2.8
UpLink measurement
start -f stl/gtp_1pkt_simple.py -p 0 -m 500kpps -d 60
Global Statistics
connection : localhost, Port 4501 total_tx_L2 : 5.92 Gbps
version : STL @ v3.08 total_tx_L1 : 6 Gbps
cpu_util. : 6.51% @ 1 cores (1 per dual port) total_rx : 4.81 Gbps
rx_cpu_util. : 0.75% / 416.04 Kpps total_pps : 496.44 Kpps
async_util. : 0% / 7.22 bps drop_rate : 1.1 Gbps
total_cps. : 0 cps queue_full : 99,175 pkts
Port Statistics
port | 0 | 1 | total
-----------+-------------------+-------------------+------------------
owner | root | root |
link | UP | UP |
state | TRANSMITTING | IDLE |
speed | 200 Gb/s | 200 Gb/s |
CPU util. | 6.51% | 0.0% |
-- | | |
Tx bps L2 | 5.92 Gbps | 0 bps | 5.92 Gbps
Tx bps L1 | 6 Gbps | 0 bps | 6 Gbps
Tx pps | 496.44 Kpps | 0 pps | 496.44 Kpps
Line Util. | 3 % | 0 % |
--- | | |
Rx bps | 0 bps | 4.81 Gbps | 4.81 Gbps
Rx pps | 0 pps | 416.04 Kpps | 416.04 Kpps
---- | | |
opackets | 12624256 | 1 | 12624257
ipackets | 0 | 10450514 | 10450514
obytes | 18810141440 | 46 | 18810141486
ibytes | 0 | 15111441844 | 15111441844
tx-pkts | 12.62 Mpkts | 1 pkts | 12.62 Mpkts
rx-pkts | 0 pkts | 10.45 Mpkts | 10.45 Mpkts
tx-bytes | 18.81 GB | 46 B | 18.81 GB
rx-bytes | 0 B | 15.11 GB | 15.11 GB
----- | | |
oerrors | 0 | 0 | 0
ierrors | 0 | 0 | 0
status: |
Press 'ESC' for navigation panel...
status:
tui>
DownLink measurement
start -f stl/udp_1pkt_simple.py -p 1 -m 500kpps -d 60
Global Statistics
connection : localhost, Port 4501 total_tx_L2 : 5.77 Gbps
version : STL @ v3.08 total_tx_L1 : 5.85 Gbps
cpu_util. : 6.04% @ 1 cores (1 per dual port) total_rx : 3.92 Gbps
rx_cpu_util. : 0.41% / 330.15 Kpps total_pps : 498.45 Kpps
async_util. : 0% / 18.46 bps drop_rate : 1.84 Gbps
total_cps. : 0 cps queue_full : 315,658 pkts
Port Statistics
port | 0 | 1 | total
-----------+-------------------+-------------------+------------------
owner | root | root |
link | UP | UP |
state | IDLE | TRANSMITTING |
speed | 200 Gb/s | 200 Gb/s |
CPU util. | 0.0% | 6.04% |
-- | | |
Tx bps L2 | 1.42 bps | 5.77 Gbps | 5.77 Gbps
Tx bps L1 | 2.04 bps | 5.85 Gbps | 5.85 Gbps
Tx pps | 0 pps | 498.45 Kpps | 498.45 Kpps
Line Util. | 0 % | 2.92 % |
--- | | |
Rx bps | 3.92 Gbps | 0 bps | 3.92 Gbps
Rx pps | 330.15 Kpps | 0 pps | 330.15 Kpps
---- | | |
opackets | 2 | 21720258 | 21720260
ipackets | 12731457 | 0 | 12731457
obytes | 92 | 31407493068 | 31407493160
ibytes | 18918942222 | 0 | 18918942222
tx-pkts | 2 pkts | 21.72 Mpkts | 21.72 Mpkts
rx-pkts | 12.73 Mpkts | 0 pkts | 12.73 Mpkts
tx-bytes | 92 B | 31.41 GB | 31.41 GB
rx-bytes | 18.92 GB | 0 B | 18.92 GB
----- | | |
oerrors | 0 | 0 | 0
ierrors | 0 | 0 | 0
status: /
Press 'ESC' for navigation panel...
status:
tui>
c. logs for UPG-VPP v1.13.0
UpLink measurement
start -f stl/gtp_1pkt_simple.py -p 0 -m 900kpps -d 60
Global Statistics
connection : localhost, Port 4501 total_tx_L2 : 10.35 Gbps
version : STL @ v3.08 total_tx_L1 : 10.49 Gbps
cpu_util. : 11.05% @ 1 cores (1 per dual port) total_rx : 8.2 Gbps
rx_cpu_util. : 1.37% / 708.5 Kpps total_pps : 868.58 Kpps
async_util. : 0% / 16.73 bps drop_rate : 2.16 Gbps
total_cps. : 0 cps queue_full : 38,477,232 pkts
Port Statistics
port | 0 | 1 | total
-----------+-------------------+-------------------+------------------
owner | root | root |
link | UP | UP |
state | TRANSMITTING | IDLE |
speed | 200 Gb/s | 200 Gb/s |
CPU util. | 11.05% | 0.0% |
-- | | |
Tx bps L2 | 10.35 Gbps | 0 bps | 10.35 Gbps
Tx bps L1 | 10.49 Gbps | 0 bps | 10.49 Gbps
Tx pps | 868.58 Kpps | 0 pps | 868.58 Kpps
Line Util. | 5.25 % | 0 % |
--- | | |
Rx bps | 0 bps | 8.2 Gbps | 8.2 Gbps
Rx pps | 0 pps | 708.5 Kpps | 708.5 Kpps
---- | | |
opackets | 114801912 | 27000023 | 141801935
ipackets | 19027522 | 75457064 | 94484586
obytes | 171054848880 | 39042033258 | 210096882138
ibytes | 28198787604 | 109110914544 | 137309702148
tx-pkts | 114.8 Mpkts | 27 Mpkts | 141.8 Mpkts
rx-pkts | 19.03 Mpkts | 75.46 Mpkts | 94.48 Mpkts
tx-bytes | 171.05 GB | 39.04 GB | 210.1 GB
rx-bytes | 28.2 GB | 109.11 GB | 137.31 GB
----- | | |
oerrors | 0 | 0 | 0
ierrors | 0 | 0 | 0
status: /
Press 'ESC' for navigation panel...
status:
tui>
DownLink measurement
start -f stl/udp_1pkt_simple.py -p 1 -m 900kpps -d 60
Global Statistics
connection : localhost, Port 4501 total_tx_L2 : 10.04 Gbps
version : STL @ v3.08 total_tx_L1 : 10.18 Gbps
cpu_util. : 12.78% @ 1 cores (1 per dual port) total_rx : 8.19 Gbps
rx_cpu_util. : 1.29% / 690.39 Kpps total_pps : 867.78 Kpps
async_util. : 0% / 23.84 bps drop_rate : 1.85 Gbps
total_cps. : 0 cps queue_full : 15,576,307 pkts
Port Statistics
port | 0 | 1 | total
-----------+-------------------+-------------------+------------------
owner | root | root |
link | UP | UP |
state | IDLE | TRANSMITTING |
speed | 200 Gb/s | 200 Gb/s |
CPU util. | 0.0% | 12.78% |
-- | | |
Tx bps L2 | 11.14 bps | 10.04 Gbps | 10.04 Gbps
Tx bps L1 | 11.29 bps | 10.18 Gbps | 10.18 Gbps
Tx pps | 0 pps | 867.78 Kpps | 867.78 Kpps
Line Util. | 0 % | 5.09 % |
--- | | |
Rx bps | 8.19 Gbps | 7.48 bps | 8.19 Gbps
Rx pps | 690.39 Kpps | 0 pps | 690.39 Kpps
---- | | |
opackets | 54000001 | 6779399 | 60779400
ipackets | 4980236 | 35162083 | 40142319
obytes | 80460001490 | 9803010954 | 90263012444
ibytes | 7380709752 | 50844372018 | 58225081770
tx-pkts | 54 Mpkts | 6.78 Mpkts | 60.78 Mpkts
rx-pkts | 4.98 Mpkts | 35.16 Mpkts | 40.14 Mpkts
tx-bytes | 80.46 GB | 9.8 GB | 90.26 GB
rx-bytes | 7.38 GB | 50.84 GB | 58.23 GB
----- | | |
oerrors | 0 | 0 | 0
ierrors | 0 | 0 | 0
status: /
Press 'ESC' for navigation panel...
status:
tui>
d. logs for eUPF v0.7.1
UpLink measurement
start -f stl/gtp_1pkt_simple.py -p 0 -m 1000kpps -d 60
Global Statistics
connection : localhost, Port 4501 total_tx_L2 : 11.48 Gbps
version : STL @ v3.08 total_tx_L1 : 11.64 Gbps
cpu_util. : 67.53% @ 1 cores (1 per dual port) total_rx : 9.58 Gbps
rx_cpu_util. : 2.92% / 828.42 Kpps total_pps : 963.22 Kpps
async_util. : 0% / 7.76 bps drop_rate : 1.9 Gbps
total_cps. : 0 cps queue_full : 10,737,930 pkts
Port Statistics
port | 0 | 1 | total
-----------+-------------------+-------------------+------------------
owner | root | root |
link | UP | UP |
state | TRANSMITTING | IDLE |
speed | 200 Gb/s | 200 Gb/s |
CPU util. | 67.53% | 0.0% |
-- | | |
Tx bps L2 | 11.48 Gbps | 0 bps | 11.48 Gbps
Tx bps L1 | 11.64 Gbps | 0 bps | 11.64 Gbps
Tx pps | 963.22 Kpps | 0 pps | 963.22 Kpps
Line Util. | 5.82 % | 0 % |
--- | | |
Rx bps | 0 bps | 9.58 Gbps | 9.58 Gbps
Rx pps | 0 pps | 828.42 Kpps | 828.42 Kpps
---- | | |
opackets | 19068097 | 0 | 19068097
ipackets | 0 | 16052039 | 16052039
obytes | 28411464530 | 0 | 28411464530
ibytes | 0 | 23211248394 | 23211248394
tx-pkts | 19.07 Mpkts | 0 pkts | 19.07 Mpkts
rx-pkts | 0 pkts | 16.05 Mpkts | 16.05 Mpkts
tx-bytes | 28.41 GB | 0 B | 28.41 GB
rx-bytes | 0 B | 23.21 GB | 23.21 GB
----- | | |
oerrors | 0 | 0 | 0
ierrors | 0 | 0 | 0
status: /
Press 'ESC' for navigation panel...
status:
tui>
DownLink measurement
start -f stl/udp_1pkt_simple.py -p 1 -m 1000kpps -d 60
Global Statistics
connection : localhost, Port 4501 total_tx_L2 : 11.08 Gbps
version : STL @ v3.08 total_tx_L1 : 11.23 Gbps
cpu_util. : 65.42% @ 1 cores (1 per dual port) total_rx : 9.72 Gbps
rx_cpu_util. : 1.92% / 815.05 Kpps total_pps : 957.63 Kpps
async_util. : 0% / 10.39 bps drop_rate : 1.36 Gbps
total_cps. : 0 cps queue_full : 25,780,840 pkts
Port Statistics
port | 0 | 1 | total
-----------+-------------------+-------------------+------------------
owner | root | root |
link | UP | UP |
state | IDLE | TRANSMITTING |
speed | 200 Gb/s | 200 Gb/s |
CPU util. | 0.0% | 65.42% |
-- | | |
Tx bps L2 | 0.01 bps | 11.08 Gbps | 11.08 Gbps
Tx bps L1 | 0.01 bps | 11.23 Gbps | 11.23 Gbps
Tx pps | 0 pps | 957.63 Kpps | 957.63 Kpps
Line Util. | 0 % | 5.62 % |
--- | | |
Rx bps | 9.72 Gbps | 0.01 bps | 9.72 Gbps
Rx pps | 815.05 Kpps | 0 pps | 815.05 Kpps
---- | | |
opackets | 30000001 | 15746289 | 45746290
ipackets | 13195910 | 25139581 | 38335491
obytes | 44700001490 | 22769133894 | 67469135384
ibytes | 19661904484 | 36351832754 | 56013737238
tx-pkts | 30 Mpkts | 15.75 Mpkts | 45.75 Mpkts
rx-pkts | 13.2 Mpkts | 25.14 Mpkts | 38.34 Mpkts
tx-bytes | 44.7 GB | 22.77 GB | 67.47 GB
rx-bytes | 19.66 GB | 36.35 GB | 56.01 GB
----- | | |
oerrors | 0 | 0 | 0
ierrors | 0 | 0 | 0
status: |
Press 'ESC' for navigation panel...
status:
tui>
e-1. logs for OAI-CN5G-UPF v2.2.0 (Simple Switch)
UpLink measurement
start -f stl/gtp_1pkt_simple.py -p 0 -m 200kpps -d 60
Global Statistics
connection : localhost, Port 4501 total_tx_L2 : 2.38 Gbps
version : STL @ v3.08 total_tx_L1 : 2.42 Gbps
cpu_util. : 2.52% @ 1 cores (1 per dual port) total_rx : 1.33 Gbps
rx_cpu_util. : 0.05% / 114.85 Kpps total_pps : 200.03 Kpps
async_util. : 0% / 26.06 bps drop_rate : 1.06 Gbps
total_cps. : 0 cps queue_full : 504,207 pkts
Port Statistics
port | 0 | 1 | total
-----------+-------------------+-------------------+------------------
owner | root | root |
link | UP | UP |
state | TRANSMITTING | IDLE |
speed | 200 Gb/s | 200 Gb/s |
CPU util. | 2.52% | 0.0% |
-- | | |
Tx bps L2 | 2.38 Gbps | 0 bps | 2.38 Gbps
Tx bps L1 | 2.42 Gbps | 0 bps | 2.42 Gbps
Tx pps | 200.03 Kpps | 0 pps | 200.03 Kpps
Line Util. | 1.21 % | 0 % |
--- | | |
Rx bps | 0 bps | 1.33 Gbps | 1.33 Gbps
Rx pps | 0 pps | 114.85 Kpps | 114.85 Kpps
---- | | |
opackets | 43909700 | 18000023 | 61909723
ipackets | 13049932 | 23554961 | 36604893
obytes | 65425444336 | 26028020658 | 91453464994
ibytes | 19444387184 | 34060458262 | 53504845446
tx-pkts | 43.91 Mpkts | 18 Mpkts | 61.91 Mpkts
rx-pkts | 13.05 Mpkts | 23.55 Mpkts | 36.6 Mpkts
tx-bytes | 65.43 GB | 26.03 GB | 91.45 GB
rx-bytes | 19.44 GB | 34.06 GB | 53.5 GB
----- | | |
oerrors | 0 | 0 | 0
ierrors | 0 | 0 | 0
status: \
Press 'ESC' for navigation panel...
status:
tui>
DownLink measurement
start -f stl/udp_1pkt_simple.py -p 1 -m 200kpps -d 60
Global Statistics
connection : localhost, Port 4501 total_tx_L2 : 2.31 Gbps
version : STL @ v3.08 total_tx_L1 : 2.34 Gbps
cpu_util. : 2.41% @ 1 cores (1 per dual port) total_rx : 1.99 Gbps
rx_cpu_util. : 0.15% / 166.65 Kpps total_pps : 199.61 Kpps
async_util. : 0% / 25.69 bps drop_rate : 322.53 Mbps
total_cps. : 0 cps queue_full : 935,390 pkts
Port Statistics
port | 0 | 1 | total
-----------+-------------------+-------------------+------------------
owner | root | root |
link | UP | UP |
state | IDLE | TRANSMITTING |
speed | 200 Gb/s | 200 Gb/s |
CPU util. | 0.0% | 2.41% |
-- | | |
Tx bps L2 | 0 bps | 2.31 Gbps | 2.31 Gbps
Tx bps L1 | 0 bps | 2.34 Gbps | 2.34 Gbps
Tx pps | 0 pps | 199.61 Kpps | 199.61 Kpps
Line Util. | 0 % | 1.17 % |
--- | | |
Rx bps | 1.99 Gbps | 0 bps | 1.99 Gbps
Rx pps | 166.65 Kpps | 0 pps | 166.65 Kpps
---- | | |
opackets | 44000040 | 34719641 | 78719681
ipackets | 24731354 | 23601087 | 48332441
obytes | 65560045160 | 50204588286 | 115764633446
ibytes | 36849698772 | 34127156458 | 70976855230
tx-pkts | 44 Mpkts | 34.72 Mpkts | 78.72 Mpkts
rx-pkts | 24.73 Mpkts | 23.6 Mpkts | 48.33 Mpkts
tx-bytes | 65.56 GB | 50.2 GB | 115.76 GB
rx-bytes | 36.85 GB | 34.13 GB | 70.98 GB
----- | | |
oerrors | 0 | 0 | 0
ierrors | 0 | 0 | 0
status: -
Press 'ESC' for navigation panel...
status:
tui>
e-2. logs for OAI-CN5G-UPF v2.2.0 (eBPF/XDP)
UpLink measurement
start -f stl/gtp_1pkt_simple.py -p 0 -m 1000kpps -d 60
Global Statistics
connection : localhost, Port 4501 total_tx_L2 : 11.39 Gbps
version : STL @ v3.08 total_tx_L1 : 11.54 Gbps
cpu_util. : 66.71% @ 1 cores (1 per dual port) total_rx : 9.58 Gbps
rx_cpu_util. : 1.99% / 827.88 Kpps total_pps : 955.15 Kpps
async_util. : 0% / 15.61 bps drop_rate : 1.81 Gbps
total_cps. : 0 cps queue_full : 5,170,749 pkts
Port Statistics
port | 0 | 1 | total
-----------+-------------------+-------------------+------------------
owner | root | root |
link | UP | UP |
state | TRANSMITTING | IDLE |
speed | 200 Gb/s | 200 Gb/s |
CPU util. | 66.71% | 0.0% |
-- | | |
Tx bps L2 | 11.39 Gbps | 0 bps | 11.39 Gbps
Tx bps L1 | 11.54 Gbps | 0 bps | 11.54 Gbps
Tx pps | 955.15 Kpps | 0 pps | 955.15 Kpps
Line Util. | 5.77 % | 0 % |
--- | | |
Rx bps | 0.57 bps | 9.58 Gbps | 9.58 Gbps
Rx pps | 0 pps | 827.88 Kpps | 827.88 Kpps
---- | | |
opackets | 8215450 | 0 | 8215450
ipackets | 1 | 7102558 | 7102559
obytes | 12241020500 | 0 | 12241020500
ibytes | 74 | 10270297496 | 10270297570
tx-pkts | 8.22 Mpkts | 0 pkts | 8.22 Mpkts
rx-pkts | 1 pkts | 7.1 Mpkts | 7.1 Mpkts
tx-bytes | 12.24 GB | 0 B | 12.24 GB
rx-bytes | 74 B | 10.27 GB | 10.27 GB
----- | | |
oerrors | 0 | 0 | 0
ierrors | 0 | 0 | 0
status: /
Press 'ESC' for navigation panel...
status:
tui>
DownLink measurement
start -f stl/udp_1pkt_simple.py -p 1 -m 1000kpps -d 60
Global Statistics
connection : localhost, Port 4501 total_tx_L2 : 11.25 Gbps
version : STL @ v3.08 total_tx_L1 : 11.4 Gbps
cpu_util. : 65.25% @ 1 cores (1 per dual port) total_rx : 9.82 Gbps
rx_cpu_util. : 2.17% / 823.87 Kpps total_pps : 972.35 Kpps
async_util. : 0% / 10.44 bps drop_rate : 1.43 Gbps
total_cps. : 0 cps queue_full : 60,397,608 pkts
Port Statistics
port | 0 | 1 | total
-----------+-------------------+-------------------+------------------
owner | root | root |
link | UP | UP |
state | IDLE | TRANSMITTING |
speed | 200 Gb/s | 200 Gb/s |
CPU util. | 0.0% | 65.25% |
-- | | |
Tx bps L2 | 0 bps | 11.25 Gbps | 11.25 Gbps
Tx bps L1 | 0 bps | 11.4 Gbps | 11.4 Gbps
Tx pps | 0 pps | 972.35 Kpps | 972.35 Kpps
Line Util. | 0 % | 5.7 % |
--- | | |
Rx bps | 9.82 Gbps | 0 bps | 9.82 Gbps
Rx pps | 823.87 Kpps | 0 pps | 823.87 Kpps
---- | | |
opackets | 30000001 | 85612755 | 115612756
ipackets | 71071564 | 24342334 | 95413898
obytes | 44700001490 | 123796043730 | 168496045220
ibytes | 105896630360 | 35199014964 | 141095645324
tx-pkts | 30 Mpkts | 85.61 Mpkts | 115.61 Mpkts
rx-pkts | 71.07 Mpkts | 24.34 Mpkts | 95.41 Mpkts
tx-bytes | 44.7 GB | 123.8 GB | 168.5 GB
rx-bytes | 105.9 GB | 35.2 GB | 141.1 GB
----- | | |
oerrors | 0 | 0 | 0
ierrors | 0 | 0 | 0
status: \
Press 'ESC' for navigation panel...
status:
tui>
| # | UPF / Date | UpLink Avg (msec) |
Max (msec) |
Min (msec) |
DownLink Avg (msec) |
Max (msec) |
Min (msec) |
|---|---|---|---|---|---|---|---|
| a-1 | Open5GS UPF v2.7.6 (TUN) 2026.01.17 |
0.302 | 0.327 | 0.255 | 0.246 | 0.256 | 0.206 |
| a-2 | Open5GS UPF v2.7.6 (TAP) 2026.01.17 |
0.303 | 0.337 | 0.280 | 0.271 | 0.306 | 0.253 |
| b | free5GC UPF v1.2.8 2026.01.05 |
0.211 | 0.220 | 0.195 | 0.222 | 0.234 | 0.201 |
| c | UPG-VPP v1.13.0 2024.03.25 |
0.155 | 0.181 | 0.134 | 0.144 | 0.178 | 0.134 |
| d | eUPF v0.7.1 (native mode) 22025.06.16 |
0.227 | 0.241 | 0.193 | 0.211 | 0.246 | 0.194 |
| e-1 | OAI-CN5G-UPF v2.2.0 (Simple Switch) 2025.12.13 |
0.290 | 0.296 | 0.272 | 0.290 | 0.301 | 0.262 |
| e-2 | OAI-CN5G-UPF v2.2.0 (eBPF/XDP) 2025.12.13 |
0.207 | 0.217 | 0.190 | 0.200 | 0.205 | 0.190 |
a-1. logs for Open5GS UPF v2.7.6 (TUN)
UpLink measurement
start -f stl/gtp_latency_1pkt_simple.py -p 0 -d 10
Latency Statistics
PG ID | 0
-------------+---------------
TX pkts | 11
RX pkts | 11
Max latency | 327
Min latency | 255
Avg latency | 302
-- Window -- |
Last max | 290
Last-1 |
Last-2 |
Last-3 |
Last-4 |
Last-5 |
Last-6 |
Last-7 |
Last-8 |
Last-9 |
Last-10 |
Last-11 |
Last-12 |
Last-13 |
--- |
Jitter | 19
---- |
Errors | 0
trex>
DownLink measurement
start -f stl/udp_latency_1pkt_simple.py -p 1 -d 10
Latency Statistics
PG ID | 1
-------------+---------------
TX pkts | 11
RX pkts | 11
Max latency | 256
Min latency | 206
Avg latency | 246
-- Window -- |
Last max | 241
Last-1 |
Last-2 |
Last-3 |
Last-4 |
Last-5 |
Last-6 |
Last-7 |
Last-8 |
Last-9 |
Last-10 |
Last-11 |
Last-12 |
Last-13 |
--- |
Jitter | 20
---- |
Errors | 0
trex>
a-2. logs for Open5GS UPF v2.7.6 (TAP)
UpLink measurement
start -f stl/gtp_latency_1pkt_simple.py -p 0 -d 10
Latency Statistics
PG ID | 0
-------------+---------------
TX pkts | 11
RX pkts | 11
Max latency | 337
Min latency | 280
Avg latency | 303
-- Window -- |
Last max | 310
Last-1 | 0
Last-2 | 0
Last-3 | 0
Last-4 | 0
Last-5 | 0
Last-6 | 0
Last-7 | 0
Last-8 | 0
Last-9 | 0
Last-10 | 0
Last-11 | 0
Last-12 | 0
Last-13 | 0
--- |
Jitter | 25
---- |
Errors | 0
trex>
DownLink measurement
start -f stl/udp_latency_1pkt_simple.py -p 1 -d 10
Latency Statistics
PG ID | 1
-------------+---------------
TX pkts | 11
RX pkts | 11
Max latency | 306
Min latency | 253
Avg latency | 271
-- Window -- |
Last max | 256
Last-1 |
Last-2 |
Last-3 |
Last-4 |
Last-5 |
Last-6 |
Last-7 |
Last-8 |
Last-9 |
Last-10 |
Last-11 |
Last-12 |
Last-13 |
--- |
Jitter | 33
---- |
Errors | 0
trex>
b. logs for free5GC UPF v1.2.8
UpLink measurement
start -f stl/gtp_latency_1pkt_simple.py -p 0 -d 10
Latency Statistics
PG ID | 0
-------------+---------------
TX pkts | 11
RX pkts | 11
Max latency | 220
Min latency | 195
Avg latency | 211
-- Window -- |
Last max | 207
Last-1 |
Last-2 |
Last-3 |
Last-4 |
Last-5 |
Last-6 |
Last-7 |
Last-8 |
Last-9 |
Last-10 |
Last-11 |
Last-12 |
Last-13 |
--- |
Jitter | 35
---- |
Errors | 0
trex>
DownLink measurement
start -f stl/udp_latency_1pkt_simple.py -p 1 -d 10
Latency Statistics
PG ID | 1
-------------+---------------
TX pkts | 11
RX pkts | 11
Max latency | 234
Min latency | 201
Avg latency | 222
-- Window -- |
Last max | 219
Last-1 |
Last-2 |
Last-3 |
Last-4 |
Last-5 |
Last-6 |
Last-7 |
Last-8 |
Last-9 |
Last-10 |
Last-11 |
Last-12 |
Last-13 |
--- |
Jitter | 14
---- |
Errors | 0
trex>
c. logs for UPG-VPP v1.13.0
UpLink measurement
start -f stl/gtp_latency_1pkt_simple.py -p 0 -d 10
Latency Statistics
PG ID | 0
-------------+---------------
TX pkts | 11
RX pkts | 11
Max latency | 181
Min latency | 134
Avg latency | 155
-- Window -- |
Last max | 143
Last-1 | 0
Last-2 | 0
Last-3 | 0
Last-4 | 0
Last-5 | 0
Last-6 | 0
Last-7 | 0
Last-8 | 0
Last-9 | 0
Last-10 | 0
Last-11 | 0
Last-12 | 0
Last-13 | 0
--- |
Jitter | 14
---- |
Errors | 0
trex>
DownLink measurement
start -f stl/udp_latency_1pkt_simple.py -p 1 -d 10
Latency Statistics
PG ID | 1
-------------+---------------
TX pkts | 11
RX pkts | 11
Max latency | 178
Min latency | 134
Avg latency | 144
-- Window -- |
Last max | 134
Last-1 | 0
Last-2 | 0
Last-3 | 0
Last-4 | 0
Last-5 | 0
Last-6 | 0
Last-7 | 0
Last-8 | 0
Last-9 | 0
Last-10 | 0
Last-11 | 0
Last-12 | 0
Last-13 | 0
--- |
Jitter | 20
---- |
Errors | 0
trex>
d. logs for eUPF v0.7.1
UpLink measurement
start -f stl/gtp_latency_1pkt_simple.py -p 0 -d 10
Latency Statistics
PG ID | 0
-------------+---------------
TX pkts | 11
RX pkts | 11
Max latency | 241
Min latency | 193
Avg latency | 227
-- Window -- |
Last max | 230
Last-1 |
Last-2 |
Last-3 |
Last-4 |
Last-5 |
Last-6 |
Last-7 |
Last-8 |
Last-9 |
Last-10 |
Last-11 |
Last-12 |
Last-13 |
--- |
Jitter | 16
---- |
Errors | 0
trex>
DownLink measurement
start -f stl/udp_latency_1pkt_simple.py -p 1 -d 10
Latency Statistics
PG ID | 1
-------------+---------------
TX pkts | 11
RX pkts | 11
Max latency | 246
Min latency | 194
Avg latency | 211
-- Window -- |
Last max | 201
Last-1 |
Last-2 |
Last-3 |
Last-4 |
Last-5 |
Last-6 |
Last-7 |
Last-8 |
Last-9 |
Last-10 |
Last-11 |
Last-12 |
Last-13 |
--- |
Jitter | 16
---- |
Errors | 0
trex>
e-1. logs for OAI-CN5G-UPF v2.2.0 (Simple Switch)
UpLink measurement
start -f stl/gtp_latency_1pkt_simple.py -p 0 -d 10
Latency Statistics
PG ID | 0
-------------+---------------
TX pkts | 11
RX pkts | 11
Max latency | 296
Min latency | 272
Avg latency | 290
-- Window -- |
Last max | 296
Last-1 | 0
Last-2 | 0
Last-3 | 0
Last-4 | 0
Last-5 | 0
Last-6 | 0
Last-7 | 0
Last-8 | 0
Last-9 | 0
Last-10 | 0
Last-11 | 0
Last-12 | 0
Last-13 | 0
--- |
Jitter | 16
---- |
Errors | 0
trex>
DownLink measurement
start -f stl/udp_latency_1pkt_simple.py -p 1 -d 10
Latency Statistics
PG ID | 1
-------------+---------------
TX pkts | 11
RX pkts | 11
Max latency | 301
Min latency | 262
Avg latency | 290
-- Window -- |
Last max | 292
Last-1 | 0
Last-2 | 0
Last-3 | 0
Last-4 | 0
Last-5 | 0
Last-6 | 0
Last-7 | 0
Last-8 | 0
Last-9 | 0
Last-10 | 0
Last-11 | 0
Last-12 | 0
Last-13 | 0
--- |
Jitter | 20
---- |
Errors | 0
trex>
e-2. logs for OAI-CN5G-UPF v2.2.0 (eBPF/XDP)
UpLink measurement
start -f stl/gtp_latency_1pkt_simple.py -p 0 -d 10
Latency Statistics
PG ID | 0
-------------+---------------
TX pkts | 11
RX pkts | 11
Max latency | 217
Min latency | 190
Avg latency | 207
-- Window -- |
Last max | 206
Last-1 |
Last-2 |
Last-3 |
Last-4 |
Last-5 |
Last-6 |
Last-7 |
Last-8 |
Last-9 |
Last-10 |
Last-11 |
Last-12 |
Last-13 |
--- |
Jitter | 11
---- |
Errors | 0
trex>
DownLink measurement
start -f stl/udp_latency_1pkt_simple.py -p 1 -d 10
Latency Statistics
PG ID | 1
-------------+---------------
TX pkts | 11
RX pkts | 11
Max latency | 205
Min latency | 190
Avg latency | 200
-- Window -- |
Last max | 199
Last-1 |
Last-2 |
Last-3 |
Last-4 |
Last-5 |
Last-6 |
Last-7 |
Last-8 |
Last-9 |
Last-10 |
Last-11 |
Last-12 |
Last-13 |
--- |
Jitter | 11
---- |
Errors | 0
trex>
These measurement results show that eBPF/XDP-based eUPF and OAI-CN5G-UPF have relatively outstanding performance even on Proxmox VE VM. Although I was unable to confirm any performance differences between eUPF and OAI-CN5G-UPF through this simple measurement, I speculate that performance differences can be confirmed through other measurement methods and analyses. In general, the measurement environment, conditions and tools have a significant impact on the measurement results.
If measuring using virtual machines, it would be better to measure on VMs on a hypervisor such as Proxmox VE. Also, it is good to select VirtIO as the network interface to ensure that the network does not become a bottleneck in the measurement.
It is very simple mesurement and may not be very meaningful when measuring between virtual machines, but it may be a little helpful when comparing the relative performance of UPF. I would appreciate it if you could use this as a reference as a configuration example when measuring with real devices.
I simply measured the raw communication performance between VM-TG and VM-DUT. This is a measurement of the N6 interface and therefore does not include communication over GTP-U.
| A--B | TCP[1] throughput |
UDP[2] throughput |
UDP[2] packet loss |
RTT[3] (msec) |
|---|---|---|---|---|
| VM-TG --(N6)-- VM-DUT | S:26.8 Gbps R:26.8 Gbps |
S:2.04 Gbps R:2.03 Gbps |
0.4 % | 0.262 |
1. iperf3 -c 192.168.16.151
# iperf3 -c 192.168.16.151
Connecting to host 192.168.16.151, port 5201
[ 5] local 192.168.16.152 port 58568 connected to 192.168.16.151 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 3.00 GBytes 25.7 Gbits/sec 0 1.87 MBytes
[ 5] 1.00-2.00 sec 3.08 GBytes 26.4 Gbits/sec 0 2.30 MBytes
[ 5] 2.00-3.00 sec 3.10 GBytes 26.7 Gbits/sec 0 2.30 MBytes
[ 5] 3.00-4.00 sec 3.11 GBytes 26.7 Gbits/sec 0 2.43 MBytes
[ 5] 4.00-5.00 sec 3.18 GBytes 27.3 Gbits/sec 0 2.84 MBytes
[ 5] 5.00-6.00 sec 3.21 GBytes 27.5 Gbits/sec 0 2.84 MBytes
[ 5] 6.00-7.00 sec 3.20 GBytes 27.5 Gbits/sec 0 2.84 MBytes
[ 5] 7.00-8.00 sec 3.14 GBytes 27.0 Gbits/sec 0 3.62 MBytes
[ 5] 8.00-9.00 sec 3.14 GBytes 27.0 Gbits/sec 0 3.62 MBytes
[ 5] 9.00-10.00 sec 3.07 GBytes 26.3 Gbits/sec 0 3.62 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 31.2 GBytes 26.8 Gbits/sec 0 sender
[ 5] 0.00-9.99 sec 31.2 GBytes 26.8 Gbits/sec receiver
iperf Done.
2. iperf3 -c 192.168.16.151 -u -b 5G
# iperf3 -c 192.168.16.151 -u -b 5G
Connecting to host 192.168.16.151, port 5201
[ 5] local 192.168.16.152 port 52639 connected to 192.168.16.151 port 5201
[ ID] Interval Transfer Bitrate Total Datagrams
[ 5] 0.00-1.00 sec 242 MBytes 2.03 Gbits/sec 175079
[ 5] 1.00-2.00 sec 240 MBytes 2.01 Gbits/sec 173824
[ 5] 2.00-3.00 sec 230 MBytes 1.93 Gbits/sec 166912
[ 5] 3.00-4.00 sec 246 MBytes 2.07 Gbits/sec 178413
[ 5] 4.00-5.00 sec 241 MBytes 2.02 Gbits/sec 174618
[ 5] 5.00-6.00 sec 246 MBytes 2.06 Gbits/sec 177980
[ 5] 6.00-7.00 sec 247 MBytes 2.07 Gbits/sec 178878
[ 5] 7.00-8.00 sec 246 MBytes 2.07 Gbits/sec 178375
[ 5] 8.00-9.00 sec 247 MBytes 2.07 Gbits/sec 178931
[ 5] 9.00-10.00 sec 248 MBytes 2.08 Gbits/sec 179748
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams
[ 5] 0.00-10.00 sec 2.38 GBytes 2.04 Gbits/sec 0.000 ms 0/1762758 (0%) sender
[ 5] 0.00-10.00 sec 2.37 GBytes 2.03 Gbits/sec 0.005 ms 7076/1762758 (0.4%) receiver
iperf Done.
3. ping 192.168.16.151 -c 10
# ping 192.168.16.151 -c 10
PING 192.168.16.151 (192.168.16.151) 56(84) bytes of data.
64 bytes from 192.168.16.151: icmp_seq=1 ttl=64 time=0.285 ms
64 bytes from 192.168.16.151: icmp_seq=2 ttl=64 time=0.292 ms
64 bytes from 192.168.16.151: icmp_seq=3 ttl=64 time=0.282 ms
64 bytes from 192.168.16.151: icmp_seq=4 ttl=64 time=0.221 ms
64 bytes from 192.168.16.151: icmp_seq=5 ttl=64 time=0.319 ms
64 bytes from 192.168.16.151: icmp_seq=6 ttl=64 time=0.219 ms
64 bytes from 192.168.16.151: icmp_seq=7 ttl=64 time=0.260 ms
64 bytes from 192.168.16.151: icmp_seq=8 ttl=64 time=0.232 ms
64 bytes from 192.168.16.151: icmp_seq=9 ttl=64 time=0.261 ms
64 bytes from 192.168.16.151: icmp_seq=10 ttl=64 time=0.258 ms
--- 192.168.16.151 ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 9215ms
rtt min/avg/max/mdev = 0.219/0.262/0.319/0.030 ms
I would like to thank all the excellent developers and contributors who developed these great systems and tools.
- [2026.03.01] Measured again using UPG-VPP built on Ubuntu 24.04.
- [2026.02.13] Measured OAI-CN5G-UPF(Simple Switch) again.
- [2026.02.11] Added measurement of OAI-CN5G-UPF(Simple Switch).
- [2026.01.23] Measured again using OAI-CN5G-UPF(eBPF/XDP) built on Ubuntu 24.04.
- [2026.01.18] Initial release. This measurement is an update of the following measurement, adding the measurement of OAI-CN5G-UPF(eBPF/XDP).
Simple Measurement of UPF Performance 9
