Installing Tools

Aerial SDK 22-4

This chapter describes how to install the required kernel, driver, and tools on the host. This is a one-time installation and can be skipped if the system has been configured already.

  • In the following sequence of steps, we assume the target host is the Aerial Devkit.

  • Depending on the release, tools that are installed in this section may need to be upgraded in the Installing and Upgrading cuBB SDK section.

  • Once everything is installed and updated, refer to the cuBB Quick Start Guide on how to use the cuBB SDK.

  1. Install the GPU card and CX6-DX NIC.

  2. Connect the CX6-DX port 0 on both servers using a 100GbE cable.

  3. Connect the Internet port to the local network.

Change the following system BIOS settings to improve network performance:

  1. Set the Power Policy to Best Performance.

  2. Disable HyperThreading. Ensure you have performed Step 1 above before doing this step.

  3. Save the BIOS settings, and then reboot the system.

After installing Ubuntu 20.04 Server, please check the following:

  • Check if the system time is correct to avoid apt update error. If not, see How to fix system time.

  • Check if the LVM volume uses the whole disk space. If not, see How to resize LVM volume.

  • Check if the GPU and NIC are detected by the OS:

Enter the following commands to check if the GPU and NIC are detected by the OS:

Copy
Copied!
            

$ lspci |grep -i nvidia # If the system has A100 40G GPU installed b6:00.0 3D controller: NVIDIA Corporation Device 20f1 (rev a1) # If the system has A100 80G GPU installed b6:00.0 3D controller: NVIDIA Corporation Device 20b5 (rev a1) # If the system has A100X GPU installed bb:00.0 3D controller: NVIDIA Corporation Device 20b8 (rev a1) $ lspci |grep -i mellanox b5:00.0 Ethernet controller: Mellanox Technologies MT2892 Family [ConnectX-6 Dx] b5:00.1 Ethernet controller: Mellanox Technologies MT2892 Family [ConnectX-6 Dx]

Run the following command to verify that the BIOS setting update took effect:

Copy
Copied!
            

$ lscpu

Verify that hyperthreading is disabled:

Copy
Copied!
            

# Thread(s) per core:  1

Verify that CPUs are in Performance mode:

Copy
Copied!
            

# CPU MHz:             3199.999 # CPU max MHz:         4000.0000

The following installation steps need an Internet connection. Ensure that you have the proper netplan config for your local network.

Note that the network interface names could change after reboot. To ensure persistent network interface names after reboot, add “match macaddress” in the netplan YAML file. To find the macaddresses of the CX6-DX NIC, run the ip a command, then look for the MAC address that starts with “b8:ce:f6”:

Copy
Copied!
            

$ ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 18:c0:4d:79:49:b6 brd ff:ff:ff:ff:ff:ff inet 192.168.1.100/24 brd 192.168.1.1 scope global eno1 valid_lft forever preferred_lft forever inet6 fe80::1ac0:4dff:fe79:49b6/64 scope link valid_lft forever preferred_lft forever 3: enp6s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000 link/ether 18:c0:4d:79:49:b7 brd ff:ff:ff:ff:ff:ff 13: ens6f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether b8:ce:f6:33:fd:ee brd ff:ff:ff:ff:ff:ff inet6 fe80::bace:f6ff:fe33:fdee/64 scope link valid_lft forever preferred_lft forever 14: ens6f1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether b8:ce:f6:33:fd:ef brd ff:ff:ff:ff:ff:ff inet6 fe80::bace:f6ff:fe33:fdef/64 scope link valid_lft forever preferred_lft forever

Then edit the netplan YAML file, /etc/netplan/00-installer-config.yaml, to add the “match macaddress” and “set-name”:

Copy
Copied!
            

# Change the macaddress below to the actual macadress of CX6-DX NIC. $ sudo nano /etc/netplan/00-installer-config.yaml network: ethernets: eno1: dhcp4: true enp6s0: dhcp4: true ens6f0: dhcp4: true match: macaddress: b8:ce:f6:33:fd:ee set-name: ens6f0 ens6f1: dhcp4: true match: macaddress: b8:ce:f6:33:fd:ef set-name: ens6f1 version: 2

To apply the change:

Copy
Copied!
            

$ sudo netplan apply

If the low latency kernel is not installed, you should remove the old kernels and keep only the latest generic kernel. Enter the following command to list the installed kernels:

Copy
Copied!
            

$ dpkg --list | grep -i 'linux-image' | awk '/ii/{ print $2}' # To remove old kernel $ sudo apt-get purge linux-image-<old kernel version> $ sudo apt-get autoremove

Next, install the low-latency kernel with the specific version listed in the releasee manifest.

Copy
Copied!
            

$ sudo apt-get install -y linux-image-5.4.0-65-lowlatency

Then, update the grub to change the default boot kernel:

Copy
Copied!
            

# Find the boot kernel index(Index start from 0) $ linenum=$(grep menuentry /boot/grub/grub.cfg | grep $'\t' | grep -n "5.4.0-65-lowlatency'" | cut -d: -f1) $ linenum="$(($linenum-1))" $ echo $linenum # Update grub to change the default boot kernel # sudo nano /etc/default/grub # Set the grub_default to specific kernel, e.g GRUB_DEFAULT="1>N" N is # the $linenum from above. $ sudo sed -i 's/^GRUB_DEFAULT="[^"]*/&1>'$linenum'/' /etc/default/grub $ sudo grub-mkconfig -o /boot/grub/grub.cfg $ sudo reboot

Edit the /etc/apt/apt.conf.d/20auto-upgrades system file, and change the “1” to “0” for both lines. This is so the installed version of the low latency kernel not be accidentally changed with a subsequent software upgrade.

Copy
Copied!
            

$ sudo nano /etc/apt/apt.conf.d/20auto-upgrades APT::Periodic::Update-Package-Lists "0"; APT::Periodic::Unattended-Upgrade "0";

To set kernel command-line parameters, edit the GRUB_CMDLINE_LINUX_DEFAULT parameter in the grub file /etc/default/grub and append/update the parameters described below. The following kernel parameters are optimized for Aerial DevKit with 24 cores Xeon Gold 6240R and 96GB memory.

To automatically append the grub file with these changes, enter this command:

Copy
Copied!
            

$ sudo sed -i 's/^GRUB_CMDLINE_LINUX_DEFAULT="[^"]*/& default_hugepagesz=1G hugepagesz=1G hugepages=16 tsc=reliable clocksource=tsc intel_idle.max_cstate=0 mce=ignore_ce processor.max_cstate=0 intel_pstate=disable audit=0 idle=poll isolcpus=2-21 nohz_full=2-21 rcu_nocbs=2-21 rcu_nocb_poll nosoftlockup iommu=off intel_iommu=off irqaffinity=0-1,22-23/' /etc/default/grub

Note that the CPU-cores-related parameters need to be adjusted depending on the number of CPU cores on the system. In the example above, the “2-21” value represents CPU core numbers 2 to 21; you may need to adjust this parameter depending on the HW configuration. By default,only one DPDK thread is used. The isolated CPUs are used by the entire cuBB software stack. Use the nproc --all command to see how many cores are available. Do not use core numbers that are beyond the number of available cores.

Warning

These instructions are specific to Ubuntu 20.04 with a 5.4.0-65-lowlatency kernel provided by Canonical. Please make sure the kernel commands provided here are suitable for your OS and kernel versions and revise these settings to match your system if necessary.

Copy
Copied!
            

$ sudo update-grub $ sudo reboot

After rebooting, enter the following command to check whether the system has booted into the low-latency kernel:

Copy
Copied!
            

$ uname -r 5.4.0-65-lowlatency

Enter this command to check that the kernel command-line parameters are configured properly:

Copy
Copied!
            

$ cat /proc/cmdline BOOT_IMAGE=/vmlinuz-5.4.0-65-lowlatency root=/dev/mapper/ubuntu--vg-ubuntu--lv ro default_hugepagesz=1G hugepagesz=1G hugepages=16 tsc=reliable clocksource=tsc intel_idle.max_cstate=0 mce=ignore_ce processor.max_cstate=0 intel_pstate=disable audit=0 idle=poll isolcpus=2-21 nohz_full=2-21 rcu_nocbs=2-21 rcu_nocb_poll nosoftlockup iommu=off intel_iommu=off irqaffinity=0-1,22-23

Enter this command to check if hugepages are enabled:

Copy
Copied!
            

$ grep -i huge /proc/meminfo AnonHugePages: 0 kB ShmemHugePages: 0 kB FileHugePages: 0 kB HugePages_Total: 16 HugePages_Free: 16 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 1048576 kB Hugetlb: 16777216 kB

Enter these commands to install prerequisite packages:

Copy
Copied!
            

$ sudo apt-get update $ sudo apt-get install -y build-essential linux-headers-$(uname -r) dkms unzip linuxptp

Enter this command to install Docker:

Copy
Copied!
            

# Install packages to allow apt to use a repository over HTTPS $ sudo apt-get install -y \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ software-properties-common # Add the official Docker GPG key $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - # Verify that you now have the key with the fingerprint 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 by searching for the last 8 characters of the fingerprint $ sudo apt-key fingerprint 0EBFCD88 pub rsa4096 2017-02-22 [SCEA] 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 uid [ unknown] Docker Release (CE deb) <docker@docker.com> sub rsa4096 2017-02-22 [S] # Use the following command to set up the stable repository $ sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs)\ stable" # Install Docker Engine 19.03.13 $ sudo apt-get update $ sudo apt-get install -y docker-ce=5:19.03.13~3-0~ubuntu-focal docker-ce-cli=5:19.03.13~3-0~ubuntu-focal containerd.io $ sudo apt-mark hold docker-ce docker-ce-cli containerd.io # Verify that Docker Engine - Community is installed correctly by running the hello-world image $ sudo docker run hello-world

If you don’t want to preface the docker command with sudo, please see https://docs.docker.com/engine/install/linux-postinstall.

Enter these commands to install the NVIDIA container toolkit:

Copy
Copied!
            

$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \ && curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \ && curl -s -L https://nvidia.github.io/libnvidia-container/experimental\ /$distribution/libnvidia-container.list | \ sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \ sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list $ sudo apt-get update $ sudo apt-get install -y nvidia-docker2 $ sudo systemctl restart docker

This section describes how to install the Mellanox Firmware Tool, which is a set of firmware management tools. This tool will be used in a later step for updating the firmware image and for configuring NIC settings. It consists of mst, mlxburn, flint, and debug utilities.

The following commands download and install the Mellanox Firmware Tools (MFT) package from this URL: https://www.mellanox.com/products/adapter-software/firmware-tools

Copy
Copied!
            

$ export MFT_VERSION=4.21.0-99 $ wget https://www.mellanox.com/downloads/MFT/mft-$MFT_VERSION-x86_64-deb.tgz $ tar xvf mft-$MFT_VERSION-x86_64-deb.tgz $ cd mft-$MFT_VERSION-x86_64-deb $ sudo ./install.sh $ sudo mst start # check NIC PCIe bus addresses and network interface names $ sudo mst status -v MST modules: ------------ MST PCI module is not loaded MST PCI configuration module loaded PCI devices: ------------ DEVICE_TYPE MST PCI RDMA NET NUMA ConnectX6DX(rev:0) /dev/mst/mt4125_pciconf0.1 b5:00.1 net-ens6f1 0 ConnectX6DX(rev:0) /dev/mst/mt4125_pciconf0 b5:00.0 net-ens6f0 0

Set the above PCIe bus addresses and network interface names in the bashrc:

Copy
Copied!
            

$ echo "export MLX0PCIEADDR=b5:00.0" | tee -a ~/.bashrc $ echo "export MLX0IFNAME=ens6f0" | tee -a ~/.bashrc $ echo "export MLX1PCIEADDR=b5:00.1" | tee -a ~/.bashrc $ echo "export MLX1IFNAME=ens6f1" | tee -a ~/.bashrc $ source ~/.bashrc

Enter these commands to check the link status of port 0:

Copy
Copied!
            

# Here is an example if port 0 is connected to another server via a # 100GbE cable. $ sudo mlxlink -d $MLX0PCIEADDR Operational Info ---------------- State : Active Physical state : LinkUp Speed : 100G Width : 4x FEC : Standard RS-FEC - RS(528,514) Loopback Mode : No Loopback Auto Negotiation : ON Supported Info -------------- Enabled Link Speed (Ext.) : 0x000007f2 (100G_2X,100G_4X,50G_1X,50G_2X,40G,25G,10G,1G) Supported Cable Speed (Ext.) : 0x000002f2 (100G_4X,50G_2X,40G,25G,10G,1G) Troubleshooting Info -------------------- Status Opcode : 0 Group Opcode : N/A Recommendation : No issue was observed.

Follow the link below to configure the RShim driver, which you can use from the host system to communicate with the BF2 DPU through Ethernet. (Note that the RShim driver is installed with MOFED using option “–with-rshim”)

Ensure RShim is running on host

Enter these commands to configure PTP4L assuming the ens6f0 NIC interface and CPU core 20 are used for PTP:

Copy
Copied!
            

cat <<EOF | sudo tee /etc/ptp.conf [global] priority1 128 priority2 128 domainNumber 24 tx_timestamp_timeout 30 dscp_event 46 dscp_general 46 logging_level 6 verbose 1 use_syslog 0 logMinDelayReqInterval 1 [ens6f0] logAnnounceInterval -3 announceReceiptTimeout 3 logSyncInterval -4 logMinDelayReqInterval -4 delay_mechanism E2E network_transport L2 EOF cat <<EOF | sudo tee /lib/systemd/system/ptp4l.service [Unit] Description=Precision Time Protocol (PTP) service Documentation=man:ptp4l [Service] Restart=always RestartSec=5s Type=simple ExecStart=taskset -c 20 /usr/sbin/ptp4l -f /etc/ptp.conf [Install] WantedBy=multi-user.target EOF $ sudo systemctl daemon-reload $ sudo systemctl restart ptp4l.service $ sudo systemctl enable ptp4l.service

One server will become the master clock, as shown below:

Copy
Copied!
            

$ sudo systemctl status ptp4l.service • ptp4l.service - Precision Time Protocol (PTP) service Loaded: loaded (/lib/systemd/system/ptp4l.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2022-02-03 22:41:35 UTC; 4min 47s ago Docs: man:ptp4l Main PID: 1112 (ptp4l) Tasks: 1 (limit: 94582) Memory: 904.0K CGroup: /system.slice/ptp4l.service └─1112 /usr/sbin/ptp4l -f /etc/ptp.conf Feb 03 22:41:44 dc6-devkit-18 taskset[1112]: ptp4l[135.371]: selected local clock b8cef6.fffe.33fdee as best master Feb 03 22:41:44 dc6-devkit-18 taskset[1112]: ptp4l[135.371]: assuming the grand master role Feb 03 22:41:44 dc6-devkit-18 taskset[1112]: ptp4l[135.745]: selected local clock b8cef6.fffe.33fdee as best master Feb 03 22:41:44 dc6-devkit-18 taskset[1112]: ptp4l[135.745]: assuming the grand master role Feb 03 22:41:44 dc6-devkit-18 taskset[1112]: ptp4l[135.780]: port 1: link up Feb 03 22:41:44 dc6-devkit-18 taskset[1112]: ptp4l[135.804]: port 1: FAULTY to LISTENING on INIT_COMPLETE Feb 03 22:41:44 dc6-devkit-18 taskset[1112]: ptp4l[135.855]: port 1: new foreign master b8cef6.fffe.33fe16-1 Feb 03 22:41:44 dc6-devkit-18 taskset[1112]: ptp4l[136.105]: selected best master clock b8cef6.fffe.33fe16 Feb 03 22:41:44 dc6-devkit-18 taskset[1112]: ptp4l[136.105]: assuming the grand master role Feb 03 22:41:44 dc6-devkit-18 taskset[1112]: ptp4l[136.105]: port 1: LISTENING to GRAND_MASTER on RS_GRAND_MASTER

The other will become the secondary, follower clock, as shown below:

Copy
Copied!
            

$ sudo systemctl status ptp4l.service • ptp4l.service - Precision Time Protocol (PTP) service Loaded: loaded (/lib/systemd/system/ptp4l.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2022-02-03 22:41:12 UTC; 5min ago Docs: man:ptp4l Main PID: 1112 (ptp4l) Tasks: 1 (limit: 94582) Memory: 812.0K CGroup: /system.slice/ptp4l.service └─1112 /usr/sbin/ptp4l -f /etc/ptp.conf Feb 03 22:46:30 dc6-aerial-devkit-17 taskset[1112]: ptp4l[444.474]: rms 5 max 11 freq +2450 +/- 8 delay 259 +/- 1 Feb 03 22:46:31 dc6-aerial-devkit-17 taskset[1112]: ptp4l[445.475]: rms 5 max 12 freq +2447 +/- 9 delay 260 +/- 1 Feb 03 22:46:32 dc6-aerial-devkit-17 taskset[1112]: ptp4l[446.475]: rms 6 max 13 freq +2461 +/- 7 delay 258 +/- 0 Feb 03 22:46:33 dc6-aerial-devkit-17 taskset[1112]: ptp4l[447.475]: rms 5 max 10 freq +2457 +/- 9 delay 260 +/- 0 Feb 03 22:46:34 dc6-aerial-devkit-17 taskset[1112]: ptp4l[448.475]: rms 3 max 6 freq +2454 +/- 4 delay 261 +/- 1 Feb 03 22:46:35 dc6-aerial-devkit-17 taskset[1112]: ptp4l[449.475]: rms 4 max 7 freq +2458 +/- 6 delay 259 +/- 0 Feb 03 22:46:36 dc6-aerial-devkit-17 taskset[1112]: ptp4l[450.475]: rms 4 max 6 freq +2454 +/- 6 delay 259 +/- 1 Feb 03 22:46:37 dc6-aerial-devkit-17 taskset[1112]: ptp4l[451.475]: rms 4 max 8 freq +2452 +/- 6 delay 258 +/- 0 Feb 03 22:46:38 dc6-aerial-devkit-17 taskset[1112]: ptp4l[452.475]: rms 3 max 7 freq +2454 +/- 6 delay 258 +/- 0 Feb 03 22:46:39 dc6-aerial-devkit-17 taskset[1112]: ptp4l[453.475]: rms 6 max 14 freq +2460 +/- 9 delay 258 +/- 1

Enter the commands to turn off NTP:

Copy
Copied!
            

$ sudo timedatectl set-ntp false $ 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: no NTP service: inactive RTC in local TZ: no

Run PHC2SYS as service:

Copy
Copied!
            

# If more than one instance is already running, kill the existing # PHC2SYS sessions. # check that the service is active and has low rms value (<30): $ sudo systemctl status phc2sys.service • phc2sys.service - Synchronize system clock or PTP hardware clock (PHC) Loaded: loaded (/lib/systemd/system/phc2sys.service; disabled; vendor preset: enabled) Active: inactive (dead) Docs: man:phc2sys # If the service is already running, then you don't need to change # anything: $ sudo systemctl status phc2sys.service • phc2sys.service - Synchronize system clock or PTP hardware clock (PHC) Loaded: loaded (/lib/systemd/system/phc2sys.service; disabled; vendor preset: enabled) Active: active (running) since Fri 2021-04-30 14:28:57 UTC; 17s ago Docs: man:phc2sys Main PID: 1180983 (sh) Tasks: 2 (limit: 94582) Memory: 2.2M CGroup: /system.slice/phc2sys.service ├─1180983 /bin/sh -c /usr/sbin/phc2sys -s /dev/ptp$(ethtool -T $(lshw -c network -businfo | grep b5:00.0 | awk '{print $2}') | grep PTP | awk '{print $4}') -c CLOCK_REALTIME -n 24 -O 0 -R 256 -u 256 └─1181087 /usr/sbin/phc2sys -s /dev/ptp2 -c CLOCK_REALTIME -n 24 -O 0 -R 256 -u 256 Apr 30 14:29:05 aerial-devkit-16 phc2sys[1181087]: [53625.834] CLOCK_REALTIME rms 10 max 24 freq +35384 +/- 42 delay 1769 +/- 11 Apr 30 14:29:06 aerial-devkit-16 phc2sys[1181087]: [53626.850] CLOCK_REALTIME rms 9 max 26 freq +35355 +/- 41 delay 1774 +/- 9 Apr 30 14:29:07 aerial-devkit-16 phc2sys[1181087]: [53627.866] CLOCK_REALTIME rms 8 max 23 freq +35378 +/- 23 delay 1778 +/- 7 Apr 30 14:29:08 aerial-devkit-16 phc2sys[1181087]: [53628.881] CLOCK_REALTIME rms 9 max 22 freq +35358 +/- 26 delay 1761 +/- 13 Apr 30 14:29:09 aerial-devkit-16 phc2sys[1181087]: [53629.897] CLOCK_REALTIME rms 8 max 20 freq +35372 +/- 14 delay 1760 +/- 12 Apr 30 14:29:10 aerial-devkit-16 phc2sys[1181087]: [53630.913] CLOCK_REALTIME rms 9 max 25 freq +35374 +/- 15 delay 1764 +/- 12 Apr 30 14:29:11 aerial-devkit-16 phc2sys[1181087]: [53631.929] CLOCK_REALTIME rms 9 max 21 freq +35371 +/- 21 delay 1759 +/- 8 Apr 30 14:29:12 aerial-devkit-16 phc2sys[1181087]: [53632.945] CLOCK_REALTIME rms 9 max 23 freq +35364 +/- 22 delay 1760 +/- 9 Apr 30 14:29:13 aerial-devkit-16 phc2sys[1181087]: [53633.961] CLOCK_REALTIME rms 9 max 23 freq +35373 +/- 16 delay 1756 +/- 9 Apr 30 14:29:14 aerial-devkit-16 phc2sys[1181087]: [53634.976] CLOCK_REALTIME rms 10 max 24 freq +35354 +/- 33 delay 1757 +/- 9 # Command used can be found in /lib/systemd/system/phc2sys.service # Update the ExecStart line to the following, assuming ens6f0 interface is used. $ sudo nano /lib/systemd/system/phc2sys.service [Unit] Description=Synchronize system clock or PTP hardware clock (PHC) Documentation=man:phc2sys After=ntpdate.service Requires=ptp4l.service After=ptp4l.service [Service] Restart=always RestartSec=5s Type=simple ExecStart=/bin/sh -c "/usr/sbin/phc2sys -s /dev/ptp$(ethtool -T ens6f0 | grep PTP | awk '{print $4}')-c CLOCK_REALTIME -n 24 -O 0 -R 256 -u 256" [Install] WantedBy=multi-user.target # Once that file is changed, run the following: $ sudo systemctl daemon-reload $ sudo systemctl restart phc2sys.service # Set to start automatically on reboot $ sudo systemctl enable phc2sys.service $ sudo systemctl status phc2sys.service • phc2sys.service - Synchronize system clock or PTP hardware clock (PHC) Loaded: loaded (/lib/systemd/system/phc2sys.service; disabled; vendor preset: enabled) Active: active (running) since Fri 2021-04-30 14:28:57 UTC; 17s ago Docs: man:phc2sys Main PID: 1180983 (sh) Tasks: 2 (limit: 94582) Memory: 2.2M CGroup: /system.slice/phc2sys.service ├─1180983 /bin/sh -c /usr/sbin/phc2sys -s /dev/ptp$(ethtool -T $(lshw -c network -businfo | grep b5:00.0 | awk '{print $2}') | grep PTP | awk '{print $4}') -c CLOCK_REALTIME -n 24 -O 0 -R 256 -u 256 └─1181087 /usr/sbin/phc2sys -s /dev/ptp2 -c CLOCK_REALTIME -n 24 -O 0 -R 256 -u 256 Apr 30 14:29:05 aerial-devkit-16 phc2sys[1181087]: [53625.834] CLOCK_REALTIME rms 10 max 24 freq +35384 +/- 42 delay 1769 +/- 11 Apr 30 14:29:06 aerial-devkit-16 phc2sys[1181087]: [53626.850] CLOCK_REALTIME rms 9 max 26 freq +35355 +/- 41 delay 1774 +/- 9 Apr 30 14:29:07 aerial-devkit-16 phc2sys[1181087]: [53627.866] CLOCK_REALTIME rms 8 max 23 freq +35378 +/- 23 delay 1778 +/- 7 Apr 30 14:29:08 aerial-devkit-16 phc2sys[1181087]: [53628.881] CLOCK_REALTIME rms 9 max 22 freq +35358 +/- 26 delay 1761 +/- 13 Apr 30 14:29:09 aerial-devkit-16 phc2sys[1181087]: [53629.897] CLOCK_REALTIME rms 8 max 20 freq +35372 +/- 14 delay 1760 +/- 12 Apr 30 14:29:10 aerial-devkit-16 phc2sys[1181087]: [53630.913] CLOCK_REALTIME rms 9 max 25 freq +35374 +/- 15 delay 1764 +/- 12 Apr 30 14:29:11 aerial-devkit-16 phc2sys[1181087]: [53631.929] CLOCK_REALTIME rms 9 max 21 freq +35371 +/- 21 delay 1759 +/- 8 Apr 30 14:29:12 aerial-devkit-16 phc2sys[1181087]: [53632.945] CLOCK_REALTIME rms 9 max 23 freq +35364 +/- 22 delay 1760 +/- 9 Apr 30 14:29:13 aerial-devkit-16 phc2sys[1181087]: [53633.961] CLOCK_REALTIME rms 9 max 23 freq +35373 +/- 16 delay 1756 +/- 9 Apr 30 14:29:14 aerial-devkit-16 phc2sys[1181087]: [53634.976] CLOCK_REALTIME rms 10 max 24 freq +35354 +/- 33 delay 1757 +/- 9

Verify if the system clock is synchronized:

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

Note

This step is optional. Matlab is not required to generate TV files if using Aerial Python mcore module. See Generating TV and Launch Pattern Files section in cuBB Quick Start Guide.

Refer to https://www.mathworks.com/downloads/ for downloading and installing Matlab. Follow the established IT process for the license and installation at your site.

Matlab is used to run the test-vector generator script. This can be run on any machine that has a graphical display and a graphical UI capable operating system that Matlab supports. The generated test-vector files can then be copied to the cuBB server.

If you would like to run the test-vector generator Matlab script on the same Ubuntu server machine that runs cuBB, then Matlab should be run in console mode matlab -nosplash -nodesktop.

The following Matlab components are required:

  • Matlab 2020b or later

  • Matlab licenses:

    • MATLAB

    • Communications Toolbox

    • DSP System Toolbox

    • Signal Processing Toolbox

    • Fixed-Point Designer (optional)

      • Call half function to accelerate testing/simulation

      • Can be disabled by setting SimCtrl.fp16AlgoSel = 1

    • Parallel Computing Toolbox (optional)

      • Accelerate testing/simulation automatically

    • 5G Toolbox

      • Not required for TV generation (can be disabled by setting Chan.use5Gtoolbox = 0 in /nr_matlab/config/cfgChan.m)

      • Required for waveform compliance test and performance simulation

Previous System Requirements
Next Installing and Upgrading cuBB SDK
© Copyright 2022, NVIDIA.. Last updated on Apr 20, 2024.