Make install/deploy index names unique. Implemented patcheset 1 review comment. Signed-off-by: Ron Stone <ronald.stone@windriver.com> Change-Id: Idec2a9f701242f33c0e84048e109c49a5adee3ad
		
			
				
	
	
		
			483 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			483 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
=========================
 | 
						|
Time Sensitive Networking
 | 
						|
=========================
 | 
						|
 | 
						|
This guide describes how to deploy and run Time Sensitive Networking (TSN)
 | 
						|
applications on StarlingX virtual machines.
 | 
						|
 | 
						|
.. contents::
 | 
						|
   :local:
 | 
						|
   :depth: 1
 | 
						|
 | 
						|
-------------
 | 
						|
Introduction
 | 
						|
-------------
 | 
						|
 | 
						|
Embedded sectors such as automotive, industrial, professional audio/video
 | 
						|
networking, as well as blockchain and high frequency trading have emphasized the
 | 
						|
need for real-time networks. Common LAN models are based on Internet protocols
 | 
						|
and the IEEE 802 architecture, where operations are best-effort which is not
 | 
						|
suitable for edge computing use cases that require high/known/deterministic
 | 
						|
availability.
 | 
						|
 | 
						|
Time Sensitive Networking (TSN) is a set of evolving standards developed by the
 | 
						|
IEEE 802.1 Working Group to cover a group of vendor-neutral and IEEE standards
 | 
						|
with the aim of guaranteeing determinism in delivering time-sensitive traffic
 | 
						|
with low and bounded latency within an infinitesimal packet loss over the
 | 
						|
network, while allowing non time-sensitive traffic to be carried through the
 | 
						|
same network. It is also a key technology that targets the previously listed
 | 
						|
edge computing segments.
 | 
						|
 | 
						|
StarlingX (STX) is a complete cloud infrastructure software stack for the edge
 | 
						|
that provides running workloads on both virtual machine and container
 | 
						|
environments.
 | 
						|
 | 
						|
This guide shows how to deploy and run a TSN application on a STX virtual
 | 
						|
machine. It includes TSN reference applications which are taken from
 | 
						|
`TSN Reference Software for Linux`_ with a focus on 2 key use cases:
 | 
						|
 | 
						|
#. IEEE 802.1Qav or Credit Based Shaper (CBS)
 | 
						|
 | 
						|
   Ensure bounded transmission latency for time sensitive, loss-sensitive,
 | 
						|
   real-time data stream in some critical user scenarios. For instance, when
 | 
						|
   time sensitive traffic and best-effort traffic are transmitted together, users
 | 
						|
   require the bandwidth and latency of time-sensitive traffic is protected in
 | 
						|
   the midst of overloaded traffic on the same network, that is, ensure that the
 | 
						|
   time-sensitive traffic has a constant transmission rate and latency.
 | 
						|
 | 
						|
#. IEEE 802.1Qbv or Time Aware Shaper (TAS)
 | 
						|
 | 
						|
   Create a protected transmission window for scheduled traffic, which requires
 | 
						|
   low and bounded transmission latency. Scheduled traffic is the term used in
 | 
						|
   IEEE 802.1Qbv to refer to periodic traffic such as industrial automation
 | 
						|
   control frames. This type of traffic is short in frame length and requires
 | 
						|
   immediate transmission when its schedule starts.
 | 
						|
 | 
						|
-------------
 | 
						|
Requirements
 | 
						|
-------------
 | 
						|
 | 
						|
The TSN reference application has been verified on the following environments:
 | 
						|
 | 
						|
+------------+---------------------------------------------------------------+
 | 
						|
| Hardware   | - Edge cloud platform: meet STX requirements                  |
 | 
						|
|            | - Edge device: Intel Core® Processor                          |
 | 
						|
|            | - Intel® Ethernet Controller I210                             |
 | 
						|
+------------+---------------------------------------------------------------+
 | 
						|
| Software   | - Linux Kernel 4.19.04 +                                      |
 | 
						|
+------------+---------------------------------------------------------------+
 | 
						|
 | 
						|
----------------------
 | 
						|
Demo environment setup
 | 
						|
----------------------
 | 
						|
 | 
						|
The following diagram shows the setup for the demo:
 | 
						|
 | 
						|
.. figure:: ./figures/stx-tsn-demo-environment.png
 | 
						|
   :scale: 100%
 | 
						|
 | 
						|
   *Figure 1: Time Sensitive Networking demo setup*
 | 
						|
 | 
						|
The demo uses the hardware and software components listed below:
 | 
						|
 | 
						|
* **Edge cloud platform:** built based on STX All-In-One (AIO) which provides
 | 
						|
  IaaS infrastructure for edge cloud environment.
 | 
						|
 | 
						|
* **Edge device:** edge side device to generate TSN data for processing.
 | 
						|
 | 
						|
* **Intel® Ethernet Controller I210:** installed on both the edge cloud platform
 | 
						|
  node and edge device and connected by CAT-5E Ethernet cable. ``Igb.ko`` is the
 | 
						|
  corresponding Linux kernel driver which has been included in Linux.
 | 
						|
 | 
						|
* **Edge gateway:** a virtual machine created by STX. Acts as gateway to collect
 | 
						|
  TSN data, perform edge computing, and send to data center. The I210 adapter
 | 
						|
  is exposed to the edge gateway from the host node through OpenStack Nova's PCI
 | 
						|
  pass-through support.
 | 
						|
 | 
						|
* **p2p4l and phc2sys:** utilities from the LinuxPTP project to support time
 | 
						|
  synchronization over PTP.
 | 
						|
 | 
						|
* **tc:** utility/command used to configure Traffic Control in the Linux kernel.
 | 
						|
 | 
						|
* **TSN Sender/Receiver:** TSN reference application from
 | 
						|
  `TSN Reference Software for Linux`_ to send/receive TSN data for processing.
 | 
						|
 | 
						|
------------------------------
 | 
						|
Deploy TSN applications on STX
 | 
						|
------------------------------
 | 
						|
 | 
						|
*******************
 | 
						|
Edge cloud platform
 | 
						|
*******************
 | 
						|
 | 
						|
#. Install STX environment: follow the instructions from the
 | 
						|
   :ref:`Installation Guides <index-install-e083ca818006>` to install one
 | 
						|
   STX environment (for example STX AIO).
 | 
						|
 | 
						|
#. Prepare a :abbr:`VM (Virtual Machine)` image. Create image ``tsn_ubuntu_19_04.img``
 | 
						|
   based on Ubuntu 19.04 with the required binaries shown below.
 | 
						|
 | 
						|
   .. code:: sh
 | 
						|
 | 
						|
      # linuxPTP
 | 
						|
      git clone https://git.code.sf.net/p/linuxptp/code linuxptp-code
 | 
						|
      cd linuxptp-code
 | 
						|
      make
 | 
						|
      make install
 | 
						|
      # iproute2
 | 
						|
      apt install bison flex elfutils -y
 | 
						|
      git clone http://git.kernel.org/pub/scm/network/iproute2/iproute2.git
 | 
						|
      cd iproute2
 | 
						|
      make
 | 
						|
      make install
 | 
						|
 | 
						|
#. Upload image to OpenStack Glance and enable PCI passthrough in  the ``flavor``
 | 
						|
   property.
 | 
						|
 | 
						|
   .. code:: sh
 | 
						|
 | 
						|
      # upload image
 | 
						|
      openstack image create --container-format bare --disk-format qcow2 --file
 | 
						|
      tsn_ubuntu_19_04.img --public tsn-ubuntu-19-04
 | 
						|
      # add pci-passthrough property to flavor (for example m1.medium), "h210-1" is the
 | 
						|
      # alias name of the PCI device configured in nova.config
 | 
						|
      openstack flavor set m1.medium --property pci_passthrough:alias=h210-1:1
 | 
						|
 | 
						|
#. Configure OpenStack Nova to allow for PCI passthrough.
 | 
						|
 | 
						|
   Check the correct ``product_id`` of your device with the command:
 | 
						|
 | 
						|
   .. code:: sh
 | 
						|
 | 
						|
      lspci -nn
 | 
						|
 | 
						|
   Create the ``nova-tsn-pt.yaml`` file to allow PCI passthrough for the i210
 | 
						|
   adapter (for example device id: 8086:1533):
 | 
						|
 | 
						|
   .. code:: yaml
 | 
						|
 | 
						|
      conf:
 | 
						|
        nova:
 | 
						|
          pci:
 | 
						|
            alias:
 | 
						|
              type: multistring
 | 
						|
              values:
 | 
						|
              - '{"vendor_id": "8086", "product_id": "1533", "device_type": "type-PCI", "name": "h210-1"}'
 | 
						|
            passthrough_whitelist:
 | 
						|
              type: multistring
 | 
						|
              values:
 | 
						|
              - '{"class_id": "8086", "product_id":"1533"}'
 | 
						|
        overrides:
 | 
						|
          nova_compute:
 | 
						|
            hosts:
 | 
						|
            - conf:
 | 
						|
                nova:
 | 
						|
                  DEFAULT:
 | 
						|
                    my_ip: {host_ip}
 | 
						|
                    shared_pcpu_map: '""'
 | 
						|
                    vcpu_pin_set: '"2-5"'
 | 
						|
                  libvirt:
 | 
						|
                    images_type: default
 | 
						|
                    live_migration_inbound_addr: {host_ip}
 | 
						|
                  pci:
 | 
						|
                    passthrough_whitelist:
 | 
						|
                    type: multistring
 | 
						|
                    values:
 | 
						|
                    - '{"class_id": "8086", "product_id": "1533"}'
 | 
						|
                  vnc:
 | 
						|
                    vncserver_listen: 0.0.0.0
 | 
						|
                    vncserver_proxyclient_address: {host_ip}
 | 
						|
              name: {controller_name}
 | 
						|
 | 
						|
   .. note::
 | 
						|
 | 
						|
     Other configurations, such as ``libvirt`` and ``vnc``, are also required,
 | 
						|
     due to the override mechanism of openstack-helm for lists (for example hosts)
 | 
						|
     which replaces all contents of the list instead of replacing a single
 | 
						|
     configuration item for each list element.
 | 
						|
 | 
						|
#. Enable Nova PCI passthrough configuration in STX.
 | 
						|
 | 
						|
   .. parsed-literal::
 | 
						|
 | 
						|
      # set pci-passthrough config
 | 
						|
      system helm-override-update |prefix|-openstack nova openstack --values ./nova-tsn-pt.yaml --reuse-values
 | 
						|
      system application-apply |prefix|-openstack
 | 
						|
 | 
						|
#. Create VM instance.
 | 
						|
 | 
						|
   .. code:: sh
 | 
						|
 | 
						|
      openstack server create --image tsn-ubuntu-19-04 --network ${network_uuid} --flavor m1.medium tsn
 | 
						|
 | 
						|
#. Install the TSN reference application and other test applications. Follow the
 | 
						|
   instructions in `TSN Reference Software for Linux`_ to compile and install
 | 
						|
   the following applications in the VM instances:
 | 
						|
 | 
						|
   * ``iperf3``: running in server mode to receive best-effort traffic.
 | 
						|
 | 
						|
   * ``simple_listener``: TSN test application which receives IEEE1722 class A
 | 
						|
     traffic. Used to test the IEEE 802.1Qav or Credit Based Shaper use case.
 | 
						|
 | 
						|
   * ``sample-app-taprio``: TSN test application which receives traffic and
 | 
						|
     measures Tx latency. Used to test the IEEE 802.1Qbv or Time Aware Shaper use
 | 
						|
     case.
 | 
						|
 | 
						|
***********
 | 
						|
Edge device
 | 
						|
***********
 | 
						|
 | 
						|
#. Install Ubuntu 19.04 and the required libraries.
 | 
						|
 | 
						|
   .. code:: sh
 | 
						|
 | 
						|
      # linuxPTP
 | 
						|
      git clone https://git.code.sf.net/p/linuxptp/code linuxptp-code
 | 
						|
      cd linuxptp-code
 | 
						|
      make
 | 
						|
      make install
 | 
						|
      # iproute2
 | 
						|
      apt install bison flex elfutils -y
 | 
						|
      git clone http://git.kernel.org/pub/scm/network/iproute2/iproute2.git
 | 
						|
      cd iproute2
 | 
						|
      make
 | 
						|
      make install
 | 
						|
 | 
						|
#. Install TSN reference applications and other test applications. Follow the
 | 
						|
   instructions in `TSN Reference Software for Linux`_ to compile and install the
 | 
						|
   following applications on the device:
 | 
						|
 | 
						|
   * ``iperf3``: running in server mode to receive best-effort traffic.
 | 
						|
 | 
						|
   * ``simple_talker-cmsg``: TSN test application which sends IEEE1722 class A
 | 
						|
     traffic. Used to test the IEEE 802.1Qav or Credit Based Shaper use case.
 | 
						|
 | 
						|
   * ``sample-app-taprio``: TSN test application which sends scheduled traffic.
 | 
						|
     Used to test the IEEE 802.1Qbv or Time Aware Shaper use case.
 | 
						|
 | 
						|
 | 
						|
------------------------------
 | 
						|
Credit Based Shaper (CBS) demo
 | 
						|
------------------------------
 | 
						|
 | 
						|
This demo focuses on the use of IEEE 802.1Qav or Credit Based Shaper (CBS) and
 | 
						|
the LaunchTime feature of Intel® Ethernet Controller I210 to ensure bounded
 | 
						|
and low latency for time-sensitive streams. It includes 2 scenarios:
 | 
						|
 | 
						|
#. CBS and LaunchTime disabled
 | 
						|
#. CBS and LaunchTime enabled
 | 
						|
 | 
						|
In the demo
 | 
						|
 | 
						|
* ``ptp4l`` daemons run on both the edge gateway and edge device to sync
 | 
						|
  the PTP clock based on IEEE 802.1AS Generalized Precision Time Protocol (gPTP),
 | 
						|
  with the edge gateway serving as primary clock and the edge device serving
 | 
						|
  as secondary clock.
 | 
						|
 | 
						|
* ``phc2sys`` daemons run on both devices to synchronize the system clock with
 | 
						|
  the PTP clock.
 | 
						|
 | 
						|
* The ``simple_talker-cmsg`` application runs on the edge device as the
 | 
						|
  source of 8000 packet/s SR Class A audio frames in IEEE 1722 format.
 | 
						|
 | 
						|
* The ``simple_listener`` application runs on edge gateway to receive
 | 
						|
  time-sensitive traffic.
 | 
						|
 | 
						|
* ``iperf3`` runs on both devices to transfer best-effort traffic to stress
 | 
						|
  system communication.
 | 
						|
 | 
						|
* The ``tc`` utility is used to set up CBS and etf (for LaunchTime feature) qdisc
 | 
						|
  capabilities.
 | 
						|
 | 
						|
***************************************
 | 
						|
Scenario 1: CBS and LaunchTime disabled
 | 
						|
***************************************
 | 
						|
 | 
						|
.. figure:: ./figures/stx-tsn-demo-result1.png
 | 
						|
   :scale: 100%
 | 
						|
 | 
						|
   *Figure 2: Traffic with CBS and LaunchTime disabled*
 | 
						|
 | 
						|
In this scenario, both best-effort traffic (blue line) and time-sensitive (IEEE
 | 
						|
1722 audio frames) traffic (red line) into the same transmit queue, the traffic
 | 
						|
transmission of time-sensitive traffic has unbounded transmission latency and
 | 
						|
the transmission rate varies greatly (for example 7900~8100 packets/s). Without
 | 
						|
CBS or LaunchTime enabled, the network sees a burst of IEEE 1722 audio frames as
 | 
						|
driven by the ``simple_talker-cmsg`` application.
 | 
						|
 | 
						|
**************************************
 | 
						|
Scenario 2: CBS and LaunchTime enabled
 | 
						|
**************************************
 | 
						|
 | 
						|
This scenario shows CBS and LaunchTime enabled (``mqprio`` with ``etf qdisc`` and
 | 
						|
per-packet TX time)
 | 
						|
 | 
						|
Enable CBS with the commands:
 | 
						|
 | 
						|
.. code:: sh
 | 
						|
 | 
						|
     tc qdisc replace dev [iface]  \
 | 
						|
            parent root handle 100 mqprio num_tc 3 \
 | 
						|
            map 2 2 1 0 2 2 2 2 2 2 2 2 2 2 2 2 \
 | 
						|
            queues 1@0 1@1 2@2 hw 0
 | 
						|
     tc qdisc replace dev [iface] \
 | 
						|
            parent 100:1 cbs \
 | 
						|
            idleslope  7808 \
 | 
						|
            sendslope  -992192 \
 | 
						|
            hicredit 12 \
 | 
						|
            locredit  -97  \
 | 
						|
            offload 1
 | 
						|
 | 
						|
Enable LaunchTime with the command:
 | 
						|
 | 
						|
.. code:: sh
 | 
						|
 | 
						|
     tc qdisc replace dev [iface] \
 | 
						|
          parent 200:1 \
 | 
						|
          etf delta \
 | 
						|
          clockid CLOCK_TAI \
 | 
						|
          offload 1
 | 
						|
 | 
						|
.. figure:: ./figures/stx-tsn-demo-result2.png
 | 
						|
   :scale: 100%
 | 
						|
 | 
						|
   *Figure 3: Traffic with CBS and LaunchTime enabled*
 | 
						|
 | 
						|
In this case, after enabling CBS and LaunchTime features, different transmit
 | 
						|
queues are used to separate best-effort and time-sensitive traffic. The CBS
 | 
						|
capability ensures time-sensitive traffic is bounded to the sawing-effect of
 | 
						|
credit-based shaping in the case of a heavily loaded transmission path. The
 | 
						|
LaunchTime capability ensures time-deterministic transmission by setting the
 | 
						|
per-packet TX descriptor LaunchTime field. As result, the traffic transmission
 | 
						|
of a SR Class A audio stream has constant transmission latency and the
 | 
						|
transmission rate is a constant 8000 packets/second, independent of when
 | 
						|
interfering best-effort traffic enters the system.
 | 
						|
 | 
						|
----------------------------
 | 
						|
Time Aware Shaper (TAS) demo
 | 
						|
----------------------------
 | 
						|
 | 
						|
This demo focuses on the use of |IEEE| 802.1Qbv or Time Aware Shaper (TAS) and
 | 
						|
the LaunchTime feature of Intel® Ethernet Controller I210 to ensure much more
 | 
						|
bounded and low latency for period control applications. It includes 3 scenarios:
 | 
						|
 | 
						|
#. TAS and LaunchTime disabled
 | 
						|
#. TAS enabled
 | 
						|
#. TAS and LaunchTime enabled
 | 
						|
 | 
						|
In the demo
 | 
						|
 | 
						|
* ``ptp4l`` daemons run on both the edge gateway and edge device to sync the
 | 
						|
  PTP clock based on |IEEE| 802.1AS Generalized Precision Time Protocol (gPTP),
 | 
						|
  with the edge gateway serving as primary clock and the edge device serving
 | 
						|
  as secondary clock.
 | 
						|
 | 
						|
* ``phc2sys`` daemons run on both devices to synchronize the system clock with
 | 
						|
  the PTP clock.
 | 
						|
 | 
						|
* The ``sample-app-taprio`` application runs on both devices to transfer
 | 
						|
  scheduled traffic.
 | 
						|
 | 
						|
* ``iperf3`` runs on both devices to transfer best-effort traffic to stress
 | 
						|
  system communication.
 | 
						|
 | 
						|
* The ``tc`` utility is used to set up ``mqprio``, ``taprio``, and ``etf`` (for
 | 
						|
  LaunchTime feature) ``qdisc`` capabilities.
 | 
						|
 | 
						|
 | 
						|
***************************************
 | 
						|
Scenario 1: TAS and LaunchTime disabled
 | 
						|
***************************************
 | 
						|
 | 
						|
This scenario shows TAS and LaunchTime disabled (use ``mqprio qdisc`` only).
 | 
						|
 | 
						|
Create mqprio with the command:
 | 
						|
 | 
						|
.. code:: sh
 | 
						|
 | 
						|
     tc qdisc add dev [iface]  parent root mqprio num_tc 4 \
 | 
						|
            map 3 3 3 0 3 1 3 2 3 3 3 3 3 3 3 3 \
 | 
						|
            queues 1@0 1@1 1@2 1@3 \
 | 
						|
            hw 0
 | 
						|
 | 
						|
.. figure:: ./figures/stx-tsn-demo-result3.png
 | 
						|
   :scale: 100%
 | 
						|
 | 
						|
   *Figure 4: Inter-packet latency with TAS and LaunchTime disabled*
 | 
						|
 | 
						|
 | 
						|
In this case, the distribution of the inter-packet latency for both scheduled
 | 
						|
traffic (VLAN priority = 5 and 3) has a high sample count at 500 µs, which is
 | 
						|
the inter-packet cycle time used in this demo. High sample counts observed
 | 
						|
outside of the chosen inter-packet cycle time indicate poor precision in hitting
 | 
						|
the expected 500 µs inter-packet cycle time.
 | 
						|
 | 
						|
***********************
 | 
						|
Scenario 2: TAS enabled
 | 
						|
***********************
 | 
						|
 | 
						|
This scenario shows TAS enabled (use ``taprio qdisc`` only).
 | 
						|
 | 
						|
Enable TAS with the command:
 | 
						|
 | 
						|
.. code:: sh
 | 
						|
 | 
						|
     tc -d qdisc replace dev [iface] parent root handle 100 taprio num_tc 4 \
 | 
						|
            map 3 3 3 1 3 0 3 2 3 3 3 3 3 3 3 3 \
 | 
						|
            queues 1@0 1@1 1@2 1@3 \
 | 
						|
            base-time 1559471513000000000 \
 | 
						|
            sched-entry S 08 100000 \
 | 
						|
            sched-entry S 01 100000 \
 | 
						|
            sched-entry S 02 100000 \
 | 
						|
            sched-entry S 04 200000 \
 | 
						|
            sched-entry S 08 100000 \
 | 
						|
            sched-entry S 01 100000 \
 | 
						|
            sched-entry S 02 100000 \
 | 
						|
            sched-entry S 04 200000 \
 | 
						|
            clockid CLOCK_TAI
 | 
						|
 | 
						|
.. figure:: ./figures/stx-tsn-demo-result4.png
 | 
						|
   :scale: 100%
 | 
						|
 | 
						|
   *Figure 5: Inter-packet latency with TAS enabled*
 | 
						|
 | 
						|
In this case, most of the samples happen at and close to 500 µs. The sample
 | 
						|
count quickly drops to a single digit value when it is further away from the
 | 
						|
500 µs inter-packet cycle time. Compared to scenario 1, a majority of the
 | 
						|
scheduled traffic is received at close to 500 µs, which shows that ``taprio qdisc``
 | 
						|
helps traffic shape the transmission of scheduled traffic in the time
 | 
						|
domain.
 | 
						|
 | 
						|
**************************************
 | 
						|
Scenario 3: TAS and LaunchTime enabled
 | 
						|
**************************************
 | 
						|
 | 
						|
This scenario shows TAS and LaunchTime enabled (``taprio`` with ``etf qdisc`` and
 | 
						|
per-packet TX time).
 | 
						|
 | 
						|
Enable LaunchTime with the command:
 | 
						|
 | 
						|
.. code:: sh
 | 
						|
 | 
						|
     tc qdisc replace dev [iface] parent [parent] 1 etf \
 | 
						|
            clockid CLOCK_TAI \
 | 
						|
            delta [DELTA_nsec] \
 | 
						|
            offload
 | 
						|
 | 
						|
.. figure:: ./figures/stx-tsn-demo-result5.png
 | 
						|
   :scale: 100%
 | 
						|
 | 
						|
   *Figure 6: Inter-packet latency with TAS and LaunchTime enabled*
 | 
						|
 | 
						|
In this case, the inter-packet latency distribution for both scheduled
 | 
						|
traffic is greatly reduced compared to previous cases. This result is
 | 
						|
consistent with the fact that LaunchTime technology ensures scheduled
 | 
						|
traffic is pre-fetched ahead of time from system memory into the Ethernet
 | 
						|
MAC controller for transmission at the defined time. The transmission gating
 | 
						|
effect of ``taprio qdisc`` provides a protected transmission window for
 | 
						|
scheduled traffic from interfering with best-effort traffic. As a result,
 | 
						|
combining these two technologies ensures that Ethernet frames for scheduled
 | 
						|
traffic are sent out in a protected transmission window at accurate times.
 | 
						|
 | 
						|
.. _TSN Reference Software for Linux: https://github.com/intel/iotg_tsn_ref_sw
 |