Update instructions for TSN

Updated instructions where possible and added detailed instructions where missing

Story: 2006746
Task: 40368

Change-Id: Ic83b30273be31b3a51d1c60b12f46cb90bf20c64
Signed-off-by: Mihail-Laurentiu Trica <mihail-laurentiu.trica@intel.com>
This commit is contained in:
Mihail-Laurentiu Trica 2020-07-13 13:48:55 +02:00
parent 965e7aebe6
commit 76ed91f817

View File

@ -44,7 +44,7 @@ hardware virtualization technology as a second layer of defense.
Build a Linux kernel with TSN support for Kata Containers
---------------------------------------------------------
As of writing this article, the latest Kata release is Kata 1.11.0-rc0. This
As of writing this article, the latest Kata release is Kata 1.11.0. This
release includes a Linux 5.4.32 kernel image with Kata patches. Though the
kernel version is high enough, TSN features are not fully enabled in the kernel
build, so you must build a customized kernel image. The following steps describe
@ -150,21 +150,81 @@ TSN capability and four hosts.
userguide_pcie-0400-tsn_v0.13.pdf?product=151637>`_
for detailed configuration options.
#. The hosts were four
#. Check the Kontron documentation about the kernel drivers that are provided.
The TSN switch has to run the recommended OS (the OS for which there are Kontron drivers).
The TSN switch must run a RT kernel too. The Kontron card has drivers for kernel 4.9.11
as of ``kontron-tsn-starter-kit-r6`` driver package.
#. After installing the required OS that matches the version of the drivers for the Kontron card
you must install the packages recommended in the Kontron manual. After properly installing
the drivers for the Kontron card there should be 7 new Ethernet interfaces.
These network interfaces have to be configured to use ``network`` and not ``NetworkManager``.
Use the configuration files listed below. Besides the 7 interfaces belonging to the Kontron card,
the main network interface should also be configured (listed here as ``eth0``).
::
sudo systemctl stop NetworkManager
sudo systemctl disable NetworkManager
sudo systemctl enable network
# Add the following network scripts
# /etc/sysconfig/network-scripts/ifcfg-deipce0
DEVICE=deipce0
TYPE=bridge
ONBOOT=yes
BOOTPROTO=none
ZONE=trusted
IPV6INT="no"
NM_CONTROLLED="no"
# /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
ZONE=trusted
IPV6INT="no"
NM_CONTROLLED="no"
# /etc/sysconfig/network-scripts/ifcfg-SE01
DEVICE=SE01
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
ZONE=trusted
IPV6INT="no"
NM_CONTROLLED="no"# /etc/sysconfig/network-scripts/ifcfg-CE01
# /etc/sysconfig/network-scripts/ifcfg-CE02
# /etc/sysconfig/network-scripts/ifcfg-CE03
# /etc/sysconfig/network-scripts/ifcfg-CE04
# /etc/sysconfig/network-scripts/ifcfg-IE01
# take CE01 as an example, other ports are similar
# you need to add 4 more configs for ifcfg-CE02, ifcfg-CE03, ifcfg-CE04 and ifcfg-IE01
DEVICE=CE01
TYPE=Ethernet
BRIDGE=deipce0
ONBOOT=yes
BOOTPROTO=none
ZONE=trusted
IPV6INT="no"
NM_CONTROLLED="no"
#. The hosts are four
`Intel Hades Canyon NUC <https://simplynuc.com/hades-canyon/>`_
which were equipped with two NICs each. One of the two NICs was the
which were equipped with two NICs each. One of the two NICs is the
`Intel Ethernet Controller I210 series <https://ark.intel.com/content/www/us/en/ark/products/series/64399/intel-ethernet-controller-i210-series.html>`_
which had TSN support.
which has TSN support.
* ``Node 1`` used the latest StarlingX built from the master branch which
supports Kata containers. ``Node 1`` was used as the data sender in the
tests in this guide.
tests in this guide. When installing StarlingX it is recommended that ovs-dpdk is not enabled.
Current Kata container (version 1.11.0) may have conflict with the vfio device created by dpdk.
* ``Node 2``, ``Node 3``, and ``Node 4`` were all installed with
Ubuntu 18.04. ``Node 2`` additionally installed ``LinuxPTP`` which was
used as the data receiver. ``Node 3`` and ``Node 4`` were used to
send/receive best-effort traffic to stress the TSN network.
-----------------------------------
Enable and verify TSN functionality
-----------------------------------
@ -194,8 +254,10 @@ were used to do time synchronization on the TSN network.
*Figure 2: Time synchronization topology*
#. Configure NTP servers on the TSN switch and ``Node 1 (StarlingX)`` to
synchronize their system clocks with the external clock.
#. Configure NTP servers on the TSN switch and on ``Node 1 (StarlingX)``
to synchronize their system clocks with the external clock.
A usable ``NTP server`` is a server that you can access on the network you are in.
Failure to setup a reachable NTP server can result in failure of testing TSN capability.
#. Launch ``phc2sys`` on the TSN switch to synchronize its PTP clock from its
system clock.
@ -206,6 +268,8 @@ were used to do time synchronization on the TSN network.
# by "ethtool -T <tsn_interface>".
sudo phc2sys -c /dev/ptp1 -s CLOCK_REALTIME -w -O 0 &
Use ``syslog`` whenever you want to check the status of ``phc2sys`` or ``ptp4l``.
#. Launch ``ptp4l`` on both the TSN switch and ``Node 2 (Ubuntu)`` to
synchronize their PTP clocks. The TSN switch's PTP clock was set as the
master clock by default.
@ -213,12 +277,14 @@ were used to do time synchronization on the TSN network.
::
# For TSN switch
sudo ptp4l -f /etc/ptp4l-switch.cfg
sudo ptp4l -f /etc/ptp4l-switch.cfg &
# For Node
sudo ptp4l -f /etc/ptp4l-node.cfg
# For Ubuntu node
sudo ptp4l -f /etc/ptp4l-node.cfg &
The content of ptp4l-switch.cfg is shown below.
::
# The content of ptp4l-switch.cfg is shown below.
# "gmCapable" is "1" for switch node, and "0" for all other nodes.
[global]
gmCapable 1
@ -255,7 +321,9 @@ were used to do time synchronization on the TSN network.
transportSpecific 0x1
# The content of ptp4l-node.cfg is shown below.
The content of ptp4l-node.cfg is shown below.
::
# enp5s0 is the tsn interface in the node. Please update it if per your environment.
[global]
gmCapable 0
@ -295,6 +363,18 @@ Time synchronization on the Kata Container is done later in this process.
You do not need to set up time synchronization on ``Node 3`` and ``Node 4``
since they were used to send/receive best-effort traffic in the experiment.
The ``Ubuntu node`` and the ``StarlingX container`` must be configured to have vlan interfaces.
Before setting up anything else, you must run the commands below on the ``Ubuntu node``
(the ``StarlingX container`` is configured later on in ``Case 2``):
::
# INTERFACE is the name of the I210 network card (the TSN network card)
INTERFACE=enp5s0
ip link add link $INTERFACE name ${INTERFACE}.3 type vlan id 3
ifconfig $INTERFACE up
ip link set ${INTERFACE}.3 up
*************************************************************
Step 2. Launch a Kata Container with a physical NIC passed in
*************************************************************
@ -337,6 +417,7 @@ Container by completing the following steps. More details can be found at
total 0
crw------- 1 root root 241, 0 May 18 15:38 16
crw-rw-rw- 1 root root 10, 196 May 18 15:37 vfio
# There should be only one vfio device there, the device that has been passed through.
# Edit the /usr/share/defaults/kata-containers/configuration.toml file to
# set `hotplug_vfio_on_root_bus` to true.
@ -361,11 +442,10 @@ Container by completing the following steps. More details can be found at
# 2 cpus are needed. 1 dedicated for send or receive data.
sudo docker run -it -d --runtime=kata-runtime --cpus 2 --rm --device \
/dev/vfio/16 -v /dev:/dev --privileged --name tsn \
kata_tsn_image /bin/bash
/dev/vfio/16 -v /dev:/dev --cap-add SYS_NICE --cap-add SYS_TIME --cap-add NET_ADMIN \
--name tsn kata_tsn_image /bin/bash
When completed, the I210 NIC was seen in the created container with the name
``eth1``.
When completed, the I210 NIC should be shown in the created container with the name ``eth1``.
***************************************
Step 3. Config and test TSN performance