Running cuBB End-to-End

Aerial SDK 22-4

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.

cuphy-cp_block_diagram.png

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:

Copy
Copied!
            

$ cd /opt/nvidia/cuBB $ export cuBB_SDK=$(pwd)

Create and navigate to the build directory:

Copy
Copied!
            

$ mkdir build && cd build

Next, configure the build options as follows:

  • If building with static SFN slot numbers for the RU Emulator test, then execute the following:

Copy
Copied!
            

$ cmake .. -DDYNAMIC_SFN_SLOT=OFF

  • If building for dynamic SFN slot numbers (eLSU/O-RU Integration), then execute the following:

Copy
Copied!
            

$ cmake ..

  • If building for dynamic SFN slot numbers with Foxconn O-RU, then execute the following:

Copy
Copied!
            

$ cmake .. -DFXN_RU=ON

To build all components of the SDK, use these commands:

Copy
Copied!
            

$ cd ${cuBB_SDK}/build $ make -j $(nproc --all)

To build only the cuPHY, use these commands:

Copy
Copied!
            

$ cd ${cuBB_SDK}/build/cuPHY $ make -j $(nproc --all)

To build only the Test MAC, use these commands:

Copy
Copied!
            

$ cd ${cuBB_SDK}/build/cuPHY-CP/testMAC $ make -j $(nproc --all)

To build only the cuPHY controller, use these commands:

Copy
Copied!
            

$ cd ${cuBB_SDK}/build/cuPHY-CP/cuphycontroller $ make -j $(nproc --all)

To build only the cuPHY driver, use these commands:

Copy
Copied!
            

$ cd ${cuBB_SDK}/build/cuPHY-CP/cuphydriver $ make -j $(nproc --all)

To build only the RU emulator, use these commands:

Copy
Copied!
            

$ 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:

Copy
Copied!
            

$ 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:

    Copy
    Copied!
                

    $ 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:

    Copy
    Copied!
                

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

    Copy
    Copied!
                

    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:

    Copy
    Copied!
                

    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:

Copy
Copied!
            

# 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:

Copy
Copied!
            

$ 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:

Copy
Copied!
            

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

Copy
Copied!
            

$ 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:

Copy
Copied!
            

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

ru_emulator_network_connection.png

To verify PTP4L and PHC2SYS Services are Running, run the following commands on the host:

Copy
Copied!
            

$ 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:

Copy
Copied!
            

$ 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:

Copy
Copied!
            

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

Copy
Copied!
            

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:

Copy
Copied!
            

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

Copy
Copied!
            

$ export GDRCOPY_PATH_L=$cuBB_SDK/cuPHY-CP/external/gdrcopy/src

Running testMAC + SCF L2 Adapter Standalone

  1. Build all the modules as described in the Building cuBB for End-to-End chapter.

  2. Run l2adapter in standalone mode:

Copy
Copied!
            

sudo $cuBB_SDK/build/cuPHY-CP/scfl2adapter/scf_app/cuphycontroller\ /l2_adapter_cuphycontroller_scf


  1. Run testMAC after l2adapter starts.

You can run different cases:

Copy
Copied!
            

sudo $cuBB_SDK/build/cuPHY-CP/testMAC/testMAC/test_mac <Fxx> <xC> [-- channels <CHANNELS>] --no-validation

Examples:

Copy
Copied!
            

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


  1. Test result and test log: In the testMAC terminal output below, you can see the TTI tick counter and throughput:

Copy
Copied!
            

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):

Copy
Copied!
            

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)

Copy
Copied!
            

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-CP/gt_common_libs/nvlog/config/nvlog_config.yaml if needed. For example, to change to console only log level:

Copy
Copied!
            

name: phy - shm_log_level:5 # SHM log level + shm_log_level: 3 # SHM log level console_log_level: 3 # Console log level

Note

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

Copy
Copied!
            

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

Copy
Copied!
            

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:

Copy
Copied!
            

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.

Copy
Copied!
            

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:

Copy
Copied!
            

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)

Copy
Copied!
            

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:

Copy
Copied!
            

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:

Copy
Copied!
            

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:

Copy
Copied!
            

cell_group: 1 cell_group_num: 1

To run 2C:

Copy
Copied!
            

cell_group: 1 cell_group_num: 2

To run 3C:

Copy
Copied!
            

cell_group: 1 cell_group_num: 3

To run 4C:

Copy
Copied!
            

cell_group: 1 cell_group_num: 4

F08 traffic patterns:

For the Series 24d-28g, we have 20 slot patterns:

  • Series 24d:
    • 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)

  • Series 25g:
    • TRS: symbols {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, 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)

  • Series 27d:
    • 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)

  • Series 28g:
    • 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)

For the latest series 33 and 35, we have generated 80 slot patterns for a more realistic simulation:

  • Series 33:
    • Frame 0: Series 24d

    • Frame 1: Series 25g

    • Frame 2: Series 24d

    • Frame 3: as following
      • TRS: symbol 6+10 / 5+9; SLOT 0, 1, 10, 11, 16, 17, 18, 19;

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

  • Series 35:
    • Frame 0: Series 27d

    • Frame 1: Series 28g

    • Frame 2: Series 27d

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

F08 4C with pattern 27d:

Copy
Copied!
            

sudo -E ./cuphycontroller_scf F08 sudo ./test_mac F08 4C 27d sudo ./ru_emulator F08 4C 27d

This is the expected throughput:

Copy
Copied!
            

# F08 4 peak cells pattern 27d 10:07:35.680003 C [SCF.PHY] Cell 0 | DL 1827.14 Mbps 1600 Slots | UL 239.72 Mbps 400 Slots CRC 0 ( 0) | Tick 26000 10:07:35.680012 C [SCF.PHY] Cell 1 | DL 1827.14 Mbps 1600 Slots | UL 239.72 Mbps 400 Slots CRC 0 ( 0) | Tick 26000 10:07:35.680017 C [SCF.PHY] Cell 2 | DL 1827.14 Mbps 1600 Slots | UL 239.72 Mbps 400 Slots CRC 0 ( 0) | Tick 26000 10:07:35.680021 C [SCF.PHY] Cell 3 | DL 1827.14 Mbps 1600 Slots | UL 239.72 Mbps 400 Slots CRC 0 ( 0) | Tick 26000

F08 4C with pattern 28g:

Copy
Copied!
            

sudo -E ./cuphycontroller_scf F08 sudo ./test_mac F08 4C 28g sudo ./ru_emulator F08 4C 28g

This is the expected throughput:

Copy
Copied!
            

# F08 4 peak cells pattern 28g 19:37:27.160004 C [SCF.PHY] Cell 0 | DL 1849.19 Mbps 1600 Slots | UL 239.72 Mbps 400 Slots CRC 0 ( 0) | Tick 272000 19:37:27.160012 C [SCF.PHY] Cell 1 | DL 1849.19 Mbps 1600 Slots | UL 239.72 Mbps 400 Slots CRC 0 ( 0) | Tick 272000 19:37:27.160016 C [SCF.PHY] Cell 2 | DL 1849.19 Mbps 1600 Slots | UL 239.72 Mbps 400 Slots CRC 0 ( 0) | Tick 272000 19:37:27.160019 C [SCF.PHY] Cell 3 | DL 1849.19 Mbps 1600 Slots | UL 239.72 Mbps 400 Slots CRC 0 ( 0) | Tick 272000

On R750 A100x DU system F08 7C with pattern 35 (peak pattern):

Copy
Copied!
            

sudo -E ./cuphycontroller_scf F08_R750 sudo ./test_mac F08 7C 35 sudo ./ru_emulator F08 7C 35

This is the expected throughput:

Copy
Copied!
            

20:27:06.120004 C [SCF.PHY] Cell 0 | DL 1838.17 Mbps 1600 Slots | UL 239.72 Mbps 400 Slots CRC 0 ( 0) | Tick 4000 20:27:06.120015 C [SCF.PHY] Cell 1 | DL 1838.17 Mbps 1600 Slots | UL 239.72 Mbps 400 Slots CRC 0 ( 0) | Tick 4000 20:27:06.120016 C [SCF.PHY] Cell 2 | DL 1838.17 Mbps 1600 Slots | UL 239.72 Mbps 400 Slots CRC 0 ( 0) | Tick 4000 20:27:06.120018 C [SCF.PHY] Cell 3 | DL 1838.17 Mbps 1600 Slots | UL 239.72 Mbps 400 Slots CRC 0 ( 0) | Tick 4000 20:27:06.120019 C [SCF.PHY] Cell 4 | DL 1838.17 Mbps 1600 Slots | UL 239.72 Mbps 400 Slots CRC 0 ( 0) | Tick 4000 20:27:06.120021 C [SCF.PHY] Cell 5 | DL 1838.17 Mbps 1600 Slots | UL 239.72 Mbps 400 Slots CRC 0 ( 0) | Tick 4000 20:27:06.120022 C [SCF.PHY] Cell 6 | DL 1838.17 Mbps 1600 Slots | UL 239.72 Mbps 400 Slots CRC 0 ( 0) | Tick 4000

On R750 A100x DU system F08 12C with pattern 33 (average pattern)

Copy
Copied!
            

sudo -E ./cuphycontroller_scf F08_R750 sudo ./test_mac F08 12C 33 sudo ./ru_emulator F08 12C 33

This is the expected throughput:

Copy
Copied!
            

20:45:52.520003 C [SCF.PHY] Cell 0 | DL 888.17 Mbps 1600 Slots | UL 111.55 Mbps 400 Slots CRC 0 ( 0) | Tick 4000 20:45:52.520015 C [SCF.PHY] Cell 1 | DL 888.17 Mbps 1600 Slots | UL 111.55 Mbps 400 Slots CRC 0 ( 0) | Tick 4000 20:45:52.520017 C [SCF.PHY] Cell 2 | DL 888.17 Mbps 1600 Slots | UL 111.55 Mbps 400 Slots CRC 0 ( 0) | Tick 4000 20:45:52.520018 C [SCF.PHY] Cell 3 | DL 888.17 Mbps 1600 Slots | UL 111.55 Mbps 400 Slots CRC 0 ( 0) | Tick 4000 20:45:52.520020 C [SCF.PHY] Cell 4 | DL 888.17 Mbps 1600 Slots | UL 111.55 Mbps 400 Slots CRC 0 ( 0) | Tick 4000 20:45:52.520021 C [SCF.PHY] Cell 5 | DL 888.17 Mbps 1600 Slots | UL 111.55 Mbps 400 Slots CRC 0 ( 0) | Tick 4000 20:45:52.520022 C [SCF.PHY] Cell 6 | DL 888.17 Mbps 1600 Slots | UL 111.55 Mbps 400 Slots CRC 0 ( 0) | Tick 4000 20:45:52.520024 C [SCF.PHY] Cell 7 | DL 888.17 Mbps 1600 Slots | UL 111.55 Mbps 400 Slots CRC 0 ( 0) | Tick 4000 20:45:52.520025 C [SCF.PHY] Cell 8 | DL 888.17 Mbps 1600 Slots | UL 111.55 Mbps 400 Slots CRC 0 ( 0) | Tick 4000 20:45:52.520026 C [SCF.PHY] Cell 9 | DL 888.17 Mbps 1600 Slots | UL 111.55 Mbps 400 Slots CRC 0 ( 0) | Tick 4000 20:45:52.520028 C [SCF.PHY] Cell 10 | DL 888.17 Mbps 1600 Slots | UL 111.55 Mbps 400 Slots CRC 0 ( 0) | Tick 4000 20:45:52.520029 C [SCF.PHY] Cell 11 | DL 888.17 Mbps 1600 Slots | UL 111.55 Mbps 400 Slots CRC 0 ( 0) | Tick 4000


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:

Copy
Copied!
            

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:

Copy
Copied!
            

validate_dl_timing: 0

Also set the DU config to BFP 9 compression:

Copy
Copied!
            

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:

Copy
Copied!
            

- 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

Copy
Copied!
            

# 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

Copy
Copied!
            

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

Copy
Copied!
            

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

Copy
Copied!
            

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:

Copy
Copied!
            

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

Copy
Copied!
            

# 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

Copy
Copied!
            

# 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

Copy
Copied!
            

# 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

Copy
Copied!
            

# 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

Copy
Copied!
            

# 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

Copy
Copied!
            

# 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

Copy
Copied!
            

# 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

Copy
Copied!
            

# 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

Copy
Copied!
            

# 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

Copy
Copied!
            

# 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

Copy
Copied!
            

# 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

Copy
Copied!
            

# 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

Copy
Copied!
            

# 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


S-slot

Copy
Copied!
            

# 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

Copy
Copied!
            

# 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

Copy
Copied!
            

# 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

Copy
Copied!
            

# 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

Copy
Copied!
            

# 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 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 phy.log by testMAC when validation fails.

Note

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:

Copy
Copied!
            

# 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:

Copy
Copied!
            

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”:

Copy
Copied!
            

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” in phy.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

Copy
Copied!
            

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):

Copy
Copied!
            

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.

Copy
Copied!
            

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:

Copy
Copied!
            

sudo ./ru_emulator P5G PRACH --channels 0x1FF

Run the cuPHY Controller and the testMAC:

Copy
Copied!
            

sudo -E ./cuphycontroller_scf P5G_SCF_E2E sudo ./test_mac P5G PRACH --channels 0x1FF

Expected RU Emulator console:

Copy
Copied!
            

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:

Copy
Copied!
            

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:

Copy
Copied!
            

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 and reorder the text logs after testing.

Copy
Copied!
            

# For cuphycontroller, test_mac, l2adater_standalone logs: sudo $cuBB_SDK/build/cuPHY-CP/gt_common_libs/nvlog/nvlog_collect phy # For ru-emulator: sudo $cuBB_SDK/build/cuPHY-CP/gt_common_libs/nvlog/nvlog_collect ru

For SHM IPC, if see IPC buffer pool full during testing, run below command to dump IPC status after test.

Copy
Copied!
            

# 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

The log has a file size limitation, which is configurable. If total size exceeds the limitation, the head and tail logs will be reserved while middle part will be dropped, and a NOTE will be inserted similar to below:

Copy
Copied!
            

... ... 10:44:29.753027 I [MAC.SCF] <<< SCF_FAPI_CRC_INDICATION: MAC sfn=498 slot=4 =============================================================================== NOTE: 80.0 MB logs were lost. total_saved=0x15000000 curr_offset=0x6000000 =============================================================================== at 1646909075389529735 Task duration 434 us Exec time in -169 us 10:44:35.389977 W [SCF.PHY] BCH PDU missing in expected DL_TTI. ... ...


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:

Copy
Copied!
            

# 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:

Copy
Copied!
            

# 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

Copy
Copied!
            

# 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:

Copy
Copied!
            

# 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):

Copy
Copied!
            

compression_bits: 9 decompression_bits: 9

The throughput levels should be the same as non-mixed case with only BFP 14.

Copy
Copied!
            

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:

Copy
Copied!
            

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:

Copy
Copied!
            

sudo ${cuBB_SDK}/build/cuPHY-CP/gt_common_libs/nvlog/nvlog_collect phy python3 ${cuBB_SDK}/cuPHY-CP/aerial-fh-driver/scripts/phy_latencies/phy_latencies.py ${cuBB_SDK}/build/cuPHY-CP/gt_common_libs/nvlog/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.

Copy
Copied!
            

pusch_sinr: 1 # 0 - Disabled; 1 - PostEq value; 2 - PreEq value pusch_rssi: 1 pusch_tdi: 1 pusch_cfo: 1

Note

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 -DMULTI_BIT_SR_SUPPORT=ON in 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:

    Copy
    Copied!
                

    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:

Copy
Copied!
            

pf_234_interference: 1 pnMeasurement: 1

Enable DEBUG level log for tag SCF.PHY as below in the cuPHY-CP/gt_common_libs/nvlog/config/nvlog_config.yaml file:

Copy
Copied!
            

- 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:

Copy
Copied!
            

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.

Copy
Copied!
            

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.

Copy
Copied!
            

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

Copy
Copied!
            

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.

Copy
Copied!
            

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.

Copy
Copied!
            

% 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

Copy
Copied!
            

[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

Copy
Copied!
            

prach_interference: 1

Run nrSim 5013 test

Copy
Copied!
            

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:

Copy
Copied!
            

# 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:

Copy
Copied!
            

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:

Copy
Copied!
            

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

Copy
Copied!
            

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:

Copy
Copied!
            

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:

Copy
Copied!
            

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:

Copy
Copied!
            

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 and replacing the RU while cells are running. An M-plane gRPC update message always contains 3 parameters: Destination MAC address, VLAN ID, PCP for the same RU. They can be updated separately or together.

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 sends CONFIG.request to configure the cell.

    Note

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

    Note

    In the current implementation, the cell Config.request after the first cell Start.request has no effect.

m-plane-grpc-sequence-diagram.png

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

Copy
Copied!
            

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.

Copy
Copied!
            

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.

Copy
Copied!
            

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

Copy
Copied!
            

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.

Copy
Copied!
            

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.

Copy
Copied!
            

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:

Copy
Copied!
            

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

Copy
Copied!
            

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.

Copy
Copied!
            

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

Copy
Copied!
            

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

Copy
Copied!
            

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

Copy
Copied!
            

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.

Copy
Copied!
            

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

Copy
Copied!
            

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

Copy
Copied!
            

- 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):

Copy
Copied!
            

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.

Copy
Copied!
            

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)

Copy
Copied!
            

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)

Copy
Copied!
            

- 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):

Copy
Copied!
            

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.

Copy
Copied!
            

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)

Copy
Copied!
            

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)

Copy
Copied!
            

- 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):

Copy
Copied!
            

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.

dynamic_multi_cell_dst_mac_vlan_pcp_oam_update_with_cell_ctrl_cmd.png

Configuration update:

Copy
Copied!
            

# 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

Note

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):

Copy
Copied!
            

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)

Copy
Copied!
            

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)

Copy
Copied!
            

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):

dynamic_oam_result_1.png

STOP.req sent to all cells (Executed on DU server)

Copy
Copied!
            

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)

Copy
Copied!
            

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)

Copy
Copied!
            

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):

dynamic_oam_result_2.png

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.

dynamic_prach_sequence.png

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:

Copy
Copied!
            

# 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

Copy
Copied!
            

cell_group: 1 cell_group_num: n fix_beta_dl: 0

For example, for 8C -

Copy
Copied!
            

cell_group: 1 cell_group_num: 8 fix_beta_dl: 0

Update flow lists on both cuphycontroller and ru-emulator config:

Copy
Copied!
            

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:

Copy
Copied!
            

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

Copy
Copied!
            

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:

Copy
Copied!
            

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:

Copy
Copied!
            

# 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

Copy
Copied!
            

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.

Copy
Copied!
            

# 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):

Copy
Copied!
            

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:

Copy
Copied!
            

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:

Copy
Copied!
            

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:

Copy
Copied!
            

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:

Copy
Copied!
            

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:

Copy
Copied!
            

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

An nvlog_observer app is implemented to print the nvlog logging outputs to stdout. This app can run in a separate docker container.

Note

The below options should be added when starting the docker container. The /var/log/aerial folder is used to store the temporary log files generated by cuBB apps.

Copy
Copied!
            

--userns=host --ipc=host -v /var/log/aerial:/var/log/aerial

The steps below use the cuphycontroller and test_mac as an example for logging to a rotating file and stdout of a separate container.

Case 1: Run cuphycontroller First

Set nvlog_observer: 0 in the cuPHY-CP/gt_common_libs/nvlog /config/nvlog_config.yaml file. This is the default configuration:

Copy
Copied!
            

nvlog_config.yaml # Wheter to run nvlog_observer as primary nvlog_observer: 0

  1. Start two containers using these options: --userns=host --ipc=host -v /var/log/aerial:/var/log/aerial

  2. Run cuphycontroller in one container.

  3. Run sudo $cuBB_SDK/build/cuPHY-CP/gt_common_libs/nvlog/nvlog_observer > obsv.log in another container.

  4. Run test_mac in either container.

  5. Stop cuphycontroller and test_mac before the total log size exceeds the max rotating file size limitation.

  6. Stop nvlog_observer last.

  7. Run sudo $cuBB_SDK/build/cuPHY-CP/gt_common_libs/nvlog//nvlog_collect phy to collect the phy.log file.

Case 2: Run nvlog_observer First

Set nvlog_observer: 1 in the cuPHY-CP/gt_common_libs/nvlog/config/nvlog_config.yaml file.

Copy
Copied!
            

nvlog_config.yaml # Wheter to run nvlog_observer as primary nvlog_observer: 1

  1. Start two containers with the following options --userns=host --ipc=host -v /var/log/aerial:/var/log/aerial

  2. Run sudo ./nvlog_observer > obsv.log in one container.

  3. Run cuphycontroller in another container.

  4. Run test_mac in either container.

  5. Stop cuphycontroller and test_mac before the total log size exceeds the max rotating file size limitation.

  6. Stop nvlog_observer last.

  7. Run sudo ./nvlog_collect phy to collect the`` phy.log`` file.

Expected result

Compare phy.log and obsv.log. You can see they are the same size and have the same md5sum.

Copy
Copied!
            

md5sum obsv.log phy.log cd26ef3a0a9a496cb397395e5f1ca1d9 obsv.log cd26ef3a0a9a496cb397395e5f1ca1d9 phy.log

Note

If the total log size exceeds the limitation, phy.log will have dropped logs and obsv.log will have a larger size. In this case, you should see a “NOTE” in phy.log.


Previous Running the cuPHY SDK
Next cuBB on NVIDIA Cloud Native Stack
© Copyright 2022, NVIDIA.. Last updated on Apr 20, 2024.