Skip to main content

Lab 5: O-RAN Advanced

This experiment is to deploy a 5G Standalone (SA) network using OpenAirInterface (OAI) RF Simulator gNB and OAI minimal 5GC, using the F1 Split architecture. We also deploy FlexRIC as the Near-RT RIC with a monitoring xApp.

open-ran.yaml
apiVersion: athena.trirematics.io/v1
kind: Network
metadata:
name: o-ran
namespace: trirematics
spec:
slices:
- plmn: "00101"
dnn: "internet"
network-mode: "IPv4"
service-type: eMBB
differentiator: 0x000000
ipv4-range: "12.1.1.0/24"
ipv6-range: "2001:db8:1::/64"
access:
- name: oai-cu-du
stack: 5g-sa
model: oai-ran/cu-du
radio:
device: rf-sim
cells:
- band: n78
arfcn: 640008
bandwidth: 40MHz
subcarrier-spacing: 30kHz
tdd-config:
period: 5ms
dl-slots: 7
dl-symbols: 6
ul-slots: 2
ul-symbols: 4
core-networks:
- core.o-ran
controller: ric.o-ran
core:
- name: core
stack: 5g-sa
model: oai-cn/minimal
identity:
region: 0
cn-group: 4
cn-id: 5
edge:
- name: ric
stack: 5g-sa
model: mosaic5g/flexric-large
- name: monitoring
stack: 5g-sa
model: mosaic5g/monitoring-c
profiles:
- mac-sm
- database
- name: sdl
stack: 5g-sa
model: mosaic5g/xapps-sdl
dns:
ipv4:
default: 8.8.8.8
secondary: 8.8.4.4
---
apiVersion: athena.trirematics.io/v1
kind: Terminal
metadata:
name: ue1
namespace: trirematics
spec:
vendor: oai
stack: 5g-sa
model: terminal/nr-rfsim
preferred-access: oai-cu-du.o-ran
target-cores:
- core.o-ran
identity:
imsi: "001010000000001"
pin: "1234"
opc: "0xc42449363bbad02b66d16bc975d77cc1"
key: "0xfec86ba6eb707ed08905757b1bb44b8f"
sqn: "0xff9bb4000001"
slice:
dnn: "internet"
network-mode: "IPv4"
service-type: eMBB
differentiator: 0x000000
radio:
bands:
- n78
readiness-check:
method: ping
target: google-ip
interface-name: oaitun_ue0
---
apiVersion: athena.trirematics.io/v1
kind: Terminal
metadata:
name: ue2
namespace: trirematics
annotations:
extras.trirematics.io/initial-delay: "10"
spec:
vendor: oai
stack: 5g-sa
model: terminal/nr-rfsim
preferred-access: oai-cu-du.o-ran
target-cores:
- core.o-ran
identity:
imsi: "001010000000002"
pin: "1234"
opc: "0xc42449363bbad02b66d16bc975d77cc1"
key: "0xfec86ba6eb707ed08905757b1bb44b8f"
sqn: "0xff9bb4000001"
slice:
dnn: "internet"
network-mode: "IPv4"
service-type: eMBB
differentiator: 0x000000
radio:
bands:
- n78
readiness-check:
method: ping
target: google-ip
interface-name: oaitun_ue0
tip

In this lab, you are going to deal with a CSV file extracted from the xApp. You could use any tool including Excel, LibreOffice Calc, or Python to analyze the CSV file.

Deployment and Testing

Deploy the file using the command cli install network open-ran.yaml. Check for the status of the deployment using the command cli observe and make sure all the Elements are in the 1/1 Y state.

CSV Extraction

Use the following command to access to the MySQL shell for the xApps Shared Data Layer (SDL):

cli cic $element run --follow -- sql

The period between the MAC service model indication messages by default is 10 ms, meaning to get records for two UE for the last 60 seconds, you need the last 12000 records. The following command would extract the last 12000 records from the MAC service model for the two UEs and save them in the /etc/t9s/athena/wmi/mysql/private/test1.csv file.

select tstamp, ngran_node, e2node_nb_id, frame, slot, dl_aggr_tbs, dl_aggr_prb, \
rnti, dl_mcs1 from MAC_UE ORDER BY tstamp DESC LIMIT 12000 INTO OUTFILE \
'/etc/t9s/athena/wmi/mysql/private/test1.csv' FIELDS TERMINATED BY ',' LINES \
TERMINATED BY '\n';

Exit the MySQL shell using the exit command. Then use the following command to copy the file to your local machine:

cli cic {element} cat -- /etc/t9s/athena/wmi/mysql/private/test1.csv > test1.csv
danger

Everytime you run this command, you have to give it a different file name, otherwise it would fail.

Run a downlink TCP throughput test for the first UE for the duration of 45 seconds and then extract the CSV file. Extract the output of Iperf command for the throughput test as well and save it along with the CSV file.

💬 Questions

  1. Explain the meaning of each column in the CSV file based on the SQL query.
  2. How many slots and frames are there in the CSV file?
  3. Which UE (based on the RNTI) is the target of the throughput test?

Data Analysis Questions

In the dataset, TBS and PRB are defined as the aggregated values over the whole duration of the test. Hence, to calculate TBS and PRB per frame, you should subtract the value of the previous frame from the value of the current frame. For the PRBs, you have to pay attention to the TDD pattern to understand which symbols are downlink and which are uplink. The PRB utilization is the ratio of the number of PRBs used for the transmission to the total number of PRBs in that frame.

💬 Questions

  1. Plot the value of MCS for the target UE for the duration of the throughput test and explain the changes.
  2. Plot TBS and PRB per frame for the target UE for the duration of the throughput test and explain the changes.
  3. Calculate the average MAC throughput per second and compare it with the Iperf throughput report.
  4. Calculate and plot the average PRB utilization per second for the target UE.

MCS Measurement

For this experiment use the mcs.yaml file as shown below:

mcs.yaml
apiVersion: athena.trirematics.io/v1
kind: Network
metadata:
name: mcs-test
namespace: trirematics
spec:
slices:
- plmn: "00101"
dnn: "internet"
network-mode: "IPv4"
service-type: eMBB
differentiator: 0x000000
ipv4-range: "12.1.1.0/24"
ipv6-range: "2001:db8:1::/64"
access:
- name: oai-cu-du
stack: 5g-sa
model: oai-ran/cu-du
radio:
device: rf-sim
annotations:
extras.trirematics.io/max-mcs-dl: "28"
cells:
- band: n78
arfcn: 640008
bandwidth: 40MHz
subcarrier-spacing: 30kHz
tdd-config:
period: 5ms
dl-slots: 7
dl-symbols: 6
ul-slots: 2
ul-symbols: 4
core-networks:
- core.mcs-test
controller: ric.mcs-test
core:
- name: core
stack: 5g-sa
model: oai-cn/minimal
identity:
region: 0
cn-group: 4
cn-id: 5
dns:
ipv4:
default: 8.8.8.8
secondary: 8.8.4.4
---
apiVersion: athena.trirematics.io/v1
kind: Terminal
metadata:
name: ue
namespace: trirematics
spec:
vendor: oai
stack: 5g-sa
model: terminal/nr-rfsim
preferred-access: oai-cu-du.mcs-test
target-cores:
- core.mcs-test
identity:
imsi: "001010000000001"
pin: "1234"
opc: "0xc42449363bbad02b66d16bc975d77cc1"
key: "0xfec86ba6eb707ed08905757b1bb44b8f"
sqn: "0xff9bb4000001"
slice:
dnn: "internet"
network-mode: "IPv4"
service-type: eMBB
differentiator: 0x000000
radio:
bands:
- n78
readiness-check:
method: ping
target: google-ip
interface-name: oaitun_ue0

In the YAML file the maximum DL MCS is defined as an annotation. You need to run the following test for MCS values of 9, 16, and 28.

Deploy the file using the command cli install network mcs.yaml. Check for the status of the deployment using the command cli observe and make sure all the Elements are in the 1/1 Y state.

Then measure the DL TCP throughput for each MCS for duration of 60 seconds each.

💬 Questions

  1. Explain how the MCS value affects the TCP throughput.
  2. Plot the TCP throughput for each MCS value using a bar chart.