Skip to content

s5uishida/simple_measurement_of_upf_performance_6

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 

Repository files navigation

Simple Measurement of UPF Performance 6

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.



Table of Contents


Simple Overview of UPF Performance Measurements

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.

The UPFs used are as follows.

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 22.04 3 8GB 20GB
VM-DUT each UPF DUT
(Device Under Test)
192.168.0.151/24 Ubuntu 24.04
or 22.04
2 8GB 20GB

Each VM-DUT(UPFs) are as follows.

# SW Date Commit OS
a Open5GS UPF v2.7.2 2025.01.12 13585a34e3d5505dd86d2cdf78c91829f3936851 Ubuntu 24.04
b free5GC UPF
(go-upf) v1.2.4
2025.01.02 88fbd8bb7b86761cbbcf1367acf2df7d81392ce3 Ubuntu 24.04
c UPG-VPP v1.13.0 2024.03.25 dfdf64000566d35955d7c180720ff66086bd3572 Ubuntu 22.04
d eUPF v0.6.4 2024.12.23 307b80aec8c7bc8fa376e03927c2f5c55a1fd687 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 ens18 VirtIO vmbr1 10.0.0.131/24 (NAPT NW)
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 ens18 VirtIO vmbr1 10.0.0.151/24 (NAPT NW) down
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)
ens18 VirtIO vmbr1 10.0.0.151/24 (NAPT NW) down
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 ens18 VirtIO vmbr1 10.0.0.151/24 (NAPT NW)
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 ens18 VirtIO vmbr1 10.0.0.151/24 (NAPT NW) down
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 TEID
10.45.0.2/24 0x00000001

Changes in configuration files of Simple PFCP Client, TRex and UPFs

Please refer to the following for building Simple PFCP Client, TRex and UPFs respectively.

Changes in configuration files of Simple PFCP Client

See here for the original file.

  • /root/pfcp_request.py
    There is no change.

Changes in configuration files of TRex

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.py for UpLink
    There is no change.

  • /opt/trex/stl/udp_1pkt_simple.py for DownLink
    There is no change.

Changes in configuration files of UPFs

a-1. Changes in configuration files of Open5GS 5GC UPF (TUN)

  • 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.7

a-2. Changes in configuration files of Open5GS 5GC UPF (TAP)

  • open5gs/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.7

b. Changes in configuration files of free5GC 5GC UPF

  • go-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 Configuration

c. Changes in configuration files of UPG-VPP

See here for the original files.

  • openair-upf/startup.conf
    There is no change.

  • openair-upf/init.conf
    There is no change.

d. Changes in configuration files of eUPF

See here for the original file.

  • eupf/config.yml
    There is no change.

Network settings of TRex and UPFs

Network settings of TRex

Set the OS kernel parameter according to this.

a-1. Network settings of Open5GS 5GC UPF (TUN)

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

a-2. Network settings of Open5GS 5GC UPF (TAP)

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

b. Network settings of free5GC 5GC UPF

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

c. Network settings of UPG-VPP

See this.

d. Network settings of eUPF

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

Build Simple PFCP Client, TRex and UPFs

Please refer to the following for building Simple PFCP Client, TRex and UPFs respectively.

Run Simple PFCP Client, TRex and UPFs

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.

Run UPFs

a-1. Run Open5GS 5GC UPF (TUN)

Please use the configuration files changed for TUN interface.

# cd open5gs
# ./install/bin/open5gs-upfd

a-2. Run Open5GS 5GC UPF (TAP)

Please use the configuration files changed for TAP interface.

# cd open5gs
# ./install/bin/open5gs-upfd

b. Run free5GC 5GC UPF

# cd go-upf
# ./upf -c upfcfg.yaml

c. Run UPG-VPP

See this.

d. Run eUPF

See this.

Run Simple PFCP Client

See this.

Run TRex

Please refer to this to run TRex.

Measure UPF Performance

Please see below for methods for measuring UpLink and DownLink performances.

Results

In this measurement, the UDP payload size is set to 1400 bytes.

# UPF Date UpLink
Gbps
UpLink
Kpps
DownLink
Gbps
DownLink
Kpps
a-1 Open5GS UPF v2.7.2 (TUN) 2025.01.12 1.08 93.65 1.33 111.87
a-2 Open5GS UPF v2.7.2 (TAP) 2025.01.12 1.16 100.07 1.17 98.55
b free5GC UPF v1.2.4 2025.01.02 4.8 414.59 3.03 254.98
c UPG-VPP v1.13.0 2024.03.25 6.87 593.79 6.94 585.1
d eUPF v0.6.4 (native mode) 2024.12.23 9.42 814.75 9.59 804.51
a-1. logs for Open5GS UPF v2.7.2 (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.06                                total_tx_L1  : 1.81 Gbps
cpu_util.    : 1.68% @ 1 cores (1 per dual port)          total_rx     : 1.08 Gbps
rx_cpu_util. : 0.18% / 93.65 Kpps                         total_pps    : 150.07 Kpps
async_util.  : 0% / 4.79 bps                              drop_rate    : 705.53 Mbps
total_cps.   : 0 cps                                      queue_full   : 12,034 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.68% |              0.0% |                   
--         |                   |                   |                   
Tx bps L2  |         1.79 Gbps |          0.09 bps |         1.79 Gbps 
Tx bps L1  |         1.81 Gbps |          0.13 bps |         1.81 Gbps 
Tx pps     |       150.07 Kpps |             0 pps |       150.07 Kpps 
Line Util. |            0.91 % |               0 % |                   
---        |                   |                   |                   
Rx bps     |             0 bps |         1.08 Gbps |         1.08 Gbps 
Rx pps     |             0 pps |        93.65 Kpps |        93.65 Kpps 
----       |                   |                   |                   
opackets   |           2687829 |                 1 |           2687830 
ipackets   |                 0 |           1739130 |           1739130 
obytes     |        4004865210 |                46 |        4004865256 
ibytes     |                 0 |        2514780580 |        2514780580 
tx-pkts    |        2.69 Mpkts |            1 pkts |        2.69 Mpkts 
rx-pkts    |            0 pkts |        1.74 Mpkts |        1.74 Mpkts 
tx-bytes   |              4 GB |              46 B |              4 GB 
rx-bytes   |               0 B |           2.51 GB |           2.51 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.06                                total_tx_L1  : 1.76 Gbps
cpu_util.    : 1.89% @ 1 cores (1 per dual port)          total_rx     : 1.33 Gbps
rx_cpu_util. : 0.21% / 111.87 Kpps                        total_pps    : 150.36 Kpps
async_util.  : 0% / 9.02 bps                              drop_rate    : 413.05 Mbps
total_cps.   : 0 cps                                      queue_full   : 3,817 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.89% |                   
--         |                   |                   |                   
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.36 Kpps |       150.36 Kpps 
Line Util. |               0 % |            0.88 % |                   
---        |                   |                   |                   
Rx bps     |         1.33 Gbps |             0 bps |         1.33 Gbps 
Rx pps     |       111.87 Kpps |             0 pps |       111.87 Kpps 
----       |                   |                   |                   
opackets   |                 1 |           2007396 |           2007397 
ipackets   |           1304349 |                 0 |           1304349 
obytes     |                46 |        2902694616 |        2902694662 
ibytes     |        1933043782 |                 0 |        1933043782 
tx-pkts    |            1 pkts |        2.01 Mpkts |        2.01 Mpkts 
rx-pkts    |         1.3 Mpkts |            0 pkts |         1.3 Mpkts 
tx-bytes   |              46 B |            2.9 GB |            2.9 GB 
rx-bytes   |           1.93 GB |               0 B |           1.93 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.2 (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.06                                total_tx_L1  : 1.81 Gbps
cpu_util.    : 1.56% @ 1 cores (1 per dual port)          total_rx     : 1.16 Gbps
rx_cpu_util. : 0.1% / 100.07 Kpps                         total_pps    : 150.14 Kpps
async_util.  : 0% / 7.67 bps                              drop_rate    : 632.05 Mbps
total_cps.   : 0 cps                                      queue_full   : 5,803 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.56% |              0.0% |                   
--         |                   |                   |                   
Tx bps L2  |         1.79 Gbps |          2.85 bps |         1.79 Gbps 
Tx bps L1  |         1.81 Gbps |          4.08 bps |         1.81 Gbps 
Tx pps     |       150.14 Kpps |          0.01 pps |       150.14 Kpps 
Line Util. |            0.91 % |               0 % |                   
---        |                   |                   |                   
Rx bps     |             0 bps |         1.16 Gbps |         1.16 Gbps 
Rx pps     |             0 pps |       100.07 Kpps |       100.07 Kpps 
----       |                   |                   |                   
opackets   |           1867650 |                 1 |           1867651 
ipackets   |                 0 |           1268363 |           1268363 
obytes     |        2782798500 |                46 |        2782798546 
ibytes     |                 0 |        1834051498 |        1834051498 
tx-pkts    |        1.87 Mpkts |            1 pkts |        1.87 Mpkts 
rx-pkts    |            0 pkts |        1.27 Mpkts |        1.27 Mpkts 
tx-bytes   |           2.78 GB |              46 B |           2.78 GB 
rx-bytes   |               0 B |           1.83 GB |           1.83 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.06                                total_tx_L1  : 1.76 Gbps
cpu_util.    : 1.51% @ 1 cores (1 per dual port)          total_rx     : 1.17 Gbps
rx_cpu_util. : 0.08% / 98.55 Kpps                         total_pps    : 150.11 Kpps
async_util.  : 0% / 7.77 bps                              drop_rate    : 568.03 Mbps
total_cps.   : 0 cps                                      queue_full   : 4,638 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.51% |                   
--         |                   |                   |                   
Tx bps L2  |         11.27 bps |         1.74 Gbps |         1.74 Gbps 
Tx bps L1  |         16.18 bps |         1.76 Gbps |         1.76 Gbps 
Tx pps     |          0.03 pps |       150.11 Kpps |       150.11 Kpps 
Line Util. |               0 % |            0.88 % |                   
---        |                   |                   |                   
Rx bps     |         1.17 Gbps |             0 bps |         1.17 Gbps 
Rx pps     |        98.55 Kpps |             0 pps |        98.55 Kpps 
----       |                   |                   |                   
opackets   |                 1 |           1574528 |           1574529 
ipackets   |           1009552 |                 0 |           1009552 
obytes     |                46 |        2276767488 |        2276767534 
ibytes     |        1496154628 |                 0 |        1496154628 
tx-pkts    |            1 pkts |        1.57 Mpkts |        1.57 Mpkts 
rx-pkts    |        1.01 Mpkts |            0 pkts |        1.01 Mpkts 
tx-bytes   |              46 B |           2.28 GB |           2.28 GB 
rx-bytes   |            1.5 GB |               0 B |            1.5 GB 
-----      |                   |                   |                   
oerrors    |                 0 |                 0 |                 0 
ierrors    |                 0 |                 0 |                 0 

status:  -

Press 'ESC' for navigation panel...
status: 

tui>
b. logs for free5GC UPF v1.2.4

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.96 Gbps
version      : STL @ v3.06                                total_tx_L1  : 6.04 Gbps
cpu_util.    : 5.39% @ 1 cores (1 per dual port)          total_rx     : 4.8 Gbps
rx_cpu_util. : 0.23% / 414.59 Kpps                        total_pps    : 500.31 Kpps
async_util.  : 0% / 8.98 bps                              drop_rate    : 1.17 Gbps
total_cps.   : 0 cps                                      queue_full   : 27,815 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.  |             5.39% |              0.0% |                   
--         |                   |                   |                   
Tx bps L2  |         5.96 Gbps |          2.82 bps |         5.96 Gbps 
Tx bps L1  |         6.04 Gbps |          4.04 bps |         6.04 Gbps 
Tx pps     |       500.31 Kpps |          0.01 pps |       500.31 Kpps 
Line Util. |            3.02 % |               0 % |                   
---        |                   |                   |                   
Rx bps     |             0 bps |          4.8 Gbps |          4.8 Gbps 
Rx pps     |             0 pps |       414.59 Kpps |       414.59 Kpps 
----       |                   |                   |                   
opackets   |           6304949 |                 1 |           6304950 
ipackets   |                 0 |           5255842 |           5255842 
obytes     |        9394374010 |                46 |        9394374056 
ibytes     |                 0 |        7599946132 |        7599946132 
tx-pkts    |         6.3 Mpkts |            1 pkts |         6.3 Mpkts 
rx-pkts    |            0 pkts |        5.26 Mpkts |        5.26 Mpkts 
tx-bytes   |           9.39 GB |              46 B |           9.39 GB 
rx-bytes   |               0 B |            7.6 GB |            7.6 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 350kpps -d 60
Global Statistics

connection   : localhost, Port 4501                       total_tx_L2  : 4.05 Gbps
version      : STL @ v3.06                                total_tx_L1  : 4.11 Gbps
cpu_util.    : 4.23% @ 1 cores (1 per dual port)          total_rx     : 3.03 Gbps
rx_cpu_util. : 0.33% / 254.98 Kpps                        total_pps    : 350.09 Kpps
async_util.  : 0% / 7.52 bps                              drop_rate    : 1.02 Gbps
total_cps.   : 0 cps                                      queue_full   : 55,554 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% |             4.23% |                   
--         |                   |                   |                   
Tx bps L2  |          45.1 bps |         4.05 Gbps |         4.05 Gbps 
Tx bps L1  |         64.71 bps |         4.11 Gbps |         4.11 Gbps 
Tx pps     |          0.12 pps |       350.09 Kpps |       350.09 Kpps 
Line Util. |               0 % |            2.05 % |                   
---        |                   |                   |                   
Rx bps     |         3.03 Gbps |             0 bps |         3.03 Gbps 
Rx pps     |       254.98 Kpps |             0 pps |       254.98 Kpps 
----       |                   |                   |                   
opackets   |                 1 |           5821201 |           5821202 
ipackets   |           4250168 |                 0 |           4250168 
obytes     |                46 |        8417456646 |        8417456692 
ibytes     |        6315748208 |                 0 |        6315748208 
tx-pkts    |            1 pkts |        5.82 Mpkts |        5.82 Mpkts 
rx-pkts    |        4.25 Mpkts |            0 pkts |        4.25 Mpkts 
tx-bytes   |              46 B |           8.42 GB |           8.42 GB 
rx-bytes   |           6.32 GB |               0 B |           6.32 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 800kpps -d 60
Global Statistics

connection   : localhost, Port 4501                       total_tx_L2  : 9.42 Gbps
version      : STL @ v3.06                                total_tx_L1  : 9.55 Gbps
cpu_util.    : 12.54% @ 1 cores (1 per dual port)         total_rx     : 6.87 Gbps
rx_cpu_util. : 0.72% / 593.79 Kpps                        total_pps    : 790.31 Kpps
async_util.  : 0% / 9.16 bps                              drop_rate    : 2.55 Gbps
total_cps.   : 0 cps                                      queue_full   : 1,064,989 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.  |            12.54% |              0.0% |                   
--         |                   |                   |                   
Tx bps L2  |         9.42 Gbps |             0 bps |         9.42 Gbps 
Tx bps L1  |         9.55 Gbps |             0 bps |         9.55 Gbps 
Tx pps     |       790.31 Kpps |             0 pps |       790.31 Kpps 
Line Util. |            4.77 % |               0 % |                   
---        |                   |                   |                   
Rx bps     |             0 bps |         6.87 Gbps |         6.87 Gbps 
Rx pps     |             0 pps |       593.79 Kpps |       593.79 Kpps 
----       |                   |                   |                   
opackets   |          21316353 |                 0 |          21316353 
ipackets   |                 0 |          18084576 |          18084576 
obytes     |       31761365970 |                 0 |       31761365970 
ibytes     |                 0 |       26150296896 |       26150296896 
tx-pkts    |       21.32 Mpkts |            0 pkts |       21.32 Mpkts 
rx-pkts    |            0 pkts |       18.08 Mpkts |       18.08 Mpkts 
tx-bytes   |          31.76 GB |               0 B |          31.76 GB 
rx-bytes   |               0 B |          26.15 GB |          26.15 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.31 Gbps
version      : STL @ v3.06                                total_tx_L1  : 10.45 Gbps
cpu_util.    : 12.13% @ 1 cores (1 per dual port)         total_rx     : 6.94 Gbps
rx_cpu_util. : 0.67% / 585.1 Kpps                         total_pps    : 891.25 Kpps
async_util.  : 0% / 7.3 bps                               drop_rate    : 3.37 Gbps
total_cps.   : 0 cps                                      queue_full   : 746,833 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.13% |                   
--         |                   |                   |                   
Tx bps L2  |             0 bps |        10.31 Gbps |        10.31 Gbps 
Tx bps L1  |             0 bps |        10.45 Gbps |        10.45 Gbps 
Tx pps     |             0 pps |       891.25 Kpps |       891.25 Kpps 
Line Util. |               0 % |            5.23 % |                   
---        |                   |                   |                   
Rx bps     |         6.94 Gbps |             0 bps |         6.94 Gbps 
Rx pps     |        585.1 Kpps |             0 pps |        585.1 Kpps 
----       |                   |                   |                   
opackets   |                 0 |          15047421 |          15047421 
ipackets   |          10585316 |                 0 |          10585316 
obytes     |                 0 |       21758570766 |       21758570766 
ibytes     |       15700294072 |                 0 |       15700294072 
tx-pkts    |            0 pkts |       15.05 Mpkts |       15.05 Mpkts 
rx-pkts    |       10.59 Mpkts |            0 pkts |       10.59 Mpkts 
tx-bytes   |               0 B |          21.76 GB |          21.76 GB 
rx-bytes   |           15.7 GB |               0 B |           15.7 GB 
-----      |                   |                   |                   
oerrors    |                 0 |                 0 |                 0 
ierrors    |                 0 |                 0 |                 0 

status:  \

Press 'ESC' for navigation panel...
status: 

tui>
d. logs for eUPF v0.6.4

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.67 Gbps
version      : STL @ v3.06                                total_tx_L1  : 11.82 Gbps
cpu_util.    : 48.75% @ 1 cores (1 per dual port)         total_rx     : 9.42 Gbps
rx_cpu_util. : 2.56% / 814.75 Kpps                        total_pps    : 978.83 Kpps
async_util.  : 0% / 7.05 bps                              drop_rate    : 2.24 Gbps
total_cps.   : 0 cps                                      queue_full   : 6,151,050 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.  |            48.75% |              0.0% |                   
--         |                   |                   |                   
Tx bps L2  |        11.67 Gbps |             0 bps |        11.67 Gbps 
Tx bps L1  |        11.82 Gbps |             0 bps |        11.82 Gbps 
Tx pps     |       978.83 Kpps |             0 pps |       978.83 Kpps 
Line Util. |            5.91 % |               0 % |                   
---        |                   |                   |                   
Rx bps     |             0 bps |         9.42 Gbps |         9.42 Gbps 
Rx pps     |             0 pps |       814.75 Kpps |       814.75 Kpps 
----       |                   |                   |                   
opackets   |          15615464 |                 0 |          15615464 
ipackets   |                 0 |          12287777 |          12287777 
obytes     |       23267041360 |                 0 |       23267041360 
ibytes     |                 0 |       17768125542 |       17768125542 
tx-pkts    |       15.62 Mpkts |            0 pkts |       15.62 Mpkts 
rx-pkts    |            0 pkts |       12.29 Mpkts |       12.29 Mpkts 
tx-bytes   |          23.27 GB |               0 B |          23.27 GB 
rx-bytes   |               0 B |          17.77 GB |          17.77 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.28 Gbps
version      : STL @ v3.06                                total_tx_L1  : 11.44 Gbps
cpu_util.    : 15.33% @ 1 cores (1 per dual port)         total_rx     : 9.59 Gbps
rx_cpu_util. : 2.55% / 804.51 Kpps                        total_pps    : 975.2 Kpps
async_util.  : 0% / 6.56 bps                              drop_rate    : 1.69 Gbps
total_cps.   : 0 cps                                      queue_full   : 1,138,697 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% |            15.33% |                   
--         |                   |                   |                   
Tx bps L2  |             0 bps |        11.28 Gbps |        11.28 Gbps 
Tx bps L1  |             0 bps |        11.44 Gbps |        11.44 Gbps 
Tx pps     |             0 pps |        975.2 Kpps |        975.2 Kpps 
Line Util. |               0 % |            5.72 % |                   
---        |                   |                   |                   
Rx bps     |         9.59 Gbps |             0 bps |         9.59 Gbps 
Rx pps     |       804.51 Kpps |             0 pps |       804.51 Kpps 
----       |                   |                   |                   
opackets   |                 0 |          11234257 |          11234257 
ipackets   |           9226675 |                 0 |           9226675 
obytes     |                 0 |       16244735622 |       16244735622 
ibytes     |       13747745750 |                 0 |       13747745750 
tx-pkts    |            0 pkts |       11.23 Mpkts |       11.23 Mpkts 
rx-pkts    |        9.23 Mpkts |            0 pkts |        9.23 Mpkts 
tx-bytes   |               0 B |          16.24 GB |          16.24 GB 
rx-bytes   |          13.75 GB |               0 B |          13.75 GB 
-----      |                   |                   |                   
oerrors    |                 0 |                 0 |                 0 
ierrors    |                 0 |                 0 |                 0 

status:  |

Press 'ESC' for navigation panel...
status: 

tui>

Summary

These measurement results show that eUPF has relatively outstanding performance even on Proxmox VE VM. Also, Open5GS shows significantly higher performance when measured with srsRAN. This suggests that the measurement environment, condition and tools have a large 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.

Performance of N6 interface only

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 1) TCP
throughput
2) UDP
throughput
2) UDP
packet loss
3) RTT
(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.

Changelog (summary)

  • [2025.01.20] Changed eUPF measurement to those measured using the binary that does not output kernel logs for debugging.
  • [2025.01.17] Initial release.