Installing Tools
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.
Install the GPU card and CX6-DX NIC.
Connect the CX6-DX port 0 on both servers using a 100GbE cable.
Connect the Internet port to the local network.
Change the following system BIOS settings to improve network performance:
Set the Power Policy to Best Performance.
Disable HyperThreading. Ensure you have performed Step 1 above before doing this step.
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:
$ 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:
$ lscpu
Verify that hyperthreading is disabled:
# Thread(s) per core: 1
Verify that CPUs are in Performance mode:
# 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”:
$ 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”:
# 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:
$ 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:
$ 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.
$ sudo apt-get install -y linux-image-5.4.0-65-lowlatency
Then, update the grub to change the default boot kernel:
# 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.
$ 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:
$ 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.
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.
$ sudo update-grub
$ sudo reboot
After rebooting, enter the following command to check whether the system has booted into the low-latency kernel:
$ uname -r
5.4.0-65-lowlatency
Enter this command to check that the kernel command-line parameters are configured properly:
$ 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:
$ 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:
$ sudo apt-get update
$ sudo apt-get install -y build-essential linux-headers-$(uname -r) dkms unzip linuxptp
Enter this command to install Docker:
# 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:
$ 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
$ 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:
$ 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:
# 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”)
Enter these commands to configure PTP4L assuming the ens6f0
NIC interface and CPU core 20 are used for PTP:
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:
$ 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:
$ 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:
$ 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:
# 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:
$ 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
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