Running cuBB End-to-End
Beyond the cuPHY layer 1 PHY software SDK and its standalone examples, this section describes how to build and run the cuBB software components shown in the block diagram below.
The cuPHYController block operates between the L2+ layer and the RU interface. It interfaces through cuPHY and GPU-DPDK to operate the GPU and the NIC.
The RU Emulator emulates the network traffic of an RU.
The TestMAC provides the L2+ traffic interface.
The cuPHYController is exercised with an environment between the RU Emulator and the TestMAC.
The L1/L2 interface is based on the 5G FAPI 222.10.02 with partial 222.10.04 defined by the Small Cell Forum (SCF). For the supported message and PDU types and exceptions, refer to cuBB Release Notes.
The following procedure describes the steps for building the end-to-end components in the cuBB SDK.
Inside the cuBB container, use the following command:
$ cd /opt/nvidia/cuBB
$ export cuBB_SDK=$(pwd)
Create and navigate to the build directory:
$ mkdir build && cd build
Choose one of the RU types:
If building with static SFN slot numbers for the RU Emulator test, then execute the following:
$ cmake .. -DDYNAMIC_SFN_SLOT=OFF
If building for dynamic SFN slot numbers (eLSU/O-RU Integration), then execute the following:
$ cmake ..
If building for dynamic SFN slot numbers with Foxconn O-RU, then execute the following:
$ cmake .. -DFXN_RU=ON
Choose the build option(s):
If building to enable supported FAPI 10.04 fields (e.g., SRS), then add the flag shown below:
$ cmake .. <existing flags> -DSCF_FAPI_10_04=ON
If building to run Test Mode (TM) tests, then add the flag shown below:
$ cmake .. <existing flags> -DENABLE_CONFORMANCE_TM_PDSCH_PDCCH=ON
Here is the table of supported build variants:
RU Type \ Build Options |
FAPI 10.02: Default (no build flag) |
Enable FAPI 10.04 fields: -DSCF_FAPI_10_04=ON |
Enable TestMode: -DENABLE_CONFORMANCE_TM_PDSCH_PDCCH=ON |
---|---|---|---|
RU emulator: -DDYNAMIC_SFN_SLOT=OFF | cmake .. -DDYNAMIC_SFN_SLOT=OFF | cmake .. -DDYNAMIC_SFN_SLOT=OFF -DSCF_FAPI_10_04=ON | cmake .. -DDYNAMIC_SFN_SLOT=OFF -DENABLE_CONFORMANCE_TM_PDSCH_PDCCH=ON |
Keysight eLSU: Default (no build flag) | cmake .. * | N/A | N/A |
Foxconn O-RU: -DFXN_RU=ON | cmake .. -DFXN_RU=ON * | N/A | N/A |
When building for E2E test, “-DENABLE_L2_SLT_RSP=ON” is enabled by default in the cmake build options and requires the L2 to support the vendor-specific message “SLOT.response”. If the L2 doesn’t support it, “-DENABLE_L2_SLT_RSP=OFF” should be included in the cmake build option to turn off this feature in L1.
To build all components of the SDK, use these commands:
$ cd ${cuBB_SDK}/build
$ make -j $(nproc --all)
To build only the cuPHY, use these commands:
$ cd ${cuBB_SDK}/build/cuPHY
$ make -j $(nproc --all)
To build only the Test MAC, use these commands:
$ cd ${cuBB_SDK}/build/cuPHY-CP/testMAC
$ make -j $(nproc --all)
To build only the cuPHY controller, use these commands:
$ cd ${cuBB_SDK}/build/cuPHY-CP/cuphycontroller
$ make -j $(nproc --all)
To build only the cuPHY driver, use these commands:
$ cd ${cuBB_SDK}/build/cuPHY-CP/cuphydriver
$ make -j $(nproc --all)
To build only the RU emulator, use these commands:
$ cd ${cuBB_SDK}/build/cuPHY-CP/ru-emulator
$ make -j $(nproc --all)
This section describes which config parameters to modify to run end-to-end.
Server #1 (to Run TestMAC and cuPHYController)
Check and edit the following parameters in the .yaml
file:
Edit the NIC PCIe address to match the NIC hardware PCIE address. On Aerial Devkit server, we are using address 0000:b5:00.0:
$ sed -i "s/ nic:.*/ nic: 0000:b5:00.0/" ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_F08.yaml
Check the GPU ID for the GPU that is sharing the PCIe switch with the NIC. The gpus parameter shown below has a default value of 0 for a GPU ID of 0. If GPU 0 is not the GPU you want to use, replace 0 in the sed command line and run it:
$ sed -i "/gpus:/{n;s/.*/ - 0/}" ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_F08.yaml
If the system has only one GPU card, we can keep the default setting of 0.
To identify which GPU is sharing the PCIe switch with the NIC, use the following command:
$ nvidia-smi topo -m
In the output, look for the GPU connected to the NIC with connection type of PIX (where they intersect in the table). In the example below, GPU 0 in the column is the one with the PIX intersecting with Mellanox mlx5_0 and mlx5_1. GPU ID value of 0 is what we want to use for the
.yaml gpus
parameter.GPU0 mlx5_0 mlx5_1 CPU Affinity GPU0 X PIX PIX 0-23 mlx5_0 PIX X PIX mlx5_1 PIX PIX X
The meaning of PIX is defined below:
X = Self SYS = Connection traversing PCIe as well as the SMP interconnect between NUMA nodes (e.g., QPI/UPI) NODE = Connection traversing PCIe as well as the interconnect between PCIe Host Bridges within a NUMA node PHB = Connection traversing PCIe as well as a PCIe Host Bridge (typically the CPU) PXB = Connection traversing multiple PCIe bridges (without traversing the PCIe Host Bridge) PIX = Connection traversing at most a single PCIe bridge NV# = Connection traversing a bonded set of # NVLinks
Server #2 (to Run RU emulator)
The RU Emulator reads a configuration file located at: $cuBB_SDK/cuPHY-CP/ru-emulator/config/config.yaml
Before running the ru-emulator, please modify the config.yaml
to match your server system hardware settings.
There are two parameters (highlighted below) to modify in this config.yaml
file:
# PCI Address of NIC interface used
nic_interface: b5:00.0
# MAC address of cuPHYController port in use on server#1
peerethaddr: 1c:34:da:ff:ff:fe
Update the nic_interface
and peerethaddr
according to the systems used. Look up the addresses
of these NIC interfaces.
nic_interface
is the NIC port PCIe bus address on the system running RU Emulator. Replace 0000:b5:00.0 with the PCIe address of NIC that will be used.peerethaddr
is the NIC port MAC address on the system running cuPHYController. Replace the MAC address with the MAC address of the NIC used in Server#1
Replace 0000:b5:00.0 with the PCIe address of NIC port that will be used:
$ sed -i "s/nic_interface.*/nic_interface: 0000:b5:00.0/" ${cuBB_SDK}/cuPHY-CP/ru-emulator/config/config.yaml
Replace the MAC address with the MAC address of the NIC port used in Server#1:
$ sed -i "s/peerethaddr.*/peerethaddr: 1c:34:da:ff:ff:fe/" ${cuBB_SDK}/cuPHY-CP/ru-emulator/config/config.yaml
Run the below command on the host to identify the correct PCIe address to be used and the MAC address.
$ sudo lshw -c network -businfo
Bus info Device Class Description
=========================================================
pci@0000:05:00.0 eno1 network I210 Gigabit Network Connection
pci@0000:06:00.0 enp6s0 network I210 Gigabit Network Connection
pci@0000:b5:00.0 ens6f0 network MT2892 Family [ConnectX-6 Dx]
pci@0000:b5:00.1 ens6f1 network MT2892 Family [ConnectX-6 Dx]
vethdf87878 network Ethernet interface
To find the MAC address of the NIC port, run the following command:
$ ifconfig -a
…
68: ens6f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1514 qdisc mq state UP group default qlen 1000
link/ether 1c:34:da:ff:ff:fe brd ff:ff:ff:ff:ff:ff
inet6 fe80::bace:f6ff:fe33:fe16/64 scope link
valid_lft forever preferred_lft forever
69: ens6f1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 1c:34:da:ff:ff:ff brd ff:ff:ff:ff:ff:ff
inet6 fe80::bace:f6ff:fe33:fe17/64 scope link
valid_lft forever preferred_lft forever
The MAC addresses of the NIC port will be under the label of link/ether.
This section describes how to run the various cuBB software components together. Here, the cuBB utilizes both the GPU and the NIC for cuPHY L1 compute and for network data traffic acceleration.
A network connection is used between the two servers to physically connect the RU Emulator and the cuBB gNB software stack.
To verify PTP4L and PHC2SYS Services are Running, run the following commands on the host:
$ sudo systemctl status ptp4l.service
…
# check that the service is active and has low rms value (<30):
$ sudo systemctl status phc2sys.service
Verify the System Clock is Synchronized and NTP is off:
$ timedatectl
Local time: Thu 2022-02-03 22:30:58 UTC
Universal time: Thu 2022-02-03 22:30:58 UTC
RTC time: Thu 2022-02-03 22:30:58
Time zone: Etc/UTC (UTC, +0000)
System clock synchronized: yes
NTP service: inactive
RTC in local TZ: no
Build and load the GDRCopy kernel driver:
$ cd ${cuBB_SDK}/cuPHY-CP/external/gdrcopy/
$ make
$ ./insmod.sh
This section describes how to run the cuBB end-to-end using the SCF FAPI.
There are three use case examples:
Use case 1: testMAC + SCF L2 Adapter Standalone
Use case 2: testMAC + cuPHYController_SCF + RU Emulator
Use case 3: testMAC + cuPHYController_SCF + RU Emulator P5G PRACH
Execute the following command before running cuphycontroller
, test_mac
and ru_emulator
.
export LD_LIBRARY_PATH=/opt/mellanox/dpdk/lib/x86_64-linux-gnu:\
/opt/mellanox/doca/lib/x86_64-linux-gnu
In some system environments, export may not work; in this case, add the value before the command:
sudo -E LD_LIBRARY_PATH=/opt/mellanox/dpdk/lib/x86_64-linux-gnu:\
/opt/mellanox/doca/lib/x86_64-linux-gnu \
$cuBB_SDK/build/cuPHY-CP/cuphycontroller/examples/cuphycontroller_scf
For the cuphycontroller
session we also need to export the GDRCOPY_PATH_L
$ export GDRCOPY_PATH_L=$cuBB_SDK/cuPHY-CP/external/gdrcopy/src
Running testMAC + SCF L2 Adapter Standalone
Build all the modules as described in the Building cuBB for End-to-End chapter.
Run l2adapter in standalone mode:
sudo $cuBB_SDK/build/cuPHY-CP/scfl2adapter/scf_app/cuphycontroller\
/l2_adapter_cuphycontroller_scf
Run testMAC after l2adapter starts.
You can run different cases:
sudo $cuBB_SDK/build/cuPHY-CP/testMAC/testMAC/test_mac <Fxx> <xC> [-- channels <CHANNELS>] --no-validation
Examples:
sudo $cuBB_SDK/build/cuPHY-CP/testMAC/testMAC/test_mac F08 1C --no-validation
sudo $cuBB_SDK/build/cuPHY-CP/testMAC/testMAC/test_mac F08 2C --no-validation
sudo $cuBB_SDK/build/cuPHY-CP/testMAC/testMAC/test_mac F08 3C --no-validation
sudo $cuBB_SDK/build/cuPHY-CP/testMAC/testMAC/test_mac F08 4C --no-validation
Test result and test log: In the testMAC terminal output below, you can see the TTI tick counter and throughput:
08:32:15.793986 Cell 0 | DL 1586.28 Mbps 1600 Slots | UL 249.10 Mbps 400 Slots | Prmb 0 | HARQ 0 | SR 0 | CSI1 0 | CSI2 0 | ERR 150 | INV 0
08:32:15.793996 Cell 1 | DL 1586.28 Mbps 1600 Slots | UL 249.10 Mbps 400 Slots | Prmb 0 | HARQ 0 | SR 0 | CSI1 0 | CSI2 0 | ERR 150 | INV 0
08:32:15.794000 Cell 2 | DL 1586.28 Mbps 1600 Slots | UL 249.10 Mbps 400 Slots | Prmb 0 | HARQ 0 | SR 0 | CSI1 0 | CSI2 0 | ERR 150 | INV 0
08:32:15.794003 Cell 3 | DL 1586.28 Mbps 1600 Slots | UL 249.10 Mbps 400 Slots | Prmb 0 | HARQ 0 | SR 0 | CSI1 0 | CSI2 0 | ERR 150 | INV 0
Running testMAC + cuPHYController_SCF + RU Emulator
Common Configurations: Configure the NIC address in the following configuration files.
cuphycontroller_F08.yaml
cuphycontroller_F13_SCF.yaml
cuphycontroller_nrSim_SCF.yaml
Server#1
Replace 0000:b5:00.0 with the PCIe address of NIC port that will be used to connect to Server#2 (RU emulator):
sed -i "s/ nic:.*/ nic: 0000:b5:00.0/" ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_*.yaml
Server#2
Replace 0000:b5:00.0 with the PCIe address of NIC that will be used. Replace the MAC address with the MAC address of the NIC used in Server#1 (the server running cuPHYController and testMAC)
sed -i "s/nic_interface.*/nic_interface: 0000:b5:00.0/" ${cuBB_SDK}/cuPHY-CP/ru-emulator/config/config.yaml
sed -i "s/peerethaddr.*/peerethaddr: 1c:34:da:ff:ff:fe/" ${cuBB_SDK}/cuPHY-CP/ru-emulator/config/config.yaml
The nvlog level can be changed in $cuBB_SDK/cuPHY/nvlog/config/nvlog_config.yaml
if needed. For example, to change to console only log level:
name: phy
- shm_log_level:5 # SHM log level
+ shm_log_level: 3 # SHM log level
console_log_level: 3 # Console log level
Before running cuBB test case, please restart MPS in each run. Run the following commands to export environment variables and restart MPS in the cuphycontroller terminal (do not run this for test_mac and ru-emulator).
# Export variables
export CUDA_DEVICE_MAX_CONNECTIONS=8
export CUDA_MPS_PIPE_DIRECTORY=/var
export CUDA_MPS_LOG_DIRECTORY=/var
# Stop existing MPS
sudo -E echo quit | sudo -E nvidia-cuda-mps-control
# Start MPS
sudo -E nvidia-cuda-mps-control -d
sudo -E echo start_server -uid 0 | sudo -E nvidia-cuda-mps-control
Execute the following command to export the dpdk link path before running cuphycontroller and test_mac.
export LD_LIBRARY_PATH=$cuBB_SDK/gpu-dpdk/build/install/lib/x86_64-linux-gnu
Export may not work in some system environments. In this case, add the value before command as shown in the following example:
sudo -E LD_LIBRARY_PATH=$cuBB_SDK/gpu-dpdk/build/install/lib/x86_64-linux-gnu ./cuphycontroller_scf
Execute the following command to disable GPU(if there is one) for ru_emulator.
export CUDA_VISIBLE_DEVICES=""
Export may not work in some system environments. In this case, add the value before command as shown in the following example:
sudo -E CUDA_VISIBLE_DEVICES="" ./ru_emulator xxx
Without CUDA_VISIBLE_DEVICES=””, below log will be seen when ru_emulator is started with a GPU on the host(It will not affect the functionality though)
15:15:56.251444 [FH.FLOW] [/opt/nvidia/cuBB/cuPHY-CP/aerial-fh-driver/lib/flow.cpp:201] cuda failed with invalid argument
For running on an R750 machine, we also need to be NUMA aware to get best performance:
Check which NUMA the GPU is on, and configure the CPUs used/numactl accordingly.
Configure the workers in ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_F08_R750.yaml
to use CPUs on the same NUMA node:
workers_ul:
- 5
- 7
workers_dl:
- 11
- 13
- 15
Use numactl to ensure the memory allocation is also on the right NUMA node for the process:
sudo -E numactl -N 1 -m 1 ./cuphycontroller_scf F08_R750
sudo -E numactl -N 1 -m 1 ./test_mac x
Running the F08 Test Cases
Configure the cell_group
in ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_F08*.yaml
:
Set cell_group to 1 and set cell_group_num to the number of cells to run.
For running on a A100x R750 machine:
Configure the cell_group
in ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_F08_R750.yaml
:
For example, to run 1C:
cell_group: 1
cell_group_num: 1
To run 2C:
cell_group: 1
cell_group_num: 2
To run 3C:
cell_group: 1
cell_group_num: 3
To run 4C:
cell_group: 1
cell_group_num: 4
F08 traffic patterns:
For the latest series 41 and 44, we have generated 80 slot patterns for a more realistic simulation:
- Series 41 :
- Frame 0:
SSB#0: symbol2-5, SLOT0,
SSB#1: symbol8-11, SLOT0,
SSB#3: symbol8-11, SLOT1,
SSB#4: symbol2-5, SLOT2,
PRACH: 4 occasions, slot 5.
PDSCH: 6 UEG / slot, MCS 27, 45 PRBs / UEG, (42 PRBs / UEG when having SSB)
PUSCH: 6 UEG / slot, MCS 27, 45 PRBs / UEG, (37 PRBs / UEG when having PRACH)
UCI on PUSCH: 4 HARQ, 33 CSI-1, 5 CSI-2
PDCCH: 12 DCI / slot (6 DL + 6 UL)
PUCCH: 24 UE 1 bit each (PF1)
- Frame 1:
TRS: symbol {6,10}/{5,9}; SLOT 0, 1, 10, 11, 16, 17, 18, 19;
CSIRS: symbol 12/13; slot 0, 10, 16, 18;
4 PRACH in slot 5
PDSCH: 6 UEG / slot, MCS 27, 45 PRBs / UEG,
PUSCH: 6 UEG / slot, MCS 27, 45 PRBs / UEG, (37 PRBs / UEG when having PRACH)
UCI on PUSCH: 4 HARQ, 33 CSI-1, 5 CSI-2
PDCCH: 12 DCI / slot (6 DL + 6 UL)
PUCCH: 24 UE 1 bit each (PF1)
Frame 2: same as Frame 0
- Frame 3: as following
TRS: symbol {6,10}/{5,9}; SLOT 0, 1, 10, 11, 16, 17, 18, 19;
CSIRS: symbol 12/13; slot 0, 10, 16, 18;
4 PRACH in slot 5
PDSCH: 6 UEG / slot, MCS 27, 45 PRBs / UEG,
PUSCH: 6 UEG / slot, MCS 27, 45 PRBs / UEG, (37 PRBs / UEG when having PRACH)
UCI on PUSCH: 4 HARQ, 33 CSI-1, 5 CSI-2
PDCCH: 12 DCI / slot (6 DL + 6 UL)
PUCCH: 24 UE 1 bit each (PF1)
- PUSCH:
Enabled 1 additional DMRS position
Enabled CFO estimation/correction, TO estimation and TDI
List length of polar decoder set to 8
- PUCCH:
List length of polar decoder set to 8
- PDSCH:
Enabled 1 additional DMRS position
- Series 44:
- Frame 0:
SSB#0: symbol2-5, SLOT0,
SSB#1: symbol8-11, SLOT0,
SSB#3: symbol8-11, SLOT1,
SSB#4: symbol2-5, SLOT2,
PRACH: 4 occasions, slot 5.
PDSCH: 6 UEG / slot, MCS 27, 22 PRBs / UEG, (18 PRBs / UEG when having SSB)
PUSCH: 6 UEG / slot, MCS 27, 22 PRBs / UEG, (14 PRBs / UEG when having PRACH)
UCI on PUSCH: 4 HARQ, 33 CSI-1, 5 CSI-2
PDCCH: 12 DCI / slot (6 DL + 6 UL)
PUCCH: 24 UE 1 bit each (PF1)
- Frame 1:
PDSCH: for SLOT 0, 1, 10, 11, 16, 17, 18, 19: PRBs 0-77 (6 UEG), symbols 1-11 (other slots: 22 PRBs / UEG, 13 symbols)
TRS: symbols {6,10}/{5,9} SLOT 0, 1, 10, 11, 16, 17, 18, 19; on PRBs 78-129
CSIRS: symbol 12/13; slot 0, 10, 16, 18; on 273 PRBs
Frame 2: same as Frame 0
- Frame 3:
PDSCH: for SLOT 0, 1, 10, 11, 16, 17, 18, 19: PRBs 0-77 (6 UEG), symbols 1-11 (other slots: 22 PRBs / UEG, 13 symbols)
TRS: symbol 6+10 / 5+9; SLOT 0, 1, 10, 11, 16, 17, 18, 19; on PRBs 78-129
4 PRACH in slot 5
PDSCH: 6 UEG / slot, MCS 27, 22 PRBs / UEG,
PUSCH: 6 UEG / slot, MCS 27, 22 PRBs / UEG, (14 PRBs / UEG when having PRACH)
UCI on PUSCH: 4 HARQ, 33 CSI-1, 5 CSI-2
PDCCH: 12 DCI / slot (6 DL + 6 UL)
PUCCH: 24 UE 1 bit each (PF1)
- PUSCH:
Enabled 1 additional DMRS position
Enabled CFO estimation/correction, TO estimation and TDI
List length of polar decoder set to 8
- PUCCH:
List length of polar decoder set to 8
- PDSCH:
Enabled 1 additional DMRS position
For patterns 41, 44, we use 2 UL antenna streams; we need to change these fields for the RU config and for the cuPHYController config files:
# 2 UL Antenna config
sed -i "s/eAxC_UL: \[8,0,1,2\]/eAxC_UL: \[8,0\]/" ${cuBB_SDK}/cuPHY-CP/ru-emulator/config/config.yaml
sed -i "s/eAxC_UL: \[1,2,4,9\]/eAxC_UL: \[1,2\]/" ${cuBB_SDK}/cuPHY-CP/ru-emulator/config/config.yaml
sed -i "s/eAxC_UL: \[0,1,2,3\]/eAxC_UL: \[0,1\]/" ${cuBB_SDK}/cuPHY-CP/ru-emulator/config/config.yaml
sed -i "s/eAxC_id_pucch: \[8, 0, 1, 2\]/eAxC_id_pucch: \[8, 0\]/" ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_F08_R750.yaml
sed -i "s/eAxC_id_pucch: \[1, 2, 4, 9\]/eAxC_id_pucch: \[1, 2\]/" ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_F08_R750.yaml
sed -i "s/eAxC_id_pucch: \[0, 1, 2, 3\]/eAxC_id_pucch: \[0, 1\]/" ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_F08_R750.yaml
sed -i "s/eAxC_id_pusch: \[8, 0, 1, 2\]/eAxC_id_pusch: \[8, 0\]/" ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_F08_R750.yaml
sed -i "s/eAxC_id_pusch: \[1, 2, 4, 9\]/eAxC_id_pusch: \[1, 2\]/" ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_F08_R750.yaml
sed -i "s/eAxC_id_pusch: \[0, 1, 2, 3\]/eAxC_id_pusch: \[0, 1\]/" ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_F08_R750.yaml
For Patterns 41 and 44, we need to enable the OTA conformance features in cuphycontroller_F08_R750.yaml
:
pusch_tdi: 1
pusch_cfo: 1
pusch_to: 1
puxch_polarDcdrListSz: 8
On R750 A100x DU system F08 6C with pattern 41 (peak pattern):
sudo -E ./cuphycontroller_scf F08_R750
sudo ./test_mac F08 6C 41
sudo ./ru_emulator F08 6C 41
This is the expected RU Emulator throughput:
08:55:09.639875 WRN [RU] Cell 0 DL 1680.59 Mbps 1600 Slots | UL 221.21 Mbps 400 Slots | PBCH 150 | PDCCH_UL 1600 | PDCCH_DL 1600 | CSI_RS 400 | PRACH 100 Slots | PUCCH 400 Slots | DL_C_ON 100.00% DL_U_ON 99.99% UL_C_ON 100.00% |Seconds 75
08:55:09.639880 WRN [RU] Cell 1 DL 1680.59 Mbps 1600 Slots | UL 221.21 Mbps 400 Slots | PBCH 150 | PDCCH_UL 1600 | PDCCH_DL 1600 | CSI_RS 400 | PRACH 100 Slots | PUCCH 400 Slots | DL_C_ON 100.00% DL_U_ON 99.99% UL_C_ON 100.00% |Seconds 75
08:55:09.639884 WRN [RU] Cell 2 DL 1680.59 Mbps 1600 Slots | UL 221.21 Mbps 400 Slots | PBCH 150 | PDCCH_UL 1600 | PDCCH_DL 1600 | CSI_RS 400 | PRACH 100 Slots | PUCCH 400 Slots | DL_C_ON 100.00% DL_U_ON 99.99% UL_C_ON 100.00% |Seconds 75
08:55:09.639888 WRN [RU] Cell 3 DL 1680.59 Mbps 1600 Slots | UL 221.21 Mbps 400 Slots | PBCH 150 | PDCCH_UL 1600 | PDCCH_DL 1600 | CSI_RS 400 | PRACH 100 Slots | PUCCH 400 Slots | DL_C_ON 100.00% DL_U_ON 99.99% UL_C_ON 100.00% |Seconds 75
08:55:09.639891 WRN [RU] Cell 4 DL 1680.59 Mbps 1600 Slots | UL 221.21 Mbps 400 Slots | PBCH 150 | PDCCH_UL 1600 | PDCCH_DL 1600 | CSI_RS 400 | PRACH 100 Slots | PUCCH 400 Slots | DL_C_ON 100.00% DL_U_ON 99.99% UL_C_ON 100.00% |Seconds 75
08:55:09.639895 WRN [RU] Cell 5 DL 1680.59 Mbps 1600 Slots | UL 221.21 Mbps 400 Slots | PBCH 150 | PDCCH_UL 1600 | PDCCH_DL 1600 | CSI_RS 400 | PRACH 100 Slots | PUCCH 400 Slots | DL_C_ON 100.00% DL_U_ON 99.99% UL_C_ON 100.00% |Seconds 75
On R750 A100x DU system F08 12C with pattern 44 (average pattern)
sudo -E ./cuphycontroller_scf F08_R750
sudo ./test_mac F08 12C 44
sudo ./ru_emulator F08 12C 44
This is the expected RU Emulator throughput:
09:03:17.758151 WRN [RU] Cell 0 DL 705.60 Mbps 1600 Slots | UL 102.62 Mbps 400 Slots | PBCH 150 | PDCCH_UL 1600 | PDCCH_DL 1600 | CSI_RS 400 | PRACH 100 Slots | PUCCH 400 Slots | DL_C_ON 100.00% DL_U_ON 99.99% UL_C_ON 100.00% |Seconds 134
09:03:17.758157 WRN [RU] Cell 1 DL 705.60 Mbps 1600 Slots | UL 102.62 Mbps 400 Slots | PBCH 150 | PDCCH_UL 1600 | PDCCH_DL 1600 | CSI_RS 400 | PRACH 100 Slots | PUCCH 400 Slots | DL_C_ON 100.00% DL_U_ON 99.99% UL_C_ON 100.00% |Seconds 134
09:03:17.758161 WRN [RU] Cell 2 DL 705.60 Mbps 1600 Slots | UL 102.62 Mbps 400 Slots | PBCH 150 | PDCCH_UL 1600 | PDCCH_DL 1600 | CSI_RS 400 | PRACH 100 Slots | PUCCH 400 Slots | DL_C_ON 100.00% DL_U_ON 99.99% UL_C_ON 100.00% |Seconds 134
09:03:17.758165 WRN [RU] Cell 3 DL 705.60 Mbps 1600 Slots | UL 102.62 Mbps 400 Slots | PBCH 150 | PDCCH_UL 1600 | PDCCH_DL 1600 | CSI_RS 400 | PRACH 100 Slots | PUCCH 400 Slots | DL_C_ON 100.00% DL_U_ON 99.99% UL_C_ON 100.00% |Seconds 134
09:03:17.758169 WRN [RU] Cell 4 DL 705.60 Mbps 1600 Slots | UL 102.62 Mbps 400 Slots | PBCH 150 | PDCCH_UL 1600 | PDCCH_DL 1600 | CSI_RS 400 | PRACH 100 Slots | PUCCH 400 Slots | DL_C_ON 100.00% DL_U_ON 99.99% UL_C_ON 100.00% |Seconds 134
09:03:17.758173 WRN [RU] Cell 5 DL 705.60 Mbps 1600 Slots | UL 102.62 Mbps 400 Slots | PBCH 150 | PDCCH_UL 1600 | PDCCH_DL 1600 | CSI_RS 400 | PRACH 100 Slots | PUCCH 400 Slots | DL_C_ON 100.00% DL_U_ON 99.99% UL_C_ON 100.00% |Seconds 134
09:03:17.758176 WRN [RU] Cell 6 DL 705.60 Mbps 1600 Slots | UL 102.62 Mbps 400 Slots | PBCH 150 | PDCCH_UL 1600 | PDCCH_DL 1599 | CSI_RS 400 | PRACH 100 Slots | PUCCH 400 Slots | DL_C_ON 100.00% DL_U_ON 99.99% UL_C_ON 100.00% |Seconds 134
09:03:17.758180 WRN [RU] Cell 7 DL 705.60 Mbps 1600 Slots | UL 102.62 Mbps 400 Slots | PBCH 150 | PDCCH_UL 1600 | PDCCH_DL 1601 | CSI_RS 400 | PRACH 100 Slots | PUCCH 400 Slots | DL_C_ON 100.00% DL_U_ON 99.99% UL_C_ON 100.00% |Seconds 134
09:03:17.758184 WRN [RU] Cell 8 DL 705.60 Mbps 1600 Slots | UL 102.62 Mbps 400 Slots | PBCH 150 | PDCCH_UL 1599 | PDCCH_DL 1599 | CSI_RS 400 | PRACH 100 Slots | PUCCH 400 Slots | DL_C_ON 100.00% DL_U_ON 99.99% UL_C_ON 100.00% |Seconds 134
09:03:17.758187 WRN [RU] Cell 9 DL 705.60 Mbps 1600 Slots | UL 102.62 Mbps 400 Slots | PBCH 150 | PDCCH_UL 1600 | PDCCH_DL 1600 | CSI_RS 400 | PRACH 100 Slots | PUCCH 400 Slots | DL_C_ON 100.00% DL_U_ON 99.99% UL_C_ON 100.00% |Seconds 134
09:03:17.758191 WRN [RU] Cell 10 DL 705.60 Mbps 1600 Slots | UL 102.62 Mbps 400 Slots | PBCH 150 | PDCCH_UL 1600 | PDCCH_DL 1600 | CSI_RS 400 | PRACH 100 Slots | PUCCH 400 Slots | DL_C_ON 100.00% DL_U_ON 99.99% UL_C_ON 100.00% |Seconds 134
09:03:17.758195 WRN [RU] Cell 11 DL 705.60 Mbps 1600 Slots | UL 102.62 Mbps 400 Slots | PBCH 150 | PDCCH_UL 1600 | PDCCH_DL 1600 | CSI_RS 400 | PRACH 100 Slots | PUCCH 400 Slots | DL_C_ON 100.00% DL_U_ON 99.99% UL_C_ON 100.00% |Seconds 134
To test 4T 4R TDD 7 beams series 46 and 47 with 80 slot patterns have been generated:
- Series 46 :
- Frame 0:
Slot 0, 1, 2: ssb (2 blocks),
Slot 3: ssb (1 block),
Slot 6, 8, 10, 16: TRS + CSIRS,
Slot 7, 9, 11, 17: TRS
Slot 5, 15: PRACH
- Frame 1:
Slot 6, 8, 10: TRS + CSIRS
Slot 7, 9, 11: TRS
Slot 5, 15: PRACH
- Frame 2:
Slot 0, 1, 2: ssb x 2,
Slot 3: ssb
Slot 6, 7, 8, 9, 10, 11, 16, 17: TRS
Slot 5, 15: PRACH
- Frame 3: as following
Slot 6, 7, 8, 9, 10, 11: TRS
Slot 5, 15: PRACH
- PUSCH:
6 UEG / slot, MCS 27, 45 PRBs / UEG, (39 PRBs / UEG when having 3 PRACH)
- UCI on PUSCH:
4 HARQ, 37 CSI-1, 5 CSI-2
- PUCCH:
24 UE 1 bit each (PF1)
- PDSCH:
6 UEG / slot, MCS 27, 45 PRBs / UEG, (42 PRBs / UEG when having SSB)
- PDCCH:
12 DCI / slot (6 DL + 6 UL)
- TRS/CSI-RS:
in symbol 6+10 / 12 for even case number
in symbol 5+9 / 13 for odd case number
- Series 47 :
- Frame 0:
Slot 0, 1, 2: ssb (2 blocks),
Slot 3: ssb (1 block),
Slot 6, 8, 10, 16: TRS + CSIRS,
Slot 7, 9, 11, 17: TRS
Slot 5, 15: PRACH
- Frame 1:
Slot 6, 8, 10: TRS + CSIRS
Slot 7, 9, 11: TRS
Slot 5, 15: PRACH
- Frame 2:
Slot 0, 1, 2: ssb x 2
Slot 3: ssb
Slot 6, 7, 8, 9, 10, 11, 16, 17: TRS
Slot 5, 15: PRACH
- Frame 3: as following
Slot 6, 7, 8, 9, 10, 11: TRS
Slot 5, 15: PRACH
- PUSCH:
6 UEG / slot, MCS 27, 22 PRBs / UEG, (16 PRBs / UEG when having 3 PRACH)
- UCI on PUSCH:
4 HARQ, 37 CSI-1, 5 CSI-2
- PUCCH:
24 UE 1 bit each (PF1)
- PDSCH:
6 UEG / slot, MCS 27, 22 PRBs / UEG, (18 PRBs / UEG when having ssb)
- PDCCH:
12 DCI / slot (6 DL + 6 UL)
- TRS/CSI-RS:
in symbol 6+10 / 12 for even case number
in symbol 5+9 / 13 for odd case number
For patterns 46, 47, we use 4 UL antenna streams, we need to change these fields for the cuPHYController config files:
# 2 UL Antenna config
sed -i "s/eAxC_id_pucch: \[8, 0\]/eAxC_id_pucch: \[8, 0, 1, 2\]/" ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_F08_R750.yaml
sed -i "s/eAxC_id_pucch: \[1, 2\]/eAxC_id_pucch: \[1, 2, 4, 9\]/" ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_F08_R750.yaml
sed -i "s/eAxC_id_pucch: \[0, 1\]/eAxC_id_pucch: \[0, 1, 2, 3\]/" ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_F08_R750.yaml
sed -i "s/eAxC_id_pusch: \[8, 0\]/eAxC_id_pusch: \[8, 0, 1, 2\]/" ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_F08_R750.yaml
sed -i "s/eAxC_id_pusch: \[1, 2\]/eAxC_id_pusch: \[1, 2, 4, 9\]/" ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_F08_R750.yaml
sed -i "s/eAxC_id_pusch: \[0, 1\]/eAxC_id_pusch: \[0, 1, 2, 3\]/" ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_F08_R750.yaml
On R750 A100x DU system F08 4C with pattern 46 (peak pattern):
sudo -E ./cuphycontroller_scf F08_R750
sudo ./test_mac F08 4C 46
sudo ./ru_emulator F08 4C 46
This is the expected RU Emulator throughput:
18:32:20.873967 WRN [RU] Cell 0 DL 1834.49 Mbps 1600 Slots | UL 231.12 Mbps 400 Slots | PBCH 200 | PDCCH_UL 1600 | PDCCH_DL 1600 | CSI_RS 700 | PRACH 200 Slots | PUCCH 400 Slots | DL_C_ON 99.98% DL_U_ON 99.99% UL_C_ON 99.97% |Seconds 128
18:32:20.873972 WRN [RU] Cell 1 DL 1834.49 Mbps 1600 Slots | UL 231.12 Mbps 400 Slots | PBCH 200 | PDCCH_UL 1600 | PDCCH_DL 1600 | CSI_RS 700 | PRACH 200 Slots | PUCCH 400 Slots | DL_C_ON 99.98% DL_U_ON 99.99% UL_C_ON 99.97% |Seconds 128
18:32:20.873977 WRN [RU] Cell 2 DL 1834.49 Mbps 1600 Slots | UL 231.12 Mbps 400 Slots | PBCH 200 | PDCCH_UL 1600 | PDCCH_DL 1600 | CSI_RS 700 | PRACH 200 Slots | PUCCH 400 Slots | DL_C_ON 99.98% DL_U_ON 99.99% UL_C_ON 99.98% |Seconds 128
18:32:20.873981 WRN [RU] Cell 3 DL 1834.49 Mbps 1600 Slots | UL 231.12 Mbps 400 Slots | PBCH 200 | PDCCH_UL 1600 | PDCCH_DL 1600 | CSI_RS 700 | PRACH 200 Slots | PUCCH 400 Slots | DL_C_ON 99.98% DL_U_ON 99.99% UL_C_ON 99.98% |Seconds 128
On R750 A100x DU system F08 4C with pattern 47 (average pattern)
sudo -E ./cuphycontroller_scf F08_R750
sudo ./test_mac F08 4C 47
sudo ./ru_emulator F08 4C 47
This is the expected RU Emulator throughput:
20:34:33.854778 WRN [RU] Cell 0 DL 882.63 Mbps 1600 Slots | UL 102.96 Mbps 400 Slots | PBCH 200 | PDCCH_UL 1600 | PDCCH_DL 1600 | CSI_RS 700 | PRACH 200 Slots | PUCCH 400 Slots | DL_C_ON 100.00% DL_U_ON 99.96% UL_C_ON 0.00% |Seconds 127
20:34:33.854784 WRN [RU] Cell 1 DL 882.63 Mbps 1600 Slots | UL 102.96 Mbps 400 Slots | PBCH 200 | PDCCH_UL 1600 | PDCCH_DL 1600 | CSI_RS 700 | PRACH 200 Slots | PUCCH 400 Slots | DL_C_ON 100.00% DL_U_ON 99.98% UL_C_ON 0.00% |Seconds 127
20:34:33.854788 WRN [RU] Cell 2 DL 882.63 Mbps 1600 Slots | UL 102.96 Mbps 400 Slots | PBCH 200 | PDCCH_UL 1600 | PDCCH_DL 1600 | CSI_RS 700 | PRACH 200 Slots | PUCCH 400 Slots | DL_C_ON 100.00% DL_U_ON 99.96% UL_C_ON 0.00% |Seconds 127
20:34:33.854791 WRN [RU] Cell 3 DL 882.63 Mbps 1600 Slots | UL 102.96 Mbps 400 Slots | PBCH 200 | PDCCH_UL 1600 | PDCCH_DL 1600 | CSI_RS 700 | PRACH 200 Slots | PUCCH 400 Slots | DL_C_ON 100.00% DL_U_ON 99.96% UL_C_ON 0.00% |Seconds 127
Running the F13 Test Cases
The default ${cuBB_SDK}/cuPHY-CP/ru-emulator/config/config.yaml
has the config for F08. In order
to run F13 on ru-emulator, please backup the config.yaml for F08 then run the following command to
update the eAxC ID lists, compression method, FH queue configs for F13:
sed -i -z "s/eAxC_UL: \\[8,0,1,2\\]/eAxC_UL: \\[8,0,1,2,3,4,5,6,7,9,10,11,12,13,14,15\\]/1" $cuBB_SDK/cuPHY-CP/ru-emulator/config/config.yaml
sed -i -z "s/eAxC_UL: \\[1,2,4,9\\]/eAxC_UL: \\[1,2,4,9,0,3,5,6,7,8,10,11,12,13,14,15\\]/1" $cuBB_SDK/cuPHY-CP/ru-emulator/config/config.yaml
sed -i -z "s/eAxC_UL: \\[1,2,4,9\\]/eAxC_UL: \\[1,2,4,9,0,3,5,6,7,8,10,11,12,13,14,15\\]/1" $cuBB_SDK/cuPHY-CP/ru-emulator/config/config.yaml
sed -i -z "s/eAxC_UL: \\[0,1,2,3\\]/eAxC_UL: \\[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15\\]/1" $cuBB_SDK/cuPHY-CP/ru-emulator/config/config.yaml
sed -i -z "s/eAxC_DL: \\[8,0,1,2\\]/eAxC_DL: \\[8,0,1,2,3,4,5,6,7,9,10,11,12,13,14,15\\]/1" $cuBB_SDK/cuPHY-CP/ru-emulator/config/config.yaml
sed -i -z "s/eAxC_DL: \\[1,2,4,9\\]/eAxC_DL: \\[1,2,4,9,0,3,5,6,7,8,10,11,12,13,14,15\\]/1" $cuBB_SDK/cuPHY-CP/ru-emulator/config/config.yaml
sed -i -z "s/eAxC_DL: \\[1,2,4,9\\]/eAxC_DL: \\[1,2,4,9,0,3,5,6,7,8,10,11,12,13,14,15\\]/1" $cuBB_SDK/cuPHY-CP/ru-emulator/config/config.yaml
sed -i -z "s/eAxC_DL: \\[0,1,2,3\\]/eAxC_DL: \\[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15\\]/1" $cuBB_SDK/cuPHY-CP/ru-emulator/config/config.yaml
sed -i "s/compression_bits.*/compression_bits: 9/" ${cuBB_SDK}/cuPHY-CP/ru-emulator/config/config.yaml
sed -i -z "s/aerial_fh_rxq_per_cell: 5/aerial_fh_rxq_per_cell: 17/1" $cuBB_SDK/cuPHY-CP/ru-emulator/config/config.yaml
sed -i -z "s/aerial_fh_txq_size: 4096/aerial_fh_txq_size: 512/1" $cuBB_SDK/cuPHY-CP/ru-emulator/config/config.yaml
sed -i -z "s/aerial_fh_rxq_size: 2048/aerial_fh_rxq_size: 512/1" $cuBB_SDK/cuPHY-CP/ru-emulator/config/config.yaml
For F13, also set in RU config:
validate_dl_timing: 0
Also set the DU config to BFP 9 compression:
sed -i 's/compression_bits.*/compression_bits: 9/' ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_F13_SCF.yaml
And RU.LATE_PACKET
in shm log to log level 3:
- 503: "RU.LATE_PACKETS"
shm_level: 3 # Example: overlay shm_log_level for a tag
console_level: 3 # Example: overlay console_log_level for a tag
F13 PUSCH and PDSCH 1C
# Restart MPS
sudo -E ./cuphycontroller_scf F13_SCF
sudo ./test_mac F13 1C
sudo ./ru_emulator F13 1C
# Expect RU Emulator, cuPHYController, testMAC to report 1600 PDSCH and 400 PUSCH per second for each cell
F13 PUSCH and PDSCH 2C
sed -i -z "s/cell_group_num: 1/cell_group_num: 2/" $cuBB_SDK/cuPHY-CP/cuphycontroller/config/cuphycontroller_F13_SCF.yaml
# Restart MPS
sudo -E ./cuphycontroller_scf F13_SCF
sudo ./test_mac F13 2C
sudo ./ru_emulator F13 2C
# Expect RU Emulator, cuPHYController, testMAC to report 1600 PDSCH and 400 PUSCH per second for each cell
# Revert to cell_group_num 1
sed -i -z "s/cell_group_num: 2/cell_group_num: 1/" $cuBB_SDK/cuPHY-CP/cuphycontroller/config/cuphycontroller_F13_SCF.yaml
F13 PUSCH and PDSCH 3C
sed -i -z "s/cell_group_num: 1/cell_group_num: 3/" $cuBB_SDK/cuPHY-CP/cuphycontroller/config/cuphycontroller_F13_SCF.yaml
# Restart MPS
sudo -E ./cuphycontroller_scf F13_SCF
sudo ./test_mac F13 3C
sudo ./ru_emulator F13 3C
# Expect RU Emulator, cuPHYController, testMAC to report 1600 PDSCH and 400 PUSCH per second for each cell
# Revert to cell_group_num 1
sed -i -z "s/cell_group_num: 3/cell_group_num: 1/" $cuBB_SDK/cuPHY-CP/cuphycontroller/config/cuphycontroller_F13_SCF.yaml
F13 PUSCH and PDSCH 4C
sed -i -z "s/cell_group_num: 1/cell_group_num: 4/" $cuBB_SDK/cuPHY-CP/cuphycontroller/config/cuphycontroller_F13_SCF.yaml
# Restart MPS
sudo -E ./cuphycontroller_scf F13_SCF
sudo ./test_mac F13 4C
sudo ./ru_emulator F13 4C
# Expect RU Emulator, cuPHYController, testMAC to report 1600 PDSCH and 400 PUSCH per second for each cell
# Revert to cell_group_num 1
sed -i -z "s/cell_group_num: 4/cell_group_num: 1/" $cuBB_SDK/cuPHY-CP/cuphycontroller/config/cuphycontroller_F13_SCF.yaml
This is the expected throughput for F13 4C:
F13 4C
16:13:56.017250 C [SCF.PHY] Cell 0 | DL 6188.13 Mbps 1600 Slots | UL 773.52 Mbps 400 Slots CRC 0 ( 0) | Tick 8000
16:13:56.017266 C [SCF.PHY] Cell 1 | DL 1285.17 Mbps 1600 Slots | UL 160.65 Mbps 400 Slots CRC 0 ( 0) | Tick 8000
16:13:56.017277 C [SCF.PHY] Cell 2 | DL 183.60 Mbps 1600 Slots | UL 22.94 Mbps 400 Slots CRC 0 ( 0) | Tick 8000
16:13:56.017286 C [SCF.PHY] Cell 3 | DL 29.52 Mbps 1600 Slots | UL 6.56 Mbps 400 Slots CRC 0 ( 0) | Tick 8000
Running the nrSim Test Cases
PBCH
# Restart MPS
sudo -E ./cuphycontroller_scf nrSim_SCF
sudo ./test_mac nrSim 1901 --channels PBCH
sudo ./ru_emulator nrSim 1901 --channels PBCH
# Expect RU Emulator to report 100 PBCH per second
PDCCH_DL
# Restart MPS
sudo -E ./cuphycontroller_scf nrSim_SCF
sudo ./test_mac nrSim 2901 --channels PDCCH_DL
sudo ./ru_emulator nrSim 2901 --channels PDCCH_DL
# Expect RU Emulator to report 100 PDCCH_DL per second
PDSCH
# Restart MPS
sudo -E ./cuphycontroller_scf nrSim_SCF
sudo ./test_mac nrSim 3901 --channels PDSCH
sudo ./ru_emulator nrSim 3901 --channels PDSCH
# Expect RU Emulator to report 100 PDSCH per second
PUSCH
# Restart MPS
sudo -E ./cuphycontroller_scf nrSim_SCF
sudo ./test_mac nrSim 7901 --channels PUSCH
sudo ./ru_emulator nrSim 7901 --channels PUSCH
# Expect testMAC to report 100 PUSCH per second
# PUSCH Mapping Type B
# Restart MPS
sudo -E ./cuphycontroller_scf nrSim_SCF
sudo ./test_mac nrSim 7258 --channels PUSCH
sudo ./ru_emulator nrSim 7258 --channels PUSCH
# Expect testMAC to report 100 PUSCH per second
# Restart MPS
sudo -E ./cuphycontroller_scf nrSim_SCF
sudo ./test_mac nrSim 7259 --channels PUSCH
sudo ./ru_emulator nrSim 7259 --channels PUSCH
# Expect testMAC to report 100 PUSCH per second
PRACH
# Restart MPS
sudo -E ./cuphycontroller_scf nrSim_SCF
sudo ./test_mac nrSim 5901 --channels PRACH
sudo ./ru_emulator nrSim 5901 --channels PRACH
# Expect testMAC to report 100 Preambles per second
# PRACH 16 PID/Slot and PRACH B4 4FDM
# Restart MPS
sudo -E ./cuphycontroller_scf nrSim_SCF
sudo ./test_mac nrSim 5013 --channels PRACH
sudo ./ru_emulator nrSim 5013 --channels PRACH
Expect testMAC to receive 1600 Preambles per second
- Change tv_prach field as below in cuphycontroller_nrSim_SCF.yaml
tv_prach: TVnr_5013_PRACH_gNB_CUPHY_s1p0.h5
Expect 4 RO occasions in each slot in phy.log in sequence mentioned in below.
RO 0 - PrmbIndex (2,5,8,11)
RO 1 - PrmbIndex (14,17,20,23)
RO 2 - PrmbIndex (32,35,26,29)
RO 3 - PrmbIndex (38,41,44,47)
# grep -i "RO\|prmbIndex" phy.log
15:57:41.161874 I [DRV.PRACH] RO 0 SFN 599.01 Preambles num detected 4
15:57:41.161878 I [DRV.PRACH] SFN 599.01 #0 prmbIndex 2 prmbDelay 0.000000 prmbPower -2.878487
15:57:41.161880 I [DRV.PRACH] SFN 599.01 #1 prmbIndex 5 prmbDelay 0.000000 prmbPower -2.801307
15:57:41.161883 I [DRV.PRACH] SFN 599.01 #2 prmbIndex 8 prmbDelay 0.000000 prmbPower -3.207683
15:57:41.161886 I [DRV.PRACH] SFN 599.01 #3 prmbIndex 11 prmbDelay 0.000000 prmbPower -3.423241
15:57:41.161901 I [DRV.PRACH] RO 1 SFN 599.01 Preambles num detected 4
15:57:41.161904 I [DRV.PRACH] SFN 599.01 #0 prmbIndex 14 prmbDelay 0.000000 prmbPower -4.193221
15:57:41.161906 I [DRV.PRACH] SFN 599.01 #1 prmbIndex 17 prmbDelay 0.000000 prmbPower -4.011869
15:57:41.161909 I [DRV.PRACH] SFN 599.01 #2 prmbIndex 20 prmbDelay 0.000000 prmbPower -3.471422
15:57:41.161912 I [DRV.PRACH] SFN 599.01 #3 prmbIndex 23 prmbDelay 0.000000 prmbPower -3.552692
15:57:41.161924 I [DRV.PRACH] RO 2 SFN 599.01 Preambles num detected 4
15:57:41.161927 I [DRV.PRACH] SFN 599.01 #0 prmbIndex 32 prmbDelay 0.000000 prmbPower -4.954414
15:57:41.161930 I [DRV.PRACH] SFN 599.01 #1 prmbIndex 35 prmbDelay 0.000000 prmbPower -3.706564
15:57:41.161933 I [DRV.PRACH] SFN 599.01 #2 prmbIndex 26 prmbDelay 0.000000 prmbPower -4.333083
15:57:41.161935 I [DRV.PRACH] SFN 599.01 #3 prmbIndex 29 prmbDelay 0.000000 prmbPower -3.994442
15:57:41.161945 I [DRV.PRACH] RO 3 SFN 599.01 Preambles num detected 4
15:57:41.161947 I [DRV.PRACH] SFN 599.01 #0 prmbIndex 38 prmbDelay 0.000000 prmbPower -3.341729
15:57:41.161950 I [DRV.PRACH] SFN 599.01 #1 prmbIndex 41 prmbDelay 0.000000 prmbPower -4.641103
15:57:41.161952 I [DRV.PRACH] SFN 599.01 #2 prmbIndex 44 prmbDelay 0.000000 prmbPower -4.189767
15:57:41.161955 I [DRV.PRACH] SFN 599.01 #3 prmbIndex 47 prmbDelay 0.000000 prmbPower -4.946166
NZP CSI_RS
# Restart MPS
sudo -E ./cuphycontroller_scf nrSim_SCF
sudo ./test_mac nrSim 4001 --channels CSI_RS
sudo ./ru_emulator nrSim 4001 --channels CSI_RS
# Expect RU Emulator to report 100 CSI_RS per second
PDSCH + ZP CSI_RS
To run TC 3323, 3338, and 3339, add --channels CSI_RS+PDSCH
in the test_mac
and ru_emulator
commands.
# Restart MPS
sudo -E ./cuphycontroller_scf nrSim_SCF
sudo ./test_mac nrSim 3323 --channels CSI_RS+PDSCH
sudo ./ru_emulator nrSim 3323 --channels CSI_RS+PDSCH
# Expect RU Emulator to count 100 CSI_RS and 100 PDSCH per second
Precoding
# Below steps applicable to precoding test for PDSCH, PDCCH, PBCH and CSI_RS
# In l2_adapter_config_nrSim_SCF.yaml, set enable_precoding to 1
sed -i -z "s/enable_precoding: 0/enable_precoding: 1/" $cuBB_SDK/cuPHY-CP/cuphycontroller/config/l2_adapter_config_nrSim_SCF.yaml
# Restart MPS
sudo -E ./cuphycontroller_scf nrSim_SCF
sudo ./test_mac nrSim 3248 --channels PDSCH
# Reset enable_precoding to 0
sed -i -z "s/enable_precoding: 1/enable_precoding: 0/" $cuBB_SDK/cuPHY-CP/cuphycontroller/config/l2_adapter_config_nrSim_SCF.yaml
# In ru-emulator/config/config.yaml, set dl_approx_validation to 1
sed -i -z "s/dl_approx_validation: 0/dl_approx_validation: 1/1" $cuBB_SDK/cuPHY-CP/ru-emulator/config/config.yaml
sudo ./ru_emulator nrSim 3248 --channels PDSCH
# Expect testMAC and RU Emulator both see 1.36 Mbps 100 Slots per second
# Reset dl_approx_validation to 0
sed -i -z "s/dl_approx_validation: 1/dl_approx_validation: 0/1" $cuBB_SDK/cuPHY-CP/ru-emulator/config/config.yaml
PUCCH HARQ
# Restart MPS
sudo -E ./cuphycontroller_scf nrSim_SCF
sudo ./test_mac nrSim 6001 --channels PUCCH
sudo ./ru_emulator nrSim 6001 --channels PUCCH
# Expect testMAC to report 100 HARQ indications and ru-emulator to report 100 PUCCH per second
PUCCH Format 2
# Restart MPS
sudo -E ./cuphycontroller_scf nrSim_SCF
sudo ./test_mac nrSim 6201 --channels PUCCH
sudo ./ru_emulator nrSim 6201 --channels PUCCH
# Expect testMAC to report 100 HARQ indications and ru-emulator to report 100 PUCCH per second
PUCCH HARQ/SR
# Restart MPS
sudo -E ./cuphycontroller_scf nrSim_SCF
sudo ./test_mac nrSim 6049 --channels PUCCH
sudo ./ru_emulator nrSim 6049 --channels PUCCH
# Expect testMAC to report 300 HARQ + 300 SR and ru-emulator to report 100 PUCCH per second
PUCCH Format 3
# Restart MPS
sudo -E ./cuphycontroller_scf nrSim_SCF
sudo ./test_mac nrSim 6301 --channels PUCCH
sudo ./ru_emulator nrSim 6301 --channels PUCCH
# Expect testMAC to report 100 HARQ indications and ru-emulator to report 100 PUCCH per second
UCI on PUSCH
# Restart MPS
sudo -E ./cuphycontroller_scf nrSim_SCF
sudo ./test_mac nrSim 7501
sudo ./ru_emulator nrSim 7501
# Expect testMAC to report 100 HARQ/s and UL slots/s
# Restart MPS
sudo -E ./cuphycontroller_scf nrSim_SCF
sudo ./test_mac nrSim 7502
sudo ./ru_emulator nrSim 7502
# Expect testMAC to report 100 HARQ/s and UL slots/s
# Restart MPS
#UCI on PUSCH CSI part 2
sudo -E ./cuphycontroller_scf nrSim_SCF
sudo ./test_mac nrSim 7517
sudo ./ru_emulator nrSim 7517 --channel PUSCH
For 7517-7519, 7524-26, 7528-29
# Expect testMAC to report 100 CSI part2/s and 100 UL slots/s
# Expect cuphycontroller to report 0 CRC for 100 slots/s and 1.61 Mbps UL throughput
For 7520-7523, 7527, 7530
# Expect testMAC to report 100 CSI part2/s
# Expect cuphycontroller to report 0 CRC for 100 slots/s
SRS
To enable FAPI 10.04 fields for the SRS test, add -DSCF_FAPI_10_04=ON
in the cmake
options and do a clean build. The test cases
for SRS validation are 8301 and 8302.
# Restart MPS
# Running 8301
sudo -E ./ru_emulator nrSim 8301 --channels SRS or ./ru_emulator nrSim 8301 (default support all channels)
sudo -E ./test_mac nrSim 8301 --channels SRS or ./test_mac nrSim 8301 (default support all channels)
sudo -E ./cuphycontroller_scf nrSim_SCF
# Expect the testMac to report the number of received SRS is between 97 and 103 and INV values per second to be 0.
# If the INV Values are greater than 0, there is either a SRS report mismatch or SRS report parameter mismatch.
# Restart MPS
# Running 8302
sudo -E ./ru_emulator nrSim 8302 --channels SRS or ./ru_emulator nrSim 8302 (default support all channels)
sudo -E ./test_mac nrSim 8302 --channels SRS or ./test_mac nrSim 8302 (default support all channels)
sudo -E ./cuphycontroller_scf nrSim_SCF
# Expect the testMac to report the number of received SRS is between 97 and 103 and INV values per second to be 0.
# If the INV Values are greater than 0, there is either a SRS report mismatch or SRS report parameter mismatch.
S-slot
# Restart MPS
sudo ./ru_emulator nrSim 90013 --channels 0x1ff
sudo -E ./cuphycontroller_scf nrSim_SCF
sudo ./test_mac nrSim 90013 --channels 0x1ff
# Expect RU Emulator to report 50 DL and PDCCH_DL per second, testMAC to report 50 HARQ per second
# Restart MPS
sudo ./ru_emulator nrSim 90015 --channels 0x1ff
sudo -E ./cuphycontroller_scf nrSim_SCF
sudo ./test_mac nrSim 90015 --channels 0x1ff
# Expect RU Emulator to report 50 DL and PDCCH_DL per second, testMAC to report 50 HARQ per second
Multiple SSB
# Restart MPS
sudo -E ./cuphycontroller_scf nrSim_SCF
sudo ./test_mac nrSim 1104 --channels PBCH
sudo ./ru_emulator nrSim 1104 --channels PBCH
# Expect RU Emulator to report 100 PBCH per second
PUSCH TDI
# Restart MPS
sudo -E ./cuphycontroller_scf nrSim_SCF_tdi
sudo ./test_mac nrSim 7411 --channels PUSCH
sudo ./ru_emulator nrSim 7411 --channels PUSCH
# Expect testMAC and RU Emulator both see 1.79 Mbps 100 Slots per second
PUSCH SINR and Noise
# For TCs 7265,7266,7268,7269,7271,7272
# Change cuphycontroller_nrSim_SCF.yaml file to have 8 eAxIds for PUSCH
eAxC_id_pusch: [8,0,1,2,3,4,5,6]
sed -i s/"eAxC_id_pusch: \\[8,0,1,2\\]/eAxC_id_pusch: \\[8,0,1,2,3,4,5,6\\]/1" $cuBB_SDK/cuPHY-CP/cuphycontroller/config/cuphycontroller_nrSim_SCF.yaml
# For TCs 7264,7267,7270 no change to cuphycontroller_nrSim_SCF.yaml
# Restart MPS
sudo ./test_mac nrSim 7265 --channels PUSCH
sudo ./ru_emulator nrSim 7265 --channels PUSCH
# Revert if changed earlier
sed -i s/"eAxC_id_pusch: \\[8,0,1,2,3,4,5,6\\]/eAxC_id_pusch: \\[8,0,1,2\\]/1" $cuBB_SDK/cuPHY-CP/cuphycontroller/config/cuphycontroller_nrSim_SCF.yaml
mSlot_mCell Test Cases
TCs 90001,90002,90003,90004,90005,90006,90011,90012,90013,90014,90015
# nrSim config generation
cd ${cuBB_SDK}/cubb_scripts/autoconfig
python3 auto_controllerConfig.py -i ../../testVectors/ -t ../../cuPHY-CP/cuphycontroller/config/cuphycontroller_nrSim_SCF.yaml -o ../../cuPHY-CP/cuphycontroller/config
python3 auto_RuEmulatorConfig.py -i ../../cuPHY-CP/cuphycontroller/config -t ../../cuPHY-CP/ru-emulator/config/config.yaml -o ../../cuPHY-CP/ru-emulator/config
# backup default nrSim config
cp ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_nrSim_SCF.yaml ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_nrSim_SCF.yaml.orig
cp ${cuBB_SDK}/cuPHY-CP/ru-emulator/config/config.yaml ${cuBB_SDK}/cuPHY-CP/ru-emulator/config/config.yaml.orig
# Use nrSim_SCF_900xx config
cp ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_nrSim_SCF_900xx.yaml ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_nrSim_SCF.yaml
cp ${cuBB_SDK}/cuPHY-CP/ru-emulator/config/ru_emulator_config_900xx.yaml ${cuBB_SDK}/cuPHY-CP/ru-emulator/config/config.yaml
# Restart MPS
sudo -E ./cuphycontroller_scf nrSim_SCF
sudo ./ru_emulator nrSim 900xx --channels 0x1ff
sudo ./test_mac nrSim 900xx --channels 0x1ff
# Restore nrSim config file
cp ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_nrSim_SCF.yaml.orig ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_nrSim_SCF.yaml
cp ${cuBB_SDK}/cuPHY-CP/ru-emulator/config/config.yaml.orig ${cuBB_SDK}/cuPHY-CP/ru-emulator/config/config.yaml
FAPI Message Reference Check
The cuBB software supports the FAPI message reference check. The values and payloads of RX_DATA.ind
, CRC.ind
, UCI.ind
, and RACH.ind
are compared with the related INDx PDU of the TV. A “mismatch” WARN level log will be printed to testmac.log
by testMAC if validation fails.
Some validation failures are not fixed yet. The current known validation failures are not reported with “INV > 0” by default.
The below configurations are implemented to configure test_mac reporting. The default configuration for FAPI validation is as follows:
# FAPI indication validating
# validate_enable: 0 - disabled; 1 - report error level; 2 - report error and warning levels
validate_enable: 1
# validate_log_opt: 0 - no print; 1 - print per MSG; 2 - print per PDU; 3 - force print all
validate_log_opt: 1
The following is an example validation failure log with default configuration:
09:35:02.205513 W [MAC.FAPI] SFN 0.5 Cell 6 CRC.ind mismatch: 0 err 6 warn [crc->num_cb=192 tv.NumCb=4] [meas->ul_cqi=255 tv.UL_CQI=206] [meas->rssi=65535 tv.RSSI=880]
One FAPI message may contain multiple PDUs, and one PDU may contain multiple validation failures.
Set “validate_enable: 1” to only report some validation failures with “INV > 0” in test_mac console. Known validation failures are not reported with “INV > 0” (but can still be seen in the “mismatch” WARN log).
Set “validate_enable: 2” to report all validation failures with “INV > 0” in test_mac console.
Set “validate_log_opt: 1” to print one line “mismatch” log with at most three mismatched values per FAPI message, and print the total mismatched PDU count (e.g. “0 err, 6 warn”) per FAPI message (avoids performance dropping).
Set “validate_log_opt: 2” to print all validation failures in the “mismatch” WARN log, one line per PDU.
Here is an example log with “validate_log_opt: 2”:
07:32:09.407972 W [MAC.FAPI] SFN 0.14 Cell 0 CRC.ind PDU0 mismatch: [crc->num_cb=0 tv.NumCb=5] [meas->ul_cqi=255 tv.UL_CQI=206] [meas->rssi=65535 tv.RSSI=1280]
07:32:09.407976 W [MAC.FAPI] SFN 0.14 Cell 0 CRC.ind PDU1 mismatch: [crc->num_cb=0 tv.NumCb=5] [meas->ul_cqi=255 tv.UL_CQI=206] [meas->rssi=65535 tv.RSSI=1280]
07:32:09.407979 W [MAC.FAPI] SFN 0.14 Cell 0 CRC.ind PDU2 mismatch: [crc->num_cb=0 tv.NumCb=5] [meas->ul_cqi=255 tv.UL_CQI=206] [meas->rssi=65535 tv.RSSI=1280]
The following is the current recommended test instruction:
Use the default configuration to test, then
grep
“mismatch” inphy.log
to check whether there is a vaildation failure.Configure “validate_log_opt: 2” to print all validation failures if required.
Running testMAC + cuPHYController_SCF + RU Emulator P5G PRACH
This use case runs the Private 5G SIB1 and PRACH demo msg1-4 between the RU Emulator and the testMAC.
You need additional modifications to the default cuPHYController_P5G_SCF_E2E.yaml
to test against
RU Emulator. Ensure it matches the configs here, also remember to set the PCIe NIC address that is
currently in use:
Server#1
sed -i "s/ nic:.*/ nic: 0000:b5:00.0/" ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_P5G_SCF_E2E.yaml
sed -i "s/compression_bits.*/compression_bits: 16/" ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_P5G_SCF_E2E.yaml
sed -i "s/mps_sm_pusch.*/mps_sm_pusch: 108/" ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_P5G_SCF_E2E.yaml
sed -i "s/mps_sm_pucch.*/mps_sm_pucch: 16/" ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_P5G_SCF_E2E.yaml
sed -i "s/mps_sm_prach.*/mps_sm_prach: 16/" ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_P5G_SCF_E2E.yaml
sed -i "s/mps_sm_pdcch.*/mps_sm_pdcch: 28/" ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_P5G_SCF_E2E.yaml
sed -i "s/mps_sm_pbch.*/mps_sm_pbch: 14/" ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_P5G_SCF_E2E.yaml
sed -i "s/mps_sm_pdsch.*/mps_sm_pdsch: 82/" ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_P5G_SCF_E2E.yaml
Server#2
Replace 0000:b5:00.0
with the PCIe address of the NIC that will be used. Also, replace the MAC
address with the MAC address of the NIC used in Server#1 (the server running cuPHYController and
testMAC):
sed -i "s/nic_interface.*/nic_interface: 0000:b5:00.0/" ${cuBB_SDK}/cuPHY-CP/ru-emulator/config/config.yaml
Change the compression_bits
/decompression_bits
to 16. Ensure you change it back to 14
for other tests.
sed -i "s/compression_bits.*/compression_bits: 16/" ${cuBB_SDK}/cuPHY-CP/ru-emulator/config/config.yaml
sed -i -z 's/eAxC_prach_list: \\[15,7,0,1\\]/eAxC_prach_list: \\[15,7\\]/1' ${cuBB_SDK}/cuPHY-CP/ru-emulator/config/config.yaml
sed -i -z 's/eAxC_UL: \\[8,0,1,2\\]/eAxC_UL: \\[8,0\\]/1' ${cuBB_SDK}/cuPHY-CP/ru-emulator/config/config.yaml
sed -i -z 's/eAxC_DL: \\[8,0,1,2\\]/eAxC_DL: \\[8,0\\]/1' ${cuBB_SDK}/cuPHY-CP/ru-emulator/config/config.yaml
Run the Emulator:
sudo ./ru_emulator P5G PRACH --channels 0x1FF
Run the cuPHY Controller and the testMAC:
sudo -E ./cuphycontroller_scf P5G_SCF_E2E
sudo ./test_mac P5G PRACH --channels 0x1FF
Expected RU Emulator console:
00:44:12.169849 Cell 0 DL 0.17 Mbps 100 Slots | UL 0.03 Mbps 50 Slots | PBCH 50 | PDCCH_UL 0 | PDCCH_DL 150 | PRACH 50 Slots | Seconds 25
00:44:13.169848 Cell 0 DL 0.17 Mbps 100 Slots | UL 0.03 Mbps 50 Slots | PBCH 50 | PDCCH_UL 0 | PDCCH_DL 150 | PRACH 50 Slots | Seconds 26
00:44:14.169849 Cell 0 DL 0.17 Mbps 100 Slots | UL 0.03 Mbps 50 Slots | PBCH 50 | PDCCH_UL 0 | PDCCH_DL 150 | PRACH 50 Slots | Seconds 27
Expected testMAC console:
00:44:11.565232 Cell 0 | DL 0.26 Mbps 150 Slots | UL 0.03 Mbps 50 Slots | Prmb 50 | HARQ 0 | SR 0 | CSI1 0 | CSI2 0 | ERR 0 | INV 0
00:44:12.565230 Cell 0 | DL 0.26 Mbps 150 Slots | UL 0.03 Mbps 50 Slots | Prmb 50 | HARQ 0 | SR 0 | CSI1 0 | CSI2 0 | ERR 0 | INV 0
00:44:13.565230 Cell 0 | DL 0.26 Mbps 150 Slots | UL 0.03 Mbps 50 Slots | Prmb 50 | HARQ 0 | SR 0 | CSI1 0 | CSI2 0 | ERR 0 | INV 0
Expected cuPHYController logs to be flooded with preamble detection:
00:44:11.565224 C [SCF.PHY] Cell 0 | DL 0.26 Mbps 150 Slots | UL 0.03 Mbps 50 Slots CRC 0 ( 0) | Tick 2000
00:44:12.565224 C [SCF.PHY] Cell 0 | DL 0.26 Mbps 150 Slots | UL 0.03 Mbps 50 Slots CRC 0 ( 0) | Tick 4000
00:44:13.565224 C [SCF.PHY] Cell 0 | DL 0.26 Mbps 150 Slots | UL 0.03 Mbps 50 Slots CRC 0 ( 0) | Tick 6000
Capture Logs
Collect the text logs after testing.
By default, the logs will get stored in the
/tmp
location. You can use theAERIAL_LOG_PATH
environment variable to set the logfile path.When the log size exceeds 20GB, a new file gets created (e.g.
phy.log
,phy.log.1
,phy.log.2
…phy.log.7
).The test mac logs are named as
testmac.log
,testmac.log.1
, etc.The ru logs are named as
ru.log
,ru.log.1
, etc.
These file segments will be reused in a cyclic manner by overwriting the oldest files.
For SHM IPC, if see IPC buffer pool full during testing, run below command to dump IPC status after test.
# For SHM IPC, dump nvipc message queues after test
sudo ./build/cuPHY-CP/gt_common_libs/nvIPC/tests/dump/ipc_dump
# If not using default nvipc configurations, need input the yaml configuration file like below:
sudo ./build/cuPHY-CP/gt_common_libs/nvIPC/tests/dump/ipc_dump ./cuPHY-CP/cuphycontroller/config/l2_adapter_config_F08.yaml
To run any test where at least one cell is in Test Mode (TM), you need to ensure
cmake
was run with -DENABLE_CONFORMANCE_TM_PDSCH_PDCCH=ON
.
This option is needed for nrSIM TCs 2036 (PDCCH) and 3296 (PDSCH), as well as for DLMIX TCs 120-128 with both PDSCH and PDCCH present. This requirement extends to any multi-cell launch pattern with at least one of these TM test vectors present.
For test cases where no TM cell is present, the cmake
option value is not relevant for the functional correctness of cuBB tests.
To run mixed one cell with CAT-A-NoBF and another cell with CAT-A-DBF, use the nrSIM TC 90019 and run the following:
# nrSim config generation
cd ${cuBB_SDK}/cubb_scripts/autoconfig
python3 auto_controllerConfig.py -i ../../testVectors/ -t ../../cuPHY-CP/cuphycontroller/config/cuphycontroller_nrSim_SCF.yaml -o ../../cuPHY-CP/cuphycontroller/config
python3 auto_RuEmulatorConfig.py -i ../../cuPHY-CP/cuphycontroller/config -t ../../cuPHY-CP/ru-emulator/config/config.yaml -o ../../cuPHY-CP/ru-emulator/config
# backup default nrSim config
cp ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_nrSim_SCF.yaml ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_nrSim_SCF.yaml.orig
cp ${cuBB_SDK}/cuPHY-CP/ru-emulator/config/config.yaml ${cuBB_SDK}/cuPHY-CP/ru-emulator/config/config.yaml.orig
# Use nrSim_SCF_90019 config
cp ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_nrSim_SCF_90019.yaml ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_nrSim_SCF.yaml
cp ${cuBB_SDK}/cuPHY-CP/ru-emulator/config/ru_emulator_config_90019.yaml ${cuBB_SDK}/cuPHY-CP/ru-emulator/config/config.yaml
# Restart MPS
sudo -E ./cuphycontroller_scf nrSim_SCF
sudo ./ru_emulator nrSim 90019 --channels 0x1ff
sudo ./test_mac nrSim 90019 --channels 0x1ff
# Restore nrSim config file
cp ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_nrSim_SCF.yaml.orig ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_nrSim_SCF.yaml
cp ${cuBB_SDK}/cuPHY-CP/ru-emulator/config/config.yaml.orig ${cuBB_SDK}/cuPHY-CP/ru-emulator/config/config.yaml
Expected result:
# Expected Tput and passing criteria
Expected thrput: Cell 0: [DL=1.36/100]
Expected thrput: Cell 1: [DL=2.72/100]
Pass criterion low: Cell 0: [DL=1.31/97]
Pass criterion high: Cell 0: [DL=1.40/103]
Pass criterion low: Cell 1: [DL=2.63/97]
Pass criterion high: Cell 1: [DL=2.80/103]
# Example ru-emulaor output
16:24:15.218189 Cell 0 DL 1.36 Mbps 100 Slots | UL 0.00 Mbps 0 Slots | DL_C_ON 100.00% DL_U_ON 100.00% UL_C_ON 0.00% |Seconds 45
16:24:15.218201 Cell 1 DL 2.72 Mbps 100 Slots | UL 0.00 Mbps 0 Slots | DL_C_ON 100.00% DL_U_ON 100.00% UL_C_ON 0.00% |Seconds 45
16:24:16.218191 Cell 0 DL 1.36 Mbps 100 Slots | UL 0.00 Mbps 0 Slots | DL_C_ON 100.00% DL_U_ON 100.00% UL_C_ON 0.00% |Seconds 46
16:24:16.218204 Cell 1 DL 2.72 Mbps 100 Slots | UL 0.00 Mbps 0 Slots | DL_C_ON 100.00% DL_U_ON 100.00% UL_C_ON 0.00% |Seconds 46
# nrSim config generation
cd ${cuBB_SDK}/cubb_scripts/autoconfig
python3 auto_controllerConfig.py -i ../../testVectors/ -t ../../cuPHY-CP/cuphycontroller/config/cuphycontroller_nrSim_SCF.yaml -o ../../cuPHY-CP/cuphycontroller/config
python3 auto_RuEmulatorConfig.py -i ../../cuPHY-CP/cuphycontroller/config -t ../../cuPHY-CP/ru-emulator/config/config.yaml -o ../../cuPHY-CP/ru-emulator/config
# backup default nrSim config
cp ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_nrSim_SCF.yaml ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_nrSim_SCF.yaml.orig
cp ${cuBB_SDK}/cuPHY-CP/ru-emulator/config/config.yaml ${cuBB_SDK}/cuPHY-CP/ru-emulator/config/config.yaml.orig
# Use nrSim_SCF_90020 config
cp ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_nrSim_SCF_90020.yaml ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_nrSim_SCF.yaml
cp ${cuBB_SDK}/cuPHY-CP/ru-emulator/config/ru_emulator_config_90020.yaml ${cuBB_SDK}/cuPHY-CP/ru-emulator/config/config.yaml
# Restart MPS
sudo -E ./cuphycontroller_scf nrSim_SCF
sudo ./ru_emulator nrSim 90020 --channels 0x1ff
sudo ./test_mac nrSim 90020 --channels 0x1ff
# Restore nrSim config file
cp ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_nrSim_SCF.yaml.orig ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_nrSim_SCF.yaml
cp ${cuBB_SDK}/cuPHY-CP/ru-emulator/config/config.yaml.orig ${cuBB_SDK}/cuPHY-CP/ru-emulator/config/config.yaml
Expected result:
# Expected throughput and passing criteria
ExpectedSlots: Cell=0 PUSCH=100 PDSCH=0 PDCCH_UL=0 PDCCH_DL=0 PBCH=0 PUCCH=0 PRACH=0 CSI_RS=0 SRS=0
ExpectedData: Cell=0 DL=0.000000 UL=41.797600 Prmb=0 HARQ=0 SR=0 CSI1=0 CSI2=0 ERR=0 INV=0
ExpectedSlots: Cell=1 PUSCH=100 PDSCH=0 PDCCH_UL=0 PDCCH_DL=0 PBCH=0 PUCCH=0 PRACH=0 CSI_RS=0 SRS=0
ExpectedData: Cell=1 DL=0.000000 UL=41.797600 Prmb=0 HARQ=0 SR=0 CSI1=0 CSI2=0 ERR=0 INV=0
# Example testMAC output
07:09:34.600006 Cell 0 | DL 0.00 Mbps 0 Slots | UL 41.80 Mbps 100 Slots | Prmb 0 | HARQ 0 | SR 0 | CSI1 0 | CSI2 0 | ERR 0 | INV 0
07:09:34.600015 Cell 1 | DL 0.00 Mbps 0 Slots | UL 41.80 Mbps 100 Slots | Prmb 0 | HARQ 0 | SR 0 | CSI1 0 | CSI2 0 | ERR 0 | INV 0
07:09:35.600006 Cell 0 | DL 0.00 Mbps 0 Slots | UL 41.80 Mbps 100 Slots | Prmb 0 | HARQ 0 | SR 0 | CSI1 0 | CSI2 0 | ERR 0 | INV 0
07:09:35.600014 Cell 1 | DL 0.00 Mbps 0 Slots | UL 41.80 Mbps 100 Slots | Prmb 0 | HARQ 0 | SR 0 | CSI1 0 | CSI2 0 | ERR 0 | INV 0
07:09:36.600006 Cell 0 | DL 0.00 Mbps 0 Slots | UL 41.80 Mbps 100 Slots | Prmb 0 | HARQ 0 | SR 0 | CSI1 0 | CSI2 0 | ERR 0 | INV 0
07:09:36.600013 Cell 1 | DL 0.00 Mbps 0 Slots | UL 41.80 Mbps 100 Slots | Prmb 0 | HARQ 0 | SR 0 | CSI1 0 | CSI2 0 | ERR 0 | INV 0
07:09:37.600008 Cell 0 | DL 0.00 Mbps 0 Slots | UL 41.80 Mbps 100 Slots | Prmb 0 | HARQ 0 | SR 0 | CSI1 0 | CSI2 0 | ERR 0 | INV 0
07:09:37.600017 Cell 1 | DL 0.00 Mbps 0 Slots | UL 41.80 Mbps 100 Slots | Prmb 0 | HARQ 0 | SR 0 | CSI1 0 | CSI2 0 | ERR 0 | INV 0
07:09:38.600006 Cell 0 | DL 0.00 Mbps 0 Slots | UL 41.80 Mbps 100 Slots | Prmb 0 | HARQ 0 | SR 0 | CSI1 0 | CSI2 0 | ERR 0 | INV 0
07:09:38.600014 Cell 1 | DL 0.00 Mbps 0 Slots | UL 41.80 Mbps 100 Slots | Prmb 0 | HARQ 0 | SR 0 | CSI1 0 | CSI2 0 | ERR 0 | INV 0
07:09:39.600008 Cell 0 | DL 0.00 Mbps 0 Slots | UL 41.80 Mbps 100 Slots | Prmb 0 | HARQ 0 | SR 0 | CSI1 0 | CSI2 0 | ERR 0 | INV 0
Here is an example to run the mixed compression using F08 test case for 1 BFP9 + N BFP 14 cells, where N = 1,2,3.
Set the compression size to 9 in both the cuPHYController_F08.yaml
file and RU Emulator config.yaml
file, keep the other Cells at BFP14 (default):
compression_bits: 9
decompression_bits: 9
The throughput levels should be the same as non-mixed case with only BFP 14.
16:17:05.609792 C [SCF.PHY] Cell 0 | DL 1586.28 Mbps 1600 Slots | UL 249.10 Mbps 400 Slots CRC 0 ( 0) | Tick 16000
16:17:05.609808 C [SCF.PHY] Cell 1 | DL 1586.28 Mbps 1600 Slots | UL 249.10 Mbps 400 Slots CRC 0 ( 0) | Tick 16000
16:17:05.609814 C [SCF.PHY] Cell 2 | DL 1586.28 Mbps 1600 Slots | UL 249.10 Mbps 400 Slots CRC 0 ( 0) | Tick 16000
16:17:05.609822 C [SCF.PHY] Cell 3 | DL 1586.28 Mbps 1600 Slots | UL 249.10 Mbps 400 Slots CRC 0 ( 0) | Tick 16000
In order to extract the latencies, run the test with shm_log_level: 5
:
nvlog:
name: phy
shm_log_level: 5 # SHM log level
console_log_level: 3 # Console log level
It is possible to parse the cuphycontroller PHY log (cuphycontroller phy.log
) to get average
latencies (with standard deviation) of key cuphydriver and aerial-fh tasks:
python3 ${cuBB_SDK}/cuPHY-CP/aerial-fh-driver/scripts/phy_latencies/phy_latencies.py phy.log -a
Aerial-FH Latencies
C-plane: Preparing all C-plane packets for a slot and sending them.
U-plane prepare: Preparing all U-plane packets for a slot.
U-plane TX: Sending all U-plane packets for a slot.
U-plane poll TX complete: Checking if previous U-plane TX has completed.
Because of accurate TX scheduling, packets are not sent immediately.
We need to know when the U-plane packets got sent so that we can reuse GPU buffers.
U-plane TX does ‘completions polling’ as well.
U-plane RX: Receiving all U-plane packets for a slot
U-plane Free: Freeing aerial-fh data structures used for U-plane RX
To enable UL measurements in PHY, set the below to 1 in cuphycontroller_nrSim_SCF.yaml
and all measurements are in dBm unit.
pusch_sinr: 1 # 0 - Disabled; 1 - PostEq value; 2 - PreEq value
pusch_rssi: 1
pusch_tdi: 1
pusch_cfo: 1
From release 22-2.3 onwards, SINR reporting can be configured to report pre- or post-equalizer values from the
cuphycontroller_nrSim_SCF.yaml
file, as shown above.
To enable FAPI 10.04 fields, add -DSCF_FAPI_10_04=ON
in the cmake
options and do a clean build.
To enable RSSI and RSRP measurements, L2 has to send Measurement Config TLV in config.request with value as 1 for dBm as described in table 3-27 of FAPI 10.02 and table 3-48 of FAPI 10.04. To enable the same in testMac:
RSSI is enabled by default.
For RSRP, set following to 1 in the
$cuBB_SDK/testMAC/testMAC/test_mac_config.yaml
file:rsrpMeasurement: 1
L2 vendors have requested for additional Interference level reporting for PUSCH, UCI on PUSCH and PUCCH
(PF2,3 only supported). For this purpose, vendor specific messages have been defined using which
Aerial will report these measurements. To enable this reporting, L2 has to send 2 additional TLVs
in config.request
as mentioned in CONFIG.request.
Tag |
Field |
Type |
Description |
---|---|---|---|
0xA012 | PNMeasurement | uint8_t | Post equalisation noise variance measurement Value: 0: Do not report 1: dBm |
0xA014 | PF_234_Interference | uint8_t | Interference power per UE. Value: 0: Do not report 1: dBm |
Once enabled, for every CRC.indication
, Aerial will send an additional RX_PE_Noise_Variance.indication
.
For every UCI.indication
carrying PF2,3, Aerial will send a PF_234_Interference.indication
.
To enable Interference reporting in testMac, set the following to 1 in the $cuBB_SDK/testMAC/testMAC/test_mac_config.yaml
file:
pf_234_interference: 1
pnMeasurement: 1
Enable DEBUG level log for tag SCF.PHY as below in the cuPHY/nvlog/config/nvlog_config.yaml
file:
- 333: "SCF.PHY"
shm_level: 6 # Example: overlay shm_log_level for a tag
Example results: See the the log like below in phy.log
:
05:22:56.350648 D [SCF.PHY] >>> SCF_FAPI_UCI_INDICATION: PUCCH interference Raw=1520 dbm 733 numMeasurements 1
05:22:56.350664 I [MAC.SCF] SFN 375.0 <<< SCF_FAPI_RX_PF_234_INTEFERNCE_INDICATION: num=0 meas=733
For DTX detection for UCI on PUSCH, look for “detection status”. Sample below.
03:30:11.983670 D [SCF.PHY] >>> SCF_FAPI_UCI_INDICATION: HARQ detection status 4
03:30:11.983671 D [SCF.PHY] >>> SCF_FAPI_UCI_INDICATION: UCI on PUSCH HARQ bitlen 2
03:30:11.983671 D [SCF.PHY] >>> SCF_FAPI_UCI_INDICATION: PUCCH F234 CSI Part1 detection status 4 CSI P1 bit len 10
Verification of PUSCH measurement reporting for BFP-9/14/16
Change the value of BFP in matlab file 5GModel/nr_matlab/config as below. Generate cuPHY and FAPI TV and run the test.
% BFP setting for cuPHY UL TV generation and UL performance simulation
SimCtrl.BFPforCuphy = 16; % 16, 14 or 9 for FP16, BFP14 or BFP9
Set log level to 6 and take h5dump of IND1 in FAPI TV.
h5dump -d IND1 TVnr_7427_gNB_FAPI_s0.h5_BFP9
HDF5 "TVnr_7427_gNB_FAPI_s0.h5_BFP9" {
DATASET "IND1" {
DATATYPE H5T_COMPOUND
{ H5T_STD_U32LE "idxPdu"; H5T_STD_U32LE "type"; H5T_STD_U32LE "TbCrcStatus"; H5T_STD_U32LE "NumCb"; H5T_STD_U32LE "UL_CQI"; H5T_STD_U32LE "TimingAdvance"; H5T_STD_U32LE "RSSI"; H5T_STD_U32LE "RSRP"; H5T_STD_I16LE "sinrdB"; H5T_STD_I16LE "postEqSinrdB"; H5T_STD_I16LE "noiseVardB"; H5T_STD_I16LE "postEqNoiseVardB"; }
Compare RSSI, RSRP, sinrdB and noiseVar values against the FAPI values in logs -
>>> SCF_FAPI_CRC_INDICATION 10.04 ul-sinr=20000 ta=63 ta-ns=16803 rssi=853 rsrp=912
[SCF.PHY] >>> RX_PE_NOISE_VARIANCE_INDICATION: PHY sfn=0x153 slot=0x0 num_meas=1 meas[0]=633
For comparing the Raw values of UL measurements against the TV, take h5dump of following values from cuPHY TV then compare reference_sinrdB, reference_rssi, reference_rsrpdB, reference_noiseVardB values against the Raw values in logs.
23:18:48.950917 D [SCF.PHY] Raw RSSI=6.020887 db ul_configured_gain=48.680000
23:18:48.950919 D [SCF.PHY] Raw SINR=40.000000
23:18:48.950920 D [SCF.PHY] Raw RSRP =-0.045194 db ul_configured_gain =48.680000
23:18:48.950938 D [SCF.PHY] Raw PE Noise variance=-40.000000 ul_configured_gain=48.680000
Verification of PUCCH measurement reporting for BFP-9/14/16
Change the value of BFP in matlab file 5GModel/nr_matlab/config as below. Generate cuPHY and FAPI TV and run the test.
% BFP setting for cuPHY UL TV generation and UL performance simulation
SimCtrl.BFPforCuphy = 16; % 16, 14 or 9 for FP16, BFP14 or BFP9
Set log level to 6
Match the value in logs against these fields in cuPHY TV
Format 0 - F0UcisOutRef. Compare RSSI and RSRP value against corresponding value in logs
SCF_FAPI_UCI_INDICATION 10.04: PUCCH : Raw SINR=0.000000 RSSI=16.824944 RSRP=10.804343
Format 1 - F1UcisOutRef. Compare “SinrDB”, “RSSI”, “RSRP” value against the corresponding value in logs
SCF_FAPI_UCI_INDICATION 10.04: PUCCH : Raw SINR=25.059706 RSSI=-3.927727 RSRP=-9.948327
Format 2/3 - pucchF234_refSnrBuffer, pucchF234_refRsrpBuffer, pucchF234_refRssiBuffer, pucchF234_refInterfBuffer . Compare against relevant values in logs
[SCF.PHY] Raw SINR=28.154160 RSRP=-0.132790 ul_configured_gain=48.680000
[SCF.PHY] Raw RSSI=5.887811 ul_configured_gain=48.680000
>>> SCF_FAPI_UCI_INDICATION: PUCCH interference Raw=-28.286949 dbm 750 numMeasurements 1
Verification of PRACH interference level report for BFP-9/14/16
Enable config in test_mac_config.yaml
prach_interference: 1
Run nrSim 5013 test
nrSim 5013 --channels PRACH
Get “nOcc=x Raw PRACH interference” (x=0~3) from phy.log and get “PDUx_noise” (x=1~4) from TV:
# phy.log
grep -o "PHY nOcc=[0-9] Raw PRACH interference=.*" phy.log
PHY nOcc=0 Raw PRACH interference=-16.046867 ul_configured_gain=48.680000 FAPI value=872
PHY nOcc=1 Raw PRACH interference=-16.921370 ul_configured_gain=48.680000 FAPI value=863
PHY nOcc=2 Raw PRACH interference=-17.524746 ul_configured_gain=48.680000 FAPI value=857
PHY nOcc=3 Raw PRACH interference=-18.472067 ul_configured_gain=48.680000 FAPI value=848
# TV
h5ls -ld TVnr_5013_gNB_FAPI_s1.h5/PDU1_noise TVnr_5013_gNB_FAPI_s1.h5/PDU2_noise TVnr_5013_gNB_FAPI_s1.h5/PDU3_noise TVnr_5013_gNB_FAPI_s1.h5/PDU4_noise
PDU1_noise Dataset {1, 1}
Data:
(0,0) -16.0463
PDU2_noise Dataset {1, 1}
Data:
(0,0) -16.0842
PDU3_noise Dataset {1, 1}
Data:
(0,0) -16.0449
PDU4_noise Dataset {1, 1}
Data:
(0,0) -16.294
Expected result:
abs(Raw PRACH interference - PDUx_noise) < 3
# Example, in above log the 4th occation: abs(-18.472067 + 16.294) = 2.178067 < 3
To restart all cells while multiple cells are running
In the test_mac_config.yaml
file, set the following:
# testMAC/test_mac_config.yaml
# Total slot number in test
test_slots: 8000 # When 1 slot = 0.5 ms, 8000 slots = 4 seconds.
# Restart interval after test_slots finished. Unit is second
restart_interval: 5
This instructs the testMAC to schedule 8000 slots then send cell stop request to all cells. After waiting 5 seconds, TestMAC will send config request and cell start request to all cells.
Use the following commands to verify with the F08 4C pattern A case. Here is the expected result: full throughput runs for approximately 4 seconds, test_mac throughput stops, and ru-emulator throughput reduces to 0 for about 5 seconds, then the procedure repeats.
sudo ./cuPHY-CP/ru-emulator/ru_emulator/ru_emulator F08 4C 28g
sudo -E ./cuPHY-CP/cuphycontroller/examples/cuphycontroller_scf F08
sudo ./cuPHY-CP/testMAC/testMAC/test_mac F08 4C 28g
Run the F08 E2E test case as usual:
sudo -E LD_LIBRARY_PATH=${cuBB_SDK}/gpu-dpdk/build/install/lib/x86_64-linux-gnu/ ${cuBB_SDK}/build/cuPHY-CP/cuphycontroller/examples/cuphycontroller_scf F08
sudo LD_LIBRARY_PATH=${cuBB_SDK}/gpu-dpdk/build/install/lib/x86_64-linux-gnu/ ${cuBB_SDK}/build/cuPHY-CP/ru-emulator/ru_emulator/ru_emulator F08 1C 28g
sudo ${cuBB_SDK}/build/cuPHY-CP/testMAC/testMAC/test_mac F08 1C 28g
Terminate cuphycontroller while the E2E test is running:
cd ${cuBB_SDK}/build/cuPHY-CP/cuphyoam
python3 ../../../cuPHY-CP/cuphyoam/examples/aerial_terminate_cuphycontroller.py
You should see cuphycontroller stops running, and aerial_terminate_cuphycontroller.py
will print
the following output:
12:23:32 Terminating cuphycontroller...
12:23:36 cuphycontroller terminated successfully!
Dynamically changing M-plane parameters via gPRC message is often used with cell life during the initial cell setup with RUs, as well as to replace the RU while cells are running. Here is the list of parameters that are currently supported by M-plane gRPC update:
Parameter name |
Configuration unit: accross all cells/per cell config |
Cell outage: in-service/out-of-service |
OAM command |
Note |
---|---|---|---|---|
dst_mac_addr | per cell config | out-of-service | cd $cuBB_SDK/build/cuPHY-CP/cuphyoam && python3 $cuBB_SDK/cuPHY-CP/cuphyoam/examples/aerial_cell_multi_attrs_update.py –server_ip $SERVER_IP –cell_id $CELL_ID –dst_mac_addr $DST_MAC_ADDR –vlan_id $VLAN_ID –pcp $PCP | dst_mac_addr, vlan id and pcp have to be updated together |
vlan_id | per cell config | out-of-service | cd $cuBB_SDK/build/cuPHY-CP/cuphyoam && python3 $cuBB_SDK/cuPHY-CP/cuphyoam/examples/aerial_cell_multi_attrs_update.py –server_ip $SERVER_IP –cell_id $CELL_ID –dst_mac_addr $DST_MAC_ADDR –vlan_id $VLAN_ID –pcp $PCP | dst_mac_addr, vlan id and pcp have to be updated together |
pcp | per cell config | out-of-service | cd $cuBB_SDK/build/cuPHY-CP/cuphyoam && python3 $cuBB_SDK/cuPHY-CP/cuphyoam/examples/aerial_cell_multi_attrs_update.py –server_ip $SERVER_IP –cell_id $CELL_ID –dst_mac_addr $DST_MAC_ADDR –vlan_id $VLAN_ID –pcp $PCP | dst_mac_addr, vlan id and pcp have to be updated together |
compression_bits | per cell config | out-of-service | cd $cuBB_SDK/build/cuPHY-CP/cuphyoam && python3 $cuBB_SDK/cuPHY-CP/cuphyoam/examples/aerial_cell_multi_attrs_update.py –server_ip $SERVER_IP –cell_id $CELL_ID –compression_bits $COMPRESSION_BITS | |
decompression_bits | per cell config | out-of-service | cd $cuBB_SDK/build/cuPHY-CP/cuphyoam && python3 $cuBB_SDK/cuPHY-CP/cuphyoam/examples/aerial_cell_multi_attrs_update.py –server_ip $SERVER_IP –cell_id $CELL_ID –decompression_bits $DECOMPRESSION_BITS | |
exponent_dl | per cell config | out-of-service | cd $cuBB_SDK/build/cuPHY-CP/cuphyoam && python3 $cuBB_SDK/cuPHY-CP/cuphyoam/examples/aerial_cell_multi_attrs_update.py –server_ip $SERVER_IP –cell_id $CELL_ID –exponent_dl $EXPONENT_DL | |
exponent_ul | per cell config | out-of-service | cd $cuBB_SDK/build/cuPHY-CP/cuphyoam && python3 $cuBB_SDK/cuPHY-CP/cuphyoam/examples/aerial_cell_multi_attrs_update.py –server_ip $SERVER_IP –cell_id $CELL_ID –exponent_ul $EXPONENT_UL | |
prusch_prb_stride | per cell config | out-of-service | cd $cuBB_SDK/build/cuPHY-CP/cuphyoam && python3 $cuBB_SDK/cuPHY-CP/cuphyoam/examples/aerial_cell_multi_attrs_update.py –server_ip $SERVER_IP –cell_id $CELL_ID –pusch_prb_stride $PUSCH_PRB_STRIDE | |
prach_prb_stride | per cell config | out-of-service | cd $cuBB_SDK/build/cuPHY-CP/cuphyoam && python3 $cuBB_SDK/cuPHY-CP/cuphyoam/examples/aerial_cell_multi_attrs_update.py –server_ip $SERVER_IP –cell_id $CELL_ID –prach_prb_stride $PRACH_PRB_STRIDE | |
max_amp_ul | per cell config | out-of-service | cd $cuBB_SDK/build/cuPHY-CP/cuphyoam && python3 $cuBB_SDK/cuPHY-CP/cuphyoam/examples/aerial_cell_multi_attrs_update.py –server_ip $SERVER_IP –cell_id $CELL_ID –max_amp_ul $MAX_AMP_UL | |
section_3_time_offset | per cell config | out-of-service | cd $cuBB_SDK/build/cuPHY-CP/cuphyoam && python3 $cuBB_SDK/cuPHY-CP/cuphyoam/examples/aerial_cell_multi_attrs_update.py –server_ip $SERVER_IP –cell_id $CELL_ID –section_3_time_offset $SECTION_3_TIME_OFFSET | |
fh_distance_range | per cell config | out-of-service | cd $cuBB_SDK/build/cuPHY-CP/cuphyoam && python3 $cuBB_SDK/cuPHY-CP/cuphyoam/examples/aerial_cell_multi_attrs_update.py –server_ip $SERVER_IP –cell_id $CELL_ID –fh_distance_range $FH_DISTANCE_RANGE | |
ul_gain_calibration | per cell config | in-service | cd $cuBB_SDK/build/cuPHY-CP/cuphyoam && python3 $cuBB_SDK/cuPHY-CP/cuphyoam/examples/aerial_cell_multi_attrs_update.py –server_ip $SERVER_IP –cell_id $CELL_ID –ul_gain_calibration $UL_GAIN_CALIBRATION | |
lower_guard_bw | per cell config | out-of-service | cd $cuBB_SDK/build/cuPHY-CP/cuphyoam && python3 $cuBB_SDK/cuPHY-CP/cuphyoam/examples/aerial_cell_multi_attrs_update.py –server_ip $SERVER_IP –cell_id $CELL_ID –lower_guard_bw $LOWER_GUARD_BW | |
attenuation_db | per cell config | in-service | cd $cuBB_SDK/build/cuPHY-CP/cuphyoam && python3 $cuBB_SDK/cuPHY-CP/cuphyoam/examples/aerial_cell_param_attn_update.py $CELL_ID $ATTENUATION_DB | |
gps_alpha | accross all cells | out-of-service | cd $cuBB_SDK/build/cuPHY-CP/cuphyoam && python3 $cuBB_SDK/cuPHY-CP/cuphyoam/examples/aerial_cell_multi_attrs_update.py –server_ip $SERVER_IP –gps_alpha $GPS_ALPHA | All cells have to be in idle state before we can config this param |
gps_beta | accross all cells | out-of-service | cd $cuBB_SDK/build/cuPHY-CP/cuphyoam && python3 $cuBB_SDK/cuPHY-CP/cuphyoam/examples/aerial_cell_multi_attrs_update.py –server_ip $SERVER_IP –gps_beta $GPS_BETA | All cells have to be in idle state before we can config this param |
The following sequence diagram shows an example of both scenarios:
Initial cell and M-plane setup: After launching cuphycontroller, L1 is initialized and all cells are in idle state to be configured. The max number of cells is defined by the
cell_group_num
parameter in the cuphycontroller YAML config. In the example sequence diagram, the OAM sends gRPC message to update M-plane parameters so L1 gets the details to connect to the right RU for each cell. Then L2 sendsCONFIG.request
to configure the cell.NoteIn the current implementation, all cells must be configured before any cell
Start.request
.RU replacement while other cells are running: The example sequence diagram shows the sequence to move the cell-1 traffics from RU1 to RU5. Firstly, the L2 must stop scheduling traffics on cell-1 and send cell Stop.request to cell-1. After that, OAM sends the new M-plane parameters via gRPC message for L1 to connect to RU5. Then L2 sends Config.request and Start.request to bring cell-1 to running state again.
NoteIn the current implementation, the cell
Config.request
after the first cellStart.request
has no effect.
Initial OAM Update
Here is an example of a 4 cell test. Run cuphycontroller with wrong initial configurations, then use gRPC message to update them to the right values.
DST MAC Address OAM Initial Update Test - Single Cell
Update configs:
# Update 'cell_group_num' to 1 in cuphycontroller yaml config
sed -i "s/cell_group_num.*/cell_group_num: 1/" ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_F08.yaml
# Use bleow settings for "Cell1" in ${cuBB_SDK}/cuPHY-CP/ru-emulator/config/config.yaml, note that only the eth mac address is changed cell_configs:
-
name: "Cell1"
eth: "20:04:9B:9E:27:B3"
eAxC_UL: [8,0,1,2]
eAxC_DL: [8,0,1,2]
eAxC_prach_list: [15,7,0,1]
compression_bits: 14
decompression_bits: 14
peer: 0
nic: 0
vlan: 2
pcp: 7
If you don’t perform the OAM update to change the cell 1 dst mac address, the below test will fail. The expected test result is no throughput on the ru-emulator side.
sudo ./cuphycontroller_scf F08
sudo ./ru_emulator F08 1C 24d
sudo ./test_mac F08 1C 24d
If you perform the OAM update to change the cell 1 dst mac address, the below test will pass. The expected test result is that there will be throughput on the ru-emulator side.
sudo ./cuphycontroller_scf F08
# Below OAM update command should be executed on the same server as cuphycontroller
cd $cuBB_SDK/build/cuPHY-CP/cuphyoam && python3 $cuBB_SDK/cuPHY-CP/cuphyoam/examples/aerial_cell_param_net_update.py 1 20:04:9B:9E:27:B3 E002
sudo ./ru_emulator F08 1C 24d
sudo ./test_mac F08 1C 24d
VLAN ID OAM Initial Update Test - Single Cell
Update configs:
# Update 'cell_group_num' to 1 in cuphycontroller yaml config
sed -i "s/cell_group_num.*/cell_group_num: 1/" ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_F08.yaml
# Use below settings for "Cell1" in ${cuBB_SDK}/cuPHY-CP/ru-emulator/config/config.yaml, note that only the VLAN ID is changedcell_configs:
-
name: "Cell1"
eth: "20:04:9B:9E:27:A3"
eAxC_UL: [8,0,1,2]
eAxC_DL: [8,0,1,2]
eAxC_prach_list: [15,7,0,1]
compression_bits: 14
decompression_bits: 14
peer: 0
nic: 0
vlan: 3
pcp: 7
If you don’t perform the OAM update to change the cell 1 VLAN ID, the below test will fail. The expected test result is no throughput on the ru-emulator side.
sudo ./cuphycontroller_scf F08
sudo ./ru_emulator F08 1C 24d
sudo ./test_mac F08 1C 24d
If you perform the OAM update to change the cell 1 VLAN ID, the below test will pass. The expected test result is that there will be throughput on the ru-emulator side.
sudo ./cuphycontroller_scf F08
# Below OAM update command should be executed on the same server as cuphycontroller
cd $cuBB_SDK/build/cuPHY-CP/cuphyoam && python3 $cuBB_SDK/cuPHY-CP/cuphyoam/examples/aerial_cell_param_net_update.py 1 20:04:9B:9E:27:A3 E003
sudo ./ru_emulator F08 1C 24d
sudo ./test_mac F08 1C 24d
VLAN PCP OAM Initial Update Test - Single Cell
Update configs:
# Update 'cell_group_num' to 1 in cuphycontroller yaml config
sed -i "s/cell_group_num.*/cell_group_num: 1/" ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_F08.yaml
# Use bleow settings for "Cell1" in ${cuBB_SDK}/cuPHY-CP/ru-emulator/config/config.yaml, note that only the PCP is changed cell_configs:
-
name: "Cell1"
eth: "20:04:9B:9E:27:A3"
eAxC_UL: [8,0,1,2]
eAxC_DL: [8,0,1,2]
eAxC_prach_list: [15,7,0,1]
compression_bits: 14
decompression_bits: 14
peer: 0
nic: 0
vlan: 2
pcp: 4
If you don’t perform the OAM update to change the cell 1 PCP, the below test will fail. The expected test result is no throughput on the ru-emulator side.
sudo ./cuphycontroller_scf F08
sudo ./ru_emulator F08 1C 24d
sudo ./test_mac F08 1C 24d
If you perform the OAM update to change the cell 1 PCP, the below test will pass. The expected test result is that there will be throughput on the ru-emulator side.
sudo ./cuphycontroller_scf F08
# Below OAM update command should be executed on the same server as cuphycontroller
cd $cuBB_SDK/build/cuPHY-CP/cuphyoam && python3 $cuBB_SDK/cuPHY-CP/cuphyoam/examples/aerial_cell_param_net_update.py 1 20:04:9B:9E:27:A3 8002
sudo ./ru_emulator F08 1C 24d
sudo ./test_mac F08 1C 24d
DST MAC + VLAN ID + PCP OAM Initial Update Test - Multi-Cells
# Update 'cell_group_num' to 4 in cuphycontroller yaml config
sed -i "s/cell_group_num.*/cell_group_num: 4/" ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_F08.yaml
# Change eth, vlan, pcp of Cell 1~4 to any wrong values (here only show the values which require change) in ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_F08.yaml
-
cell_id: 1
dst_mac_addr: 20:20:20:20:20:A1
vlan: 3
pcp: 2
-
cell_id: 2
dst_mac_addr: 20:20:20:20:20:A2
vlan: 4
pcp: 3
-
cell_id: 3
dst_mac_addr: 20:20:20:20:20:A3
vlan: 5
pcp: 4
-
cell_id: 4
dst_mac_addr: 20:20:20:20:20:A4
vlan: 6
pcp: 5
If you don’t perform the OAM update, the E2E test will fail. The expected test result is no throughput on the ru-emulator side.
sudo ./cuphycontroller_scf F08
sudo ./ru_emulator F08 4C 24d
sudo ./test_mac F08 4C 24d
If you perform the OAM update for MAC + VLAN + PCP of the 4 cells to right values, the E2E test will pass.The expected test result is normal throughputs for all cells
sudo ./cuphycontroller_scf F08
# OAM update MAC + VLAN + PCP of the 4 cells after cuphycontroller_scf started
cd $cuBB_SDK/build/cuPHY-CP/cuphyoam && python3 $cuBB_SDK/cuPHY-CP/cuphyoam/examples/aerial_cell_param_net_update.py 1 20:04:9B:9E:27:A3 E002
cd $cuBB_SDK/build/cuPHY-CP/cuphyoam && python3 $cuBB_SDK/cuPHY-CP/cuphyoam/examples/aerial_cell_param_net_update.py 2 26:04:9D:9E:29:B3 E002
cd $cuBB_SDK/build/cuPHY-CP/cuphyoam && python3 $cuBB_SDK/cuPHY-CP/cuphyoam/examples/aerial_cell_param_net_update.py 3 20:34:9A:9E:29:B3 E002
cd $cuBB_SDK/build/cuPHY-CP/cuphyoam && python3 $cuBB_SDK/cuPHY-CP/cuphyoam/examples/aerial_cell_param_net_update.py 4 22:34:9C:9E:29:A3 E002
sudo ./ru_emulator F08 4C 24d
sudo ./test_mac F08 4C 24d
Dynamic OAM Update
DST MAC Address OAM On-the-Fly Update Test - Single Cell
Update the ‘restart_interval’ and ‘test_cell_update’ sections with the below values in the testMac config file ($cuBB_SDK/cuPHY-CP/testMAC/testMAC/test_mac_config.yaml
).
testMAC configs: add cell_id 0 to the “test_cells” list to enable the test. Notice ‘vlan’ and ‘pcp’ is the same, but ‘dst_mac’ is different here. Change ‘test_sequence’ if required to test more cases.
restart_interval: 3
# For cell net parameters update test
# Configs of slot_point=0 only runs at init, other configs will run repeatly.
test_cell_update:
test_cells: [0]
test_sequence:
- slot_point: 20000
configs:
- {cell_id: 0, dst_mac: 20:04:9B:9E:27:A3, vlan: 2, pcp: 7}
- slot_point: 40000
configs:
- {cell_id: 0, dst_mac: 26:04:9D:9E:29:B3, vlan: 2, pcp: 7}
testMAC will automatically call the below script to change the net parameters during testMAC initialization and before cell restarting (Note: m-plane cell_id = testMAC cell_id + 1).
cd $cuBB_SDK/build/cuPHY-CP/cuphyoam && python3 $cuBB_SDK/cuPHY-CP/cuphyoam/examples/aerial_cell_param_net_update.py <m-plane cell_id> <dst_mac> <pcp_vlan>
In the ru-emulator config file ($cuBB_SDKcuPHY-CP/ru-emulator/config/config.yaml
), change “Cell2” parameters to be the same as “Cell1”, except for “eth” (Note that the only difference is the eth MAC address).
-
name: "Cell1"
eth: "20:04:9B:9E:27:A3"
eAxC_UL: [8,0,1,2]
eAxC_DL: [8,0,1,2]
eAxC_prach_list: [15,7,0,1]
compression_bits: 14
decompression_bits: 14
peer: 0
nic: 0
vlan: 2
pcp: 7
-
name: "Cell2"
eth: "26:04:9D:9E:29:B3"
eAxC_UL: [8,0,1,2]
eAxC_DL: [8,0,1,2]
eAxC_prach_list: [15,7,0,1]
compression_bits: 14
decompression_bits: 14
peer: 0
nic: 0
vlan: 2
pcp: 7
Run normal F08 Pattern 0 1C E2E test commands, except change the ru-emulator parameter “1C” to “1C_X2” (the following only shows the test case parameters; refer to the F08 cases for full instructions):
sudo ./ru_emulator F08 1C_24d_X2
sudo ./cuphycontroller_scf F08
sudo ./test_mac F08 1C 24d
Test result:
ru-emulator throughput first starts on cell 1.
ru-emulator throughput switches between cell 0 to cell 1, and repeats.
The switching time points are decided by the above “slot_point” in testMAC configurations. Currently 20000 slots = 10 seconds.
VLAN ID OAM On-the-Fly Update Test - Single Cell
Update ‘restart_interval’ and ‘test_cell_update’ section with below in testMac config file $cuBB_SDK/cuPHY-CP/testMAC/testMAC/test_mac_config.yaml
.
testMAC configs: add cell_id 0 to “test_cells” list to enable the test. Notice ‘dst_mac’ and ‘pcp’ are same, ‘vlan’ is different here. Change test_sequence if requires to test more cases.
restart_interval: 3
# For cell net parameters update test
test_cell_update:
test_cells: [0]
test_sequence:
- slot_point: 20000
configs:
- {cell_id: 0, dst_mac: 20:04:9B:9E:27:A3, vlan: 3, pcp: 7}
- slot_point: 40000
configs:
- {cell_id: 0, dst_mac: 20:04:9B:9E:27:A3, vlan: 2, pcp: 7}
testMAC will automatically call below script to change the net parameters and stop, restart the cell. (Note: m-plane cell_id = testMAC cell_id + 1)
cd $cuBB_SDK/build/cuPHY-CP/cuphyoam && python3 $cuBB_SDK/cuPHY-CP/cuphyoam/examples/aerial_cell_param_net_update.py <m-plane cell_id> <dst_mac> <pcp_vlan>
Update ‘cell_configs’ section with below for “Cell1” and “Cell2” in ru-emulator config file $cuBB_SDKcuPHY-CP/ru-emulator/config/config.yaml
. (Note: The only difference is the vlan id)
-
name: "Cell1"
eth: "20:04:9B:9E:27:A3"
eAxC_UL: [8,0,1,2]
eAxC_DL: [8,0,1,2]
eAxC_prach_list: [15,7,0,1]
compression_bits: 14
decompression_bits: 14
peer: 0
nic: 0
vlan: 2
pcp: 7
-
name: "Cell2"
eth: "20:04:9B:9E:27:A3"
eAxC_UL: [8,0,1,2]
eAxC_DL: [8,0,1,2]
eAxC_prach_list: [15,7,0,1]
compression_bits: 14
decompression_bits: 14
peer: 0
nic: 0
vlan: 3
pcp: 7
Run normal F08 Pattern 0 1C E2E test commans except change ru-emulator parameter “1C” to “1C_X2” (here only show the test case parameters, refer to F08 cases for full instructions):
sudo ./ru_emulator F08 1C_24d_X2
sudo ./cuphycontroller_scf F08
sudo ./test_mac F08 1C 24d
Expected test result: ru-emulator to see throughput changed between cell 0 to cell 1, and repeat. The change time points are decided by above “slot_point” in testMAC configurations. Currently 20000 slots = 10 seconds.
VLAN PCP OAM On-the-Fly Update Test - Single Cell
Update ‘restart_interval’ and ‘test_cell_update’ section with below in testMac config file $cuBB_SDK/cuPHY-CP/testMAC/testMAC/test_mac_config.yaml
.
testMAC configs: add cell_id 0 to “test_cells” list to enable the test. Notice ‘dst_mac’ and ‘vlan’ are same, ‘pcp’ is different here. Change test_sequence if requires to test more cases.
restart_interval: 3
# For cell net parameters update test
test_cell_update:
test_cells: [0]
test_sequence:
- slot_point: 20000
configs:
- {cell_id: 0, dst_mac: 20:04:9B:9E:27:A3, vlan: 2, pcp: 4}
- slot_point: 40000
configs:
- {cell_id: 0, dst_mac: 20:04:9B:9E:27:A3, vlan: 2, pcp: 7}
testMAC will automatically call below script to change the net parameters and stop, restart the cell. (Note: m-plane cell_id = testMAC cell_id + 1)
cd $cuBB_SDK/build/cuPHY-CP/cuphyoam && python3 $cuBB_SDK/cuPHY-CP/cuphyoam/examples/aerial_cell_param_net_update.py <m-plane cell_id> <dst_mac> <pcp_vlan>
Update ‘cell_configs’ section with below for “Cell1” and “Cell2” in ru-emulator config file $cuBB_SDKcuPHY-CP/ru-emulator/config/config.yaml
. (Note: The only difference is the PCP value)
-
name: "Cell1"
eth: "20:04:9B:9E:27:A3"
eAxC_UL: [8,0,1,2]
eAxC_DL: [8,0,1,2]
eAxC_prach_list: [15,7,0,1]
compression_bits: 14
decompression_bits: 14
peer: 0
nic: 0
vlan: 2
pcp: 7
-
name: "Cell2"
eth: "20:04:9B:9E:27:A3"
eAxC_UL: [8,0,1,2]
eAxC_DL: [8,0,1,2]
eAxC_prach_list: [15,7,0,1]
compression_bits: 14
decompression_bits: 14
peer: 0
nic: 0
vlan: 2
pcp: 4
Run normal F08 Pattern 0 1C E2E test commans except change ru-emulator parameter “1C” to “1C_X2” (here only show the test case parameters, refer to F08 cases for full instructions):
sudo ./ru_emulator F08 1C_24d_X2
sudo ./cuphycontroller_scf F08
sudo ./test_mac F08 1C 24d
Expected test result: ru-emulator to see throughput changed between cell 0 to cell 1, and repeat. The change time points are decided by above “slot_point” in testMAC configurations. Currently 20000 slots = 10 seconds.
DST MAC OAM On-the-Fly Update Test (with OAM Cell Ctrl Command) - Multi-cells
Below sequence diagram shows the capability of updating Dst_MAC/VLAN/PCP on the fly with multi-cell running.
Configuration update:
# Save original configuration before the test
cp $cuBB_SDK/cuPHY-CP/testMAC/testMAC/test_mac_config.yaml $cuBB_SDK/cuPHY-CP/testMAC/testMAC/test_mac_config.yaml.orig
cp ${cuBB_SDK}/cuPHY-CP/ru-emulator/config/config.yaml ${cuBB_SDK}/cuPHY-CP/ru-emulator/config/config.yaml.orig
cp ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_F08_R750.yaml ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_F08_R750.yaml.orig
# Update config
sed -i "s/oam_cell_ctrl_cmd:.*/oam_cell_ctrl_cmd: 1/" $cuBB_SDK/cuPHY-CP/testMAC/testMAC/test_mac_config.yaml
sed -i "s/eAxC_UL:.*/eAxC_UL: \\[0,1,2,3\\]/" ${cuBB_SDK}/cuPHY-CP/ru-emulator/config/config.yaml
sed -i "s/eAxC_DL:.*/eAxC_DL: \\[0,1,2,3\\]/" ${cuBB_SDK}/cuPHY-CP/ru-emulator/config/config.yaml
sed -i "s/eAxC_prach_list:.*/eAxC_prach_list: \\[5,6,7,10\\]/" ${cuBB_SDK}/cuPHY-CP/ru-emulator/config/config.yaml
sed -i "s/cell_group_num:.*/cell_group_num: 4/" ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_F08_R750.yaml
sed -i "s/\\[.*//g" ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_F08_R750.yaml
sed -i "s/eAxC_id_.*/&\\[0, 1, 2, 3\\]/" ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_F08_R750.yaml
sed -i "s/eAxC_id_prach.*/eAxC_id_prach: \\[5, 6, 7, 10\\]/" ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_F08_R750.yaml
# Restore the configuration after the test
cp $cuBB_SDK/cuPHY-CP/testMAC/testMAC/test_mac_config.yaml.orig $cuBB_SDK/cuPHY-CP/testMAC/testMAC/test_mac_config.yaml
cp ${cuBB_SDK}/cuPHY-CP/ru-emulator/config/config.yaml.orig ${cuBB_SDK}/cuPHY-CP/ru-emulator/config/config.yaml
cp ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_F08_R750.yaml.orig ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_F08_R750.yaml
RU-Emulator will use launch pattern file “xC_24d_X2” for test:
launch_pattern_F08_4C_24d_X2.yaml
launch_pattern_F08_8C_24d_X2.yaml
There is a known issue to run launch_pattern_F08_8C_24d_X2.yaml
Run normal F08 4C 24d E2E test commans except change ru-emulator parameter “4C” to “4C_24d_X2” (here only show the test case parameters, refer to F08 cases for full instructions):
sudo ./ru_emulator F08 4C_24d_X2
sudo ./cuphycontroller_scf F08
sudo ./test_mac F08 4C 24d
Init CONF.req sent to all cells (Executed on DU server)
cd $cuBB_SDK/build/cuPHY-CP/cuphyoam/
for i in {0..3}; do python3 $cuBB_SDK/cuPHY-CP/cuphyoam/examples/aerial_cell_ctrl_cmd.py --server_ip localhost --cell_id $i --cmd 3 && sleep 1; done;
START.req sent to all cells (Executed on DU server)
cd $cuBB_SDK/build/cuPHY-CP/cuphyoam/
for i in {0..3}; do python3 $cuBB_SDK/cuPHY-CP/cuphyoam/examples/aerial_cell_ctrl_cmd.py --server_ip localhost --cell_id $i --cmd 1 && sleep 1; done;
Expected result (At this point, RU-Emulator will see cell 0~3 have tput):
STOP.req sent to all cells (Executed on DU server)
cd $cuBB_SDK/build/cuPHY-CP/cuphyoam/
for i in {0..3}; do python3 $cuBB_SDK/cuPHY-CP/cuphyoam/examples/aerial_cell_ctrl_cmd.py --server_ip localhost --cell_id $i --cmd 0 && sleep 1; done;
OAM update (Cell i dst MAC updated to target Cell i+4 on RU-Emulator side, ie. 0→4, 1→5, 2→6, 3->7) (Executed on DU server)
cd $cuBB_SDK/build/cuPHY-CP/cuphyoam/
python3 $cuBB_SDK/cuPHY-CP/cuphyoam/examples/aerial_cell_param_net_update.py 1 20:04:9B:9E:27:05 E002 && sleep 1
python3 $cuBB_SDK/cuPHY-CP/cuphyoam/examples/aerial_cell_param_net_update.py 2 20:04:9B:9E:27:06 E002 && sleep 1
python3 $cuBB_SDK/cuPHY-CP/cuphyoam/examples/aerial_cell_param_net_update.py 3 20:04:9B:9E:27:07 E002 && sleep 1
python3 $cuBB_SDK/cuPHY-CP/cuphyoam/examples/aerial_cell_param_net_update.py 4 20:04:9B:9E:27:08 E002 && sleep 1
START.req sent to all cells (Executed on DU server)
cd $cuBB_SDK/build/cuPHY-CP/cuphyoam/
for i in {0..3}; do python3 $cuBB_SDK/cuPHY-CP/cuphyoam/examples/aerial_cell_ctrl_cmd.py --server_ip localhost --cell_id $i --cmd 1 && sleep 1; done;
Expected result (At this point, RU-Emulator will see cell 4~7 have tput):
This sequence shows changing the PCI and 4 PRACH parameters after the initial config of a cell. There is also a possibility of changing the RU’s VLAN ID and MAC address connected to the cell.
In order to support the above sequence, testMac has been enhanced to send CONFIG.req and START.req using OAM commands and Aerial has been enhanced to support dynamic PRACH parameter configuration and change of PCI in release 22-2.3. Changing of VLAN-id and DST MAC address was supported in previous release and will be utilized to support the Init sequence as shown above. The 4 PRACH parameters that can be changed are as follows:
prachRootSequenceIndex
prachZeroCorrConf
numPrachFdOccasions
K1
In order to test this feature, testMac and ru-emulator are started with more number of cells as compared to cuphyController and then OAM commands are used to change the configuration of a given cell.
Enable testMac to take OAM commands for CONFIG and START of a cell - Change file test_mac_config.yaml
as follows:
# Send cell config/start/stop request via OAM command
oam_cell_ctrl_cmd: 1
In order to test the sequence with n cells, change cell_group_num to n in cuphycontroller_F08.yaml
and other corresponding files
cell_group: 1
cell_group_num: n
fix_beta_dl: 0
For example, for 8C -
cell_group: 1
cell_group_num: 8
fix_beta_dl: 0
Update flow lists on both cuphycontroller and ru-emulator config:
sed -i "s/eAxC_UL:.*/eAxC_UL: \\[0,1,2,3\\]/" ${cuBB_SDK}/cuPHY-CP/ru-emulator/config/config.yaml
sed -i "s/eAxC_DL:.*/eAxC_DL: \\[0,1,2,3\\]/" ${cuBB_SDK}/cuPHY-CP/ru-emulator/config/config.yaml
sed -i "s/eAxC_prach_list:.*/eAxC_prach_list: \\[5,6,7,10\\]/" ${cuBB_SDK}/cuPHY-CP/ru-emulator/config/config.yaml
sed -i "s/\\[.*//g" ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_F08_R750.yaml
sed -i "s/eAxC_id_.*/&\\[0, 1, 2, 3\\]/" ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_F08_R750.yaml
sed -i "s/eAxC_id_prach.*/eAxC_id_prach: \\[5, 6, 7, 10\\]/" ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_F08_R750.yaml
Run cuphycontroller , testMac for > nC and ru-emulator for > nC. For example, for 8C:
sudo ./cuPHY-CP/ru-emulator/ru_emulator/ru_emulator F08 9C 14
sudo -E ./cuPHY-CP/cuphycontroller/examples/cuphycontroller_scf F08
sudo ./cuPHY-CP/testMAC/testMAC/test_mac F08 9C 14
Once testMac has created the gRPC Server and once you see the logs below on testMac console, we are ready to give issue the OAM commands from OAM window
gRPC Server listening on 0.0.0.0:50052
20:33:56.124414 C [NVIPC:SHM] shm_ipc_open: forward_enable=0 fw_max_msg_buf_count=0 fw_max_data_buf_count=0
20:33:56.124434 C [MAC.PROC] set_launch_pattern_and_configs: fapi_type=1 tb_loc=1
20:33:56.124439 C [MAC.PROC] test_mac: create SCF FAPI interface
Execute OAM commands for testMac from a OAM window:
CONFIG.req command for all n cells. cmd=3 is for CONFIG.req
Start cell-0 (cmd=1)
For example, for 8C:
export cuBB_SDK=$(pwd)
cd build/cuPHY-CP/cuphyoam/
for i in {0..7}; do python3 $cuBB_SDK/cuPHY-CP/cuphyoam/examples/aerial_cell_ctrl_cmd.py --server_ip localhost --cell_id $i --cmd 3 && sleep 1; done; //Send CONFIG.req for cell 0~7
python3 $cuBB_SDK/cuPHY-CP/cuphyoam/examples/aerial_cell_ctrl_cmd.py --server_ip localhost --cell_id 0 --cmd 1 // Send START.req for cell-0
At this time you can see traffic running only for cell-0 on testMac, cuphycontroller and ru-emulator console:
# testMac console
20:34:22.124683 C [MAC.SCF] cell_init: cell_id=0 fapi_type=SCF global_tick=-1 first_init=1
20:34:26.124793 C [MAC.SCF] cell_init: cell_id=1 fapi_type=SCF global_tick=-1 first_init=1
20:34:28.124858 C [MAC.SCF] cell_start: cell_id=0 fapi_type=SCF global_tick=-1
04:55:13.040024 Cell 0 | DL 829.36 Mbps 1600 Slots | UL 122.92 Mbps 400 Slots | Prmb 100 | HARQ 12000 | SR 0 | CSI1 2400 | CSI2 2400 | ERR 0 | INV 0
04:55:13.040037 Cell 1 | DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots | Prmb 0 | HARQ 0 | SR 0 | CSI1 0 | CSI2 0 | ERR 0 | INV 0
04:55:13.040045 Cell 2 | DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots | Prmb 0 | HARQ 0 | SR 0 | CSI1 0 | CSI2 0 | ERR 0 | INV 0
04:55:13.040051 Cell 3 | DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots | Prmb 0 | HARQ 0 | SR 0 | CSI1 0 | CSI2 0 | ERR 0 | INV 0
04:55:13.040058 Cell 4 | DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots | Prmb 0 | HARQ 0 | SR 0 | CSI1 0 | CSI2 0 | ERR 0 | INV 0
04:55:13.040065 Cell 5 | DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots | Prmb 0 | HARQ 0 | SR 0 | CSI1 0 | CSI2 0 | ERR 0 | INV 0
04:55:13.040069 Cell 6 | DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots | Prmb 0 | HARQ 0 | SR 0 | CSI1 0 | CSI2 0 | ERR 0 | INV 0
04:55:13.040074 Cell 7 | DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots | Prmb 0 | HARQ 0 | SR 0 | CSI1 0 | CSI2 0 | ERR 0 | INV 0
04:55:13.040081 Cell 8 | DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots | Prmb 0 | HARQ 0 | SR 0 | CSI1 0 | CSI2 0 | ERR 0 | INV 0
04:55:14.040025 Cell 0 | DL 829.36 Mbps 1600 Slots | UL 122.92 Mbps 400 Slots | Prmb 100 | HARQ 12000 | SR 0 | CSI1 2400 | CSI2 2400 | ERR 0 | INV 0
04:55:14.040037 Cell 1 | DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots | Prmb 0 | HARQ 0 | SR 0 | CSI1 0 | CSI2 0 | ERR 0 | INV 0
04:55:14.040045 Cell 2 | DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots | Prmb 0 | HARQ 0 | SR 0 | CSI1 0 | CSI2 0 | ERR 0 | INV 0
04:55:14.040049 Cell 3 | DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots | Prmb 0 | HARQ 0 | SR 0 | CSI1 0 | CSI2 0 | ERR 0 | INV 0
04:55:14.040054 Cell 4 | DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots | Prmb 0 | HARQ 0 | SR 0 | CSI1 0 | CSI2 0 | ERR 0 | INV 0
04:55:14.040061 Cell 5 | DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots | Prmb 0 | HARQ 0 | SR 0 | CSI1 0 | CSI2 0 | ERR 0 | INV 0
04:55:14.040067 Cell 6 | DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots | Prmb 0 | HARQ 0 | SR 0 | CSI1 0 | CSI2 0 | ERR 0 | INV 0
04:55:14.040071 Cell 7 | DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots | Prmb 0 | HARQ 0 | SR 0 | CSI1 0 | CSI2 0 | ERR 0 | INV 0
04:55:14.040077 Cell 8 | DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots | Prmb 0 | HARQ 0 | SR 0 | CSI1 0 | CSI2 0 | ERR 0 | INV 0
# cuphycontroller console
04:55:13.040004 C [SCF.PHY] Cell 0 | DL 829.36 Mbps 1600 Slots | UL 122.92 Mbps 400 Slots CRC 0 ( 0) | Tick 142000
04:55:13.040018 C [SCF.PHY] Cell 1 | DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots CRC 0 ( 0) | Tick 142000
04:55:13.040023 C [SCF.PHY] Cell 2 | DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots CRC 0 ( 0) | Tick 142000
04:55:13.040027 C [SCF.PHY] Cell 3 | DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots CRC 0 ( 0) | Tick 142000
04:55:13.040033 C [SCF.PHY] Cell 4 | DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots CRC 0 ( 0) | Tick 142000
04:55:13.040037 C [SCF.PHY] Cell 5 | DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots CRC 0 ( 0) | Tick 142000
04:55:13.040044 C [SCF.PHY] Cell 6 | DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots CRC 0 ( 0) | Tick 142000
04:55:13.040051 C [SCF.PHY] Cell 7 | DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots CRC 0 ( 0) | Tick 142000
04:55:14.040005 C [SCF.PHY] Cell 0 | DL 829.36 Mbps 1600 Slots | UL 122.92 Mbps 400 Slots CRC 0 ( 0) | Tick 144000
04:55:14.040019 C [SCF.PHY] Cell 1 | DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots CRC 0 ( 0) | Tick 144000
04:55:14.040023 C [SCF.PHY] Cell 2 | DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots CRC 0 ( 0) | Tick 144000
04:55:14.040028 C [SCF.PHY] Cell 3 | DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots CRC 0 ( 0) | Tick 144000
04:55:14.040033 C [SCF.PHY] Cell 4 | DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots CRC 0 ( 0) | Tick 144000
04:55:14.040040 C [SCF.PHY] Cell 5 | DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots CRC 0 ( 0) | Tick 144000
04:55:14.040046 C [SCF.PHY] Cell 6 | DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots CRC 0 ( 0) | Tick 144000
04:55:14.040050 C [SCF.PHY] Cell 7 | DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots CRC 0 ( 0) | Tick 144000
Now give OAM commands to switch the change PCI and PRACH parameters for cell-1 to cell ‘n+1’.
For example - the below command triggers testMac to send another CONFIG.req for cell-1 with parameters for cell-9. The DST MAC address in the parameters for aerial_cell_param_new_update.py script should be the DST MAC address of n+1 cell in cuphycontroller yaml file. For example, for 8C testcase, DST MAC address should be for cell-9 in cuphycontroller yaml file -
dst_mac_addr: 20:04:9B:9E:27:09
python3 $cuBB_SDK/cuPHY-CP/cuphyoam/examples/aerial_cell_ctrl_cmd.py --server_ip localhost --cell_id 1 --cmd 2 --target_cell_id 8 //Send CONFIG.req for cell-1 with PRACH parameters read from TV for cell-8 and PCI of cell-8
python3 $cuBB_SDK/cuPHY-CP/cuphyoam/examples/aerial_cell_param_net_update.py 2 xx:xx:xx:xx:xx:xx E002 // Set VLAN-id and DST MAC address of cell-1 to point to VLAN-id & DST MAC address of cell-9 in cuphycontroller yaml file
python3 $cuBB_SDK/cuPHY-CP/cuphyoam/examples/aerial_cell_ctrl_cmd.py --server_ip localhost --cell_id 1 --cmd 1 // Send START.req for cell-1
Now testMAC and cuphycontroller will see traffic for cell-0 and cell-1 while RU-Emulator will see traffic for cell-0 and cell-8.
# testMac console
20:35:00.125020 C [MAC.SCF] cell_start: cell_id=1 fapi_type=SCF global_tick=61130
20:35:00.560041 Cell 0 | DL 1731.61 Mbps 1600 Slots | UL 240.94 Mbps 400 Slots | Prmb 100 | HARQ 12000 | SR 0 | CSI1 2400 | CSI2 2400 | ERR 0 | INV 0
20:35:00.560053 Cell 1 | DL 752.17 Mbps 695 Slots | UL 6.63 Mbps 174 Slots | Prmb 43 | HARQ 5220 | SR 0 | CSI1 1044 | CSI2 1044 | ERR 0 | INV 174
20:35:00.560058 Cell 2 | DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots | Prmb 0 | HARQ 0 | SR 0 | CSI1 0 | CSI2 0 | ERR 0 | INV 0
20:35:00.560063 Cell 3 | DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots | Prmb 0 | HARQ 0 | SR 0 | CSI1 0 | CSI2 0 | ERR 0 | INV 0
20:35:01.560039 Cell 0 | DL 1731.61 Mbps 1600 Slots | UL 240.94 Mbps 400 Slots | Prmb 100 | HARQ 12000 | SR 0 | CSI1 2400 | CSI2 2400 | ERR 0 | INV 0
20:35:01.560050 Cell 1 | DL 1731.61 Mbps 1600 Slots | UL 15.06 Mbps 400 Slots | Prmb 100 | HARQ 12000 | SR 0 | CSI1 2400 | CSI2 2400 | ERR 0 | INV 400
20:35:01.560055 Cell 2 | DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots | Prmb 0 | HARQ 0 | SR 0 | CSI1 0 | CSI2 0 | ERR 0 | INV 0
20:35:01.560060 Cell 3 | DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots | Prmb 0 | HARQ 0 | SR 0 | CSI1 0 | CSI2 0 | ERR 0 | INV 0
20:35:02.560041 Cell 0 | DL 1731.61 Mbps 1600 Slots | UL 240.94 Mbps 400 Slots | Prmb 100 | HARQ 12000 | SR 0 | CSI1 2400 | CSI2 2400 | ERR 0 | INV 0
20:35:02.560053 Cell 1 | DL 1731.61 Mbps 1600 Slots | UL 15.06 Mbps 400 Slots | Prmb 100 | HARQ 12000 | SR 0 | CSI1 2400 | CSI2 2400 | ERR 0 | INV 400
20:35:02.560058 Cell 2 | DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots | Prmb 0 | HARQ 0 | SR 0 | CSI1 0 | CSI2 0 | ERR 0 | INV 0
20:35:02.560063 Cell 3 | DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots | Prmb 0 | HARQ 0 | SR 0 | CSI1 0 | CSI2 0 | ERR 0 | INV 0
20:35:03.560040 Cell 0 | DL 1731.61 Mbps 1600 Slots | UL 240.94 Mbps 400 Slots | Prmb 100 | HARQ 12000 | SR 0 | CSI1 2400 | CSI2 2400 | ERR 0 | INV 0
20:35:03.560051 Cell 1 | DL 1731.61 Mbps 1600 Slots | UL 15.06 Mbps 400 Slots | Prmb 100 | HARQ 12000 | SR 0 | CSI1 2400 | CSI2 2400 | ERR 0 | INV 400
20:35:03.560056 Cell 2 | DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots | Prmb 0 | HARQ 0 | SR 0 | CSI1 0 | CSI2 0 | ERR 0 | INV 0
20:35:03.560061 Cell 3 | DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots | Prmb 0 | HARQ 0 | SR 0 | CSI1 0 | CSI2 0 | ERR 0 | INV 0
20:35:04.560043 Cell 0 | DL 1731.61 Mbps 1600 Slots | UL 240.94 Mbps 400 Slots | Prmb 100 | HARQ 12000 | SR 0 | CSI1 2400 | CSI2 2400 | ERR 0 | INV 0
20:35:04.560054 Cell 1 | DL 1731.61 Mbps 1600 Slots | UL 15.06 Mbps 400 Slots | Prmb 100 | HARQ 12000 | SR 0 | CSI1 2400 | CSI2 2400 | ERR 0 | INV 400
20:35:04.560059 Cell 2 | DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots | Prmb 0 | HARQ 0 | SR 0 | CSI1 0 | CSI2 0 | ERR 0 | INV 0
20:35:04.560064 Cell 3 | DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots | Prmb 0 | HARQ 0 | SR 0 | CSI1 0 | CSI2 0 | ERR 0 | INV 0
# cuPhyController console
20:35:00.560005 C [SCF.PHY] Cell 0 | DL 1731.61 Mbps 1600 Slots | UL 240.94 Mbps 400 Slots CRC 0 ( 0) | Tick 62000
20:35:00.560014 C [SCF.PHY] Cell 1 | DL 752.17 Mbps 695 Slots | UL 104.81 Mbps 174 Slots CRC 0 ( 0) | Tick 62000
20:35:01.560004 C [SCF.PHY] Cell 0 | DL 1731.61 Mbps 1600 Slots | UL 240.94 Mbps 400 Slots CRC 0 ( 0) | Tick 64000
20:35:01.560012 C [SCF.PHY] Cell 1 | DL 1731.61 Mbps 1600 Slots | UL 240.94 Mbps 400 Slots CRC 0 ( 0) | Tick 64000
20:35:02.560005 C [SCF.PHY] Cell 0 | DL 1731.61 Mbps 1600 Slots | UL 240.94 Mbps 400 Slots CRC 0 ( 0) | Tick 66000
20:35:02.560013 C [SCF.PHY] Cell 1 | DL 1731.61 Mbps 1600 Slots | UL 240.94 Mbps 400 Slots CRC 0 ( 0) | Tick 66000
20:35:03.560005 C [SCF.PHY] Cell 0 | DL 1731.61 Mbps 1600 Slots | UL 240.94 Mbps 400 Slots CRC 0 ( 0) | Tick 68000
20:35:03.560012 C [SCF.PHY] Cell 1 | DL 1731.61 Mbps 1600 Slots | UL 240.94 Mbps 400 Slots CRC 0 ( 0) | Tick 68000
20:35:04.560006 C [SCF.PHY] Cell 0 | DL 1731.61 Mbps 1600 Slots | UL 240.94 Mbps 400 Slots CRC 0 ( 0) | Tick 70000
20:35:04.560013 C [SCF.PHY] Cell 1 | DL 1731.61 Mbps 1600 Slots | UL 240.94 Mbps 400 Slots CRC 0 ( 0) | Tick 70000
20:35:05.457529 C [SCF.PHY] Cell 0 | DL 1553.04 Mbps 1435 Slots | UL 215.64 Mbps 358 Slots CRC 0 ( 0)
20:35:05.457541 C [SCF.PHY] Cell 1 | DL 1553.04 Mbps 1435 Slots | UL 215.64 Mbps 358 Slots CRC 0 ( 0)
20:35:05.457676 C [SCF.PHY] Cell 0 | DL 1553.04 Mbps 1435 Slots | UL 215.64 Mbps 358 Slots CRC 0 ( 0)
20:35:05.457681 C [SCF.PHY] Cell 1 | DL 1553.04 Mbps 1435 Slots | UL 215.64 Mbps 358 Slots CRC 0 ( 0)
# ru-emulator console
12:15:45.760099 Cell 8 DL 829.36 Mbps 1600 Slots | UL 122.92 Mbps 400 Slots | PBCH 100 | PDCCH_DL 1600 | CSI_RS 1600 | PRACH 100 Slots | PUCCH 400 Slots | DL_C_ON 100.00% DL_U_ON 100.00% UL_C_ON 100.00% |Seconds 513
12:15:46.760025 Cell 0 DL 829.36 Mbps 1600 Slots | UL 122.92 Mbps 400 Slots | PBCH 100 | PDCCH_DL 1600 | CSI_RS 1600 | PRACH 100 Slots | PUCCH 400 Slots | DL_C_ON 100.00% DL_U_ON 100.00% UL_C_ON 100.00% |Seconds 514
12:15:46.760041 Cell 1 DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots | PBCH 0 | PDCCH_DL 0 | CSI_RS 0 | PRACH 0 Slots | PUCCH 0 Slots | DL_C_ON 0.00% DL_U_ON 0.00% UL_C_ON 0.00% |Seconds 514
12:15:46.760049 Cell 2 DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots | PBCH 0 | PDCCH_DL 0 | CSI_RS 0 | PRACH 0 Slots | PUCCH 0 Slots | DL_C_ON 0.00% DL_U_ON 0.00% UL_C_ON 0.00% |Seconds 514
12:15:46.760054 Cell 3 DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots | PBCH 0 | PDCCH_DL 0 | CSI_RS 0 | PRACH 0 Slots | PUCCH 0 Slots | DL_C_ON 0.00% DL_U_ON 0.00% UL_C_ON 0.00% |Seconds 514
12:15:46.760060 Cell 4 DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots | PBCH 0 | PDCCH_DL 0 | CSI_RS 0 | PRACH 0 Slots | PUCCH 0 Slots | DL_C_ON 0.00% DL_U_ON 0.00% UL_C_ON 0.00% |Seconds 514
12:15:46.760073 Cell 5 DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots | PBCH 0 | PDCCH_DL 0 | CSI_RS 0 | PRACH 0 Slots | PUCCH 0 Slots | DL_C_ON 0.00% DL_U_ON 0.00% UL_C_ON 0.00% |Seconds 514
12:15:46.760078 Cell 6 DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots | PBCH 0 | PDCCH_DL 0 | CSI_RS 0 | PRACH 0 Slots | PUCCH 0 Slots | DL_C_ON 0.00% DL_U_ON 0.00% UL_C_ON 0.00% |Seconds 514
12:15:46.760083 Cell 7 DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots | PBCH 0 | PDCCH_DL 0 | CSI_RS 0 | PRACH 0 Slots | PUCCH 0 Slots | DL_C_ON 0.00% DL_U_ON 0.00% UL_C_ON 0.00% |Seconds 514
12:15:46.760090 Cell 8 DL 829.36 Mbps 1600 Slots | UL 122.92 Mbps 400 Slots | PBCH 100 | PDCCH_DL 1600 | CSI_RS 1600 | PRACH 100 Slots | PUCCH 400 Slots | DL_C_ON 100.00% DL_U_ON 100.00% UL_C_ON 100.00% |Seconds 514
12:15:47.760024 Cell 0 DL 829.36 Mbps 1600 Slots | UL 122.92 Mbps 400 Slots | PBCH 100 | PDCCH_DL 1600 | CSI_RS 1600 | PRACH 100 Slots | PUCCH 400 Slots | DL_C_ON 100.00% DL_U_ON 100.00% UL_C_ON 100.00% |Seconds 515
12:15:47.760041 Cell 1 DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots | PBCH 0 | PDCCH_DL 0 | CSI_RS 0 | PRACH 0 Slots | PUCCH 0 Slots | DL_C_ON 0.00% DL_U_ON 0.00% UL_C_ON 0.00% |Seconds 515
12:15:47.760047 Cell 2 DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots | PBCH 0 | PDCCH_DL 0 | CSI_RS 0 | PRACH 0 Slots | PUCCH 0 Slots | DL_C_ON 0.00% DL_U_ON 0.00% UL_C_ON 0.00% |Seconds 515
12:15:47.760053 Cell 3 DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots | PBCH 0 | PDCCH_DL 0 | CSI_RS 0 | PRACH 0 Slots | PUCCH 0 Slots | DL_C_ON 0.00% DL_U_ON 0.00% UL_C_ON 0.00% |Seconds 515
12:15:47.760060 Cell 4 DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots | PBCH 0 | PDCCH_DL 0 | CSI_RS 0 | PRACH 0 Slots | PUCCH 0 Slots | DL_C_ON 0.00% DL_U_ON 0.00% UL_C_ON 0.00% |Seconds 515
12:15:47.760066 Cell 5 DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots | PBCH 0 | PDCCH_DL 0 | CSI_RS 0 | PRACH 0 Slots | PUCCH 0 Slots | DL_C_ON 0.00% DL_U_ON 0.00% UL_C_ON 0.00% |Seconds 515
12:15:47.760076 Cell 6 DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots | PBCH 0 | PDCCH_DL 0 | CSI_RS 0 | PRACH 0 Slots | PUCCH 0 Slots | DL_C_ON 0.00% DL_U_ON 0.00% UL_C_ON 0.00% |Seconds 515
12:15:47.760082 Cell 7 DL 0.00 Mbps 0 Slots | UL 0.00 Mbps 0 Slots | PBCH 0 | PDCCH_DL 0 | CSI_RS 0 | PRACH 0 Slots | PUCCH 0 Slots | DL_C_ON 0.00% DL_U_ON 0.00% UL_C_ON 0.00% |Seconds 515
12:15:47.760089 Cell 8 DL 829.36 Mbps 1600 Slots | UL 122.92 Mbps 400 Slots | PBCH 100 | PDCCH_DL 1600 | CSI_RS 1600 | PRACH 100 Slots | PUCCH 400 Slots | DL_C_ON 100.00% DL_U_ON 100.00% UL_C_ON 100.00% |Seconds 515
12:15:48.760023 Cell 0 DL 829.36 Mbps 1600 Slots | UL 122.92 Mbps 400 Slots | PBCH 100 | PDCCH_DL 1600 | CSI_RS 1600 | PRACH 100 Slots | PUCCH 400 Slots | DL_C_ON 100.00% DL_U_ON 100.00% UL_C_ON 100.00% |Seconds 516
Run below on gNB Server#1 (Make sure -DAERIAL_METRICS=1
added in cmake config):
curl localhost:8081/metrics
Set the Prometheus thread to a proper CPU core number. For testing on R750 with non-HT setup, change the F08_R750 config file so that DPDK-related metrics are updated, then launch cuphycontroller:
sed -i "s/prometheus_thread.*/prometheus_thread: 23/" ${cuBB_SDK}/cuPHY-CP/cuphycontroller/config/cuphycontroller_F08_R750.yaml
sudo -E LD_LIBRARY_PATH=${cuBB_SDK}/gpu-dpdk/build/install/lib/x86_64-linux-gnu numactl -N 1 -m 1 -- ${cuBB_SDK}/build/cuPHY-CP/cuphycontroller/examples/cuphycontroller_scf F08_R750
Do NOT yet start test_mac. Query the metrics, all metrics should be 0 except for:
aerial_cuphycp_net_tx_accu_sched_clock_queue_jitter_ns
aerial_cuphycp_net_tx_accu_sched_clock_queue_wander_ns
Launch RU emulator:
sudo LD_LIBRARY_PATH=${cuBB_SDK}/gpu-dpdk/build/install/lib/x86_64-linux-gnu ${cuBB_SDK}/build/cuPHY-CP/ru-emulator/ru_emulator/ru_emulator F08 8C_24d
Run testMAC with 20000 slots:
sed -i "s/test_slots.*/test_slots: 20000/" ${cuBB_SDK}/cuPHY-CP/testMAC/testMAC/test_mac_config.yaml
sudo -E LD_LIBRARY_PATH=${cuBB_SDK}/gpu-dpdk/build/install/lib/x86_64-linux-gnu numactl -N 1 -m 1 -- ${cuBB_SDK}/build/cuPHY-CP/testMAC/testMAC/test_mac F08 8C_24d
Let the test finish. Wait until see test_mac output shows 20000 slots finished:
13:16:37.244835 C [MAC.FAPI] Finished running 20000 slots test
Don’t kill cuphycontroller yet. Query the metrics again, see the example log as below:
...
# HELP aerial_cuphycp_slots_total Aerial cuPHY-CP total number of processed Downlink slots
# TYPE aerial_cuphycp_slots_total counter
aerial_cuphycp_slots_total{cell="8",type="UL"} 4000
aerial_cuphycp_slots_total{cell="8",type="DL"} 16000
aerial_cuphycp_slots_total{cell="7",type="UL"} 4000
aerial_cuphycp_slots_total{cell="6",type="UL"} 4000
aerial_cuphycp_slots_total{cell="3",type="DL"} 16000
aerial_cuphycp_slots_total{cell="7",type="DL"} 16000
aerial_cuphycp_slots_total{cell="2",type="UL"} 4000
aerial_cuphycp_slots_total{cell="3",type="UL"} 4000
aerial_cuphycp_slots_total{cell="1",type="DL"} 16000
aerial_cuphycp_slots_total{cell="1",type="UL"} 4000
aerial_cuphycp_slots_total{cell="2",type="DL"} 16000
aerial_cuphycp_slots_total{cell="6",type="DL"} 16000
aerial_cuphycp_slots_total{cell="4",type="UL"} 4000
aerial_cuphycp_slots_total{cell="5",type="DL"} 16000
aerial_cuphycp_slots_total{cell="4",type="DL"} 16000
aerial_cuphycp_slots_total{cell="5",type="UL"} 4000
...
# HELP aerial_cuphycp_on_time_uplane_rx_packets_total Aerial cuPHY-CP Uplink U-plane packets which arrived within their receive windows
# TYPE aerial_cuphycp_on_time_uplane_rx_packets_total counter
aerial_cuphycp_on_time_uplane_rx_packets_total{cell="7"} 1680000
aerial_cuphycp_on_time_uplane_rx_packets_total{cell="6"} 1680000
aerial_cuphycp_on_time_uplane_rx_packets_total{cell="2"} 1680000
aerial_cuphycp_on_time_uplane_rx_packets_total{cell="1"} 1680000
aerial_cuphycp_on_time_uplane_rx_packets_total{cell="8"} 1680000
aerial_cuphycp_on_time_uplane_rx_packets_total{cell="3"} 1680000
aerial_cuphycp_on_time_uplane_rx_packets_total{cell="4"} 1680000
aerial_cuphycp_on_time_uplane_rx_packets_total{cell="5"} 1680000
...
# HELP aerial_cuphycp_cplane_tx_bytes_total Aerial cuPHY-CP C-plane TX bytes
# TYPE aerial_cuphycp_cplane_tx_bytes_total counter
aerial_cuphycp_cplane_tx_bytes_total{cell="7"} 101048000
aerial_cuphycp_cplane_tx_bytes_total{cell="6"} 101048000
aerial_cuphycp_cplane_tx_bytes_total{cell="2"} 101048000
aerial_cuphycp_cplane_tx_bytes_total{cell="1"} 101048000
aerial_cuphycp_cplane_tx_bytes_total{cell="8"} 101048000
aerial_cuphycp_cplane_tx_bytes_total{cell="3"} 101048000
aerial_cuphycp_cplane_tx_bytes_total{cell="4"} 101048000
aerial_cuphycp_cplane_tx_bytes_total{cell="5"} 101048000
The nvlog_observer and nvlog_collect are deprecated in 23-1.
By default the logs will get stored in ‘/tmp’ location. User can set the environment variable AERIAL_LOG_PATH to set customized logfile path.
The moment log size crosses 20GB a new file gets created. Like phy.log, phy.log.1, phy.log.2 … phy.log.7.