The above versions are tested versions, you are free to try on newer versions as well.
You can use another UE platform with GPU as well but it is preferred to use unified memory GPU variant.
### KPIs
The below throughput numbers are similar for TCP/UDP, the gNB was configured for 5 ms TDD pattern (6D3U and Special slot 10D0U) for Nvidia Aerial Testbed.
The UE was in SISO mode.
Testbed Architecture:
UE <--> Over the Air 1.5m to 2m distance <--> WNC RU <--> gNB/DU server
| Platform | Radio | Bandwidth | DL Throughput | UL Throughput |
Stability or long running test with peak throughput for nrUE was performed for 5hrs.
All the numbers are with LDPC GPU offload.
`NOTE`: At the time of writing we only tested the UE in SISO.
We are working supporting multi antenna use case.
## Aerial Testbed Configuration
If you are using aerial testbed with OAI then depending on the bandwidth you want to use, you will have to adapt the value of `ds_offset_dl` in cuphycontroller configuration file.
For our testing environment we adapted the `ds_offset_dl` values as below:
| Bandwidth | ds_offset_dl |
| ----------- | -------------|
| 10 MHz | 14 |
| 20 MHz | 12 |
| 30 MHz | 10 |
| 40 MHz | 9 |
| 100 MHz | 6 |
On the WNC radio we have the below configuration:
```
transmit-power 24
transmit-power-scale 0.0
compress tx static bfp iq-bitwidth 9
compress rx static bfp iq-bitwidth 9
compress prach static bfp iq-bitwidth 9
```
You can adjust the scaling on the RU or you can adjust it in aerial configuration file.
**NOTE**: You might have to adjust these values for your environment, so that the UE can detect the cell and perform random-access.
## Configure the nrUE Hardware Platform
### Configure Jetson AGX Orin
At the time of writing this tutorial AGX Orin only had Jetpack 6.X release which has U22/5.15.148-tegra, for GPU offload on ARM systems it is preferred to use 64K page size kernel.
To change the kernel to 64K page size variant you will have to manually build the kernel. Probably for Jetpack 7.X it will be easier. Before building the kernel make sure AGX Orin has the up to date kernel for your current distribution.
NVIDIA-SMI Version: 540.4.0
CUDA Version: 12.6
CPU: Cortex-A78AE (12)
OS: U22
Kernel: 5.15.148-tegra
NVCC: Build cuda_12.6.r12.6/compiler.34714021_0
UHD: UHD_4.9.0.HEAD-0-g006d7f76 (v4.9.0.0)
#### Update kernel to 64K page size
Login to Jetson AGX Orin
```bash
sudo apt update
sudo apt upgrade
# reboot
```
**CAUTION**: While building the kernel if you make a mistake you have to flash again the Jetson. We are just providing these steps to help you build the kernel with 64K page size. If you have questions or issues building the kernel you can check the [official nvidia documentation](https://docs.nvidia.com/jetson/archives/r36.4.4/DeveloperGuide/SD/Kernel/KernelCustomization.html#sd-kernel-kernelcustomization)
Create a UE configuration file based on the PLMN, slicing information, DNN and DNN type you have configured for the UE in the core network.
```bash
cd ~/oai-nr-ue/
# touch nr-ue.conf
```
Sample UE configuration file, you can use the below configuration file and adjust the values as per your testing environment:
```bash
cat nr-ue.conf
uicc0 ={
imsi ="001010000000001";
key ="fec86ba6eb707ed08905757b1bb44b8f";
opc="C42449363BBAD02B66D16BC975D77CC1";
pdu_sessions =({ dnn ="oai"; nssai_sst = 1;});
}
```
To start the `nr-uesoftmodem` you would need to know the center frequency, bandwidth, band and ssb. This information is printed in the OAI-gNB logs. You can search for the line `[NR_MAC] Command line parameters for OAI UE` for example:
```bash
[NR_MAC] Command line parameters for OAI UE: -C 3350010000 -r 106 --numerology 1 --band 78 --ssb 513
```
Once you have this information you can start the `nr-uesoftmodem` process:
**Command for Jetson AGX Orin**:
**MANDATORY**: Before starting the UE process it is important to configure the gNB configuration file with `min_rxtxtime` as 6 or higher integer value.
**MANDATORY**: Before starting the UE process it is important to configure the gNB configuration file with `min_rxtxtime` as 6 or higher integer value.
In the above command task-set allows running the UE only on the performance cores.
Understand the command which you just used:
The main RF/cell settings are:
-`-O`: load the UE config file.
-`-C 3900000000`: set DL carrier to 3.9 GHz.
-`-r 106`: use 106 PRBs
-`--numerology 1`: numerology 1, meaning 30 kHz subcarrier spacing.
-`--band 77`: NR band n77.
-`--ssb 516`: expect the SSB to start at sub-carrier 516.
-`--ue-fo-compensation`: enable initial frequency-offset compensation, useful OTA when clocks are not perfectly aligned.
-`--usrp-tx-thread-config 1`: enable an extra USRP TX processing thread
-`-E`: enable threequarter_fs, meaning the UE uses three-quarter sampling rate mode. In OAI this reduces sample rate / transport load where supported.
The parallelism/offload settings are:
-`--thread-pool -1`: create a thread-pool worker with no CPU affinity.
-`--num-dl-actors 6`: use 6 DL actor threads, parallel RX/PDSCH processing workers.
-`--num-ul-actors 2`: use 2 UL actor threads, parallel TX/PUSCH/PUCCH preparation and transmit workers.
-`--loader.ldpc.shlibversion_cuda`: load the CUDA-backed LDPC shared library variant.
-`--use_gpu 1`: enable GPU offload in the PHY/LDPC path, if you want to disable it and use just CPU then replace 1 with 0.
When the UE starts it starts with highest gains, but sometimes you would need to adjust the tx/rx gains based on the UEs position from the RU/gNB. To manipulate the gains you can use the below options:
-`--ue-rxgain x`: set UE RX gain.
-`--ue-txgain x`: set UE TX gain.
-`-A 50`: apply a command-line sample advance of 50 samples to compensate RF timing offset.
Once the UE connects you will see the tunnel interface `oaitun_ue1` with ip-address in the subnet which is configured at SMF. You can open another terminal and from there you can do traffic test.
## Using nrUE with X3XX/N3XX/x4XX
### Build OAI-nrUE
For Ethernet based USRPs it is recommended to use DPDK mostly when you want to test for 60-100 MHz bandwidth. If you don't want to use DPDK then you can build the `nr-uesoftmodem` using the previous section.
The ip-address 192.168.80.25/24 is the UHD host ip-address. Make sure you adjust the `dpdk_driver` location.
### Start the nrUE process
Create a UE configuration file based on the PLMN, slicing information, DNN and DNN type you have configured for the UE in the core network. It is similar to previous section.
DPDK deployment have some issues currently and we need to reload the pci interface before every run. The devlink command `sudo devlink dev reload pci/<HOST_PCI_ADDR>` is doing that.
If you need to adjust the tx/rx gains then you will need to take the parameters from previous section.