Logo
Version: 3.3
  • Intel® Edge Controls for Industrial
  • About Intel® Edge Controls for Industrial
    • ECI Versions and Supported Distributions
    • ECI Support
    • ECI License
    • ECI Features
    • ECI Technology Domains
    • ECI Industrial Applications
    • How ECI Achieves Determinism
    • ECI Packages and Installation Images
  • Get Started
    • Code Block Style
    • Get Started Steps
      • System Requirements
        • Target System
          • Validated Hardware Platforms
        • Linux Build System (Optional)
        • Windows PC (Optional)
      • Get Access to ECI
        • Register on Intel® Edge Software Hub
        • Setup ECI Repository / Download ECI Release Archive
      • Install ECI
        • Install ECI Packages
          • Setup Extra repositories
          • Install Real-time Linux Kernel
          • What Next after Installing Real-time Linux Kernel
        • Build ECI
          • Setup Build Dependencies
          • Build ECI Targets
      • Complete and Verify Deployment
        • Verify Real-time Linux Kernel
        • Verify Benchmark Performance
          • Verify: Cyclictest Workload
          • Other Benchmarks
        • Install ECI Packages from Repository
        • Where to go Next?
  • ECI Packages Lists
    • ECI Meta-Packages
    • ECI Technology Domains Reference
    • ECI Deb Packages for Debian 12 (Bookworm)
    • ECI Deb Packages for Debian 11 (Bullseye)
    • ECI Deb Packages for Canonical® Ubuntu® 24.04 (Noble Numbat)
    • ECI Deb Packages for Canonical® Ubuntu® 22.04 (Jammy Jellyfish)
    • ECI RPM Packages for Red Hat Enterprise Linux
  • Components and Features of ECI
    • CODESYS Software PLC
      • CODESYS Linux Runtime
        • Install CODESYS Linux Runtime
        • License CODESYS Linux Runtime
        • Restart CODESYS Linux Runtime
      • CODESYS IDE
        • Install CODESYS IDE
      • CODESYS Linux Runtime Optimizations
      • CODESYS Example Applications
        • OPC UA Publish/Subscribe Example
      • codesys-benchmarks
        • codesys-ui-benchmark
        • codesys-opcua-client-benchmark
          • Configure ADAM Profinet Device with CODESYS
    • LogicLab Software PLC
      • LogicLab IDE
      • LogicLab Runtime
      • Install LogicLab IDE
      • LogicLab Example Applications
        • Nxtrol Application #1: Logiclab EtherCAT Connection
        • Nxtrol Application #2: Logiclab ModbusTCP Connection
        • Nxtrol Application #3: LogicLab Motion Control Development Kit Demonstration with RTMotion and LinuxCNC
        • Axel Application #1: Basic Demonstration
        • Axel Application #2: Motion Demonstration
    • EcoStruxure Automation Expert Software PLC
      • EcoStruxure Automation Expert Linux Runtime
        • Install EcoStruxure Automation Expert Linux Runtime
      • EcoStruxure Automation Expert IDE
    • OpenPLC Software PLC
      • Install OpenPLC Runtime and Editor
      • OpenPLC Sample Applications
        • Write PLC Program
        • Execute PLC Program in OpenPLC Runtime
      • OpenPLC Misc
        • Change CPU Affinity of OpenPLC Runtime
        • Change Axis Position Unit Scale
        • OpenPLC Installation Issue & Solution
    • Edge Control Protocol Bridge & OPC UA
      • PLCopen OPC UA Transport Layer
        • OPC UA Client/Server Model
        • OPC UA Publish/Subscribe Model
      • Edge Control Protocol Bridge
        • Install Edge Control Protocol Bridge
        • Edge Control Protocol Bridge Plugins
          • Edge Control Protocol Bridge Application
          • Configuration Parameters
          • OPC UA Plug-in
          • OPC UA Key Generation
          • MQTT Plug-in
          • Data Simulator Plug-in
          • Shared Memory Plug-in
          • Edge Control OPC UA Server Application
          • EMB Plug-in
          • C++ Template Plug-in
          • Template Plug-in
      • EC Protocol Bridge Example Configurations
        • EC Protocol Bridge Prerequisites and Instructions
        • Example #1: Data Exchange using all Datatypes
        • Example #2: OPC UA Publish and Subscribe over ETF
        • Example #3: OPC UA Client Read and Write
        • Example #4: Secure OPC UA Client Read and Write
        • Example #5: EII Message Bus Publisher and Subscriber
        • Example #6: MQTT Publish and Subscribe
      • EC Protocol Bridge Example Applications
        • Application #1: Single-Host Roundtrip TSN Transport
          • UDP Transport
          • TSN Transport without Priority
          • TSN Transport with Priority
        • Application #2: CODESYS OPC UA Publish/Subscribe
    • Microservice Architecture
      • Docker
        • Terminology
        • Install Docker
        • Useful Docker Commands
        • Build and Deploy Docker Images
          • Build Docker Image
          • Deploy Docker Image
        • Optimizations for Docker Containers
      • Microservice Dockerfile Templates for ECI
        • Prepare Build System for Microservices
      • Build Microservice Docker Images
        • Microservice: EC Protocol Bridge and Plugins
          • Build EC Protocol Bridge Container
          • Execute EC Protocol Bridge Container
          • Customize EC Protocol Bridge Container
        • Microservice: CODESYS Linux Runtime and CODESYS Edge Gateway
          • Build CODESYS Containers
          • Execute CODESYS Linux Runtime Container
          • Execute CODESYS Edge Gateway Container
      • Docker Sanity Checks
        • Sanity Check #1: Docker Daemon
        • Sanity Check #2: Build TSN Image
        • Sanity Check #3: Bridge Virtual Ethernet to Physical Ethernet
        • Sanity Check #4: Join a Kubernetes (k8s) Cluster
    • IgH EtherCAT Master Stack
      • Install IgH EtherCAT Master Stack
      • Set up EtherCAT Master
        • Dependencies
        • System Integration
          • EtherCAT Initialization Script
          • EtherCAT Sysconfig File
          • Start Master as Service
        • EtherCAT Configuration & Compilation
          • Compiling EtherCAT
        • Makefile Template for EtherCAT application
        • Multi-Axis Synchronization System (MASS)
          • EtherCAT Control Loop and Time Measurement
      • EtherCAT Sanity Checks
        • Sanity Check #1: EtherCAT Master Start
        • Sanity Check #2: EtherCAT Master Scan
        • Sanity Check #3: MASS Platform Performance Collection
      • EtherCAT Analysis with Wireshark
        • Hardware Setup
          • Use KUNBUS TAP CURIOUS
        • Software Setup
        • Capture EtherCAT Packets with Wireshark
        • Jitter Analysis by Wireshark
      • EtherCAT over DPDK
        • EtherCAT over DPDK Overview
        • EtherCAT over DPDK Features
        • EtherCAT over DPDK Installation
        • EtherCAT over DPDK Configuration
      • EtherCAT Enablekit
        • EtherCAT Enablekit Overview
          • EtherCAT Enablekit Features
          • EtherCAT Enablekit Architecture
        • EtherCAT Enablekit Code Sample
          • EtherCAT Enablekit Requirements
        • EtherCAT Enablekit Sanity Checks
          • Sanity Check #1: ESI Parsing
          • Sanity Check #2: ENI Parsing
      • Real-Time Vision with EtherCAT
        • Usage Case
        • Work Flow
        • Solution Principle
        • Example Demonstration
    • CANopen Overview
      • Prepare CANopen
        • Install CANopen
        • Load Driver
        • Set up CAN/VCAN Interface
      • CANopen - Sanity Checks
        • Sanity Check #1: Virtual CAN Interface Link Up
        • Sanity Check #2: SocketCAN Dump Test
        • Sanity Check #3: CANopen Tests Automatically
        • Sanity Check #4: CANopen Servo SDO Enable Test
    • PLCopen Motion Control
      • Install PLCopen Motion Control
        • Install PLCopen Motion Control Development Headers
      • PLCopen Motion Function Blocks
        • Applications for Industrial Automation
        • Applications for Robotics
      • PLCopen Motion with ROS2
      • PLCopen Motion Sanity Check
        • Sanity Check #1: On-line S-Curve Algorithm Test
        • Sanity Check #2: Trajectory Planner Test
        • Sanity Check #3: Function Block Test
      • PLCopen Motion Recurring Testing
        • Recurring Test #1: Virtual Axis Motion Control Test
    • ACRN Hypervisor
      • ACRN Terminology
      • ECI ACRN Scenario
      • ACRN Prerequisites
      • Install ACRN
      • Launch Virtual Machines
        • Launch Script Messages
        • VM Limitations and Tips
      • ACRN Device Model Example Parameters
      • Compile ACRN for Different Platforms
      • Use ACRN Hypervisor Shell
        • List Actively Running VMs
        • Open Console Session to VM
      • ACRN Best Known Methods
        • ACRN Best Known Methods
          • BKM #1: Alternative to ACRN Hypervisor Shell
          • BKM #2: Run an ACRN Real-Time (RT) VM alongside a Non-RT VM
          • BKM #3: ACRN multiple NIC Passthrough
          • BKM #4: Minimize data corruption on power loss
      • Convert KVM images for ACRN
        • Convert KVM images for ACRN
      • Inter-VM Communication via Shared Memory
        • Inter-VM Communication via Shared Memory
          • Time-synchronization via Shared Memory
          • ivshmem Driver for Windows
      • Thermal Monitor for ACRN
        • Thermal Monitor for ACRN
          • Thermal Monitor source code
          • Preparation before Build
          • Build and run Thermal Monitor
    • KVM Hypervisor
      • KVM Prerequisites
      • Real-Time VMs using KVM
      • Prepare Image for KVM
        • Virtualize ECI Images with KVM
        • Create Windows Image for KVM
        • Set up QEMU Command to Boot Windows VM
          • Create Windows Image for KVM
      • Build OVMF.fd for KVM
    • Real-time Data Agent
      • Main Structure and Data Flow
      • Shared Memory Ring Buffer Library
        • Design Principle
      • Install Real-time Data Agent
        • Install Real-time Data Agent Development Headers
        • How to Use
      • Demonstration: Agent Program to Process Real-time Data
      • Example: Time Series Database Container Stack
      • Run Example Simulation
    • Time-series Processing
      • Time-series Data Processing Stack
      • Install Time-series Data Processing Stack
      • Set up Time-series Stack
        • Deploy Stack
      • Set up Secure Time-series Stack
        • Generate Certificate and Key
        • Deploy Secure Stack
    • 5G Module on Tiger Lake Customer Reference Board
      • 5G Module Developer Reference
      • 5G Prerequisites
      • Install 5G Module Components
      • Set up 5G Test Environment
      • Set up 5G Connectivity
        • Set up Data Link using ModemManager
        • Test 5G Connectivity
    • WiFi 6E Module on Tiger Lake Platform
      • WiFi 6E Prerequisites
      • Set up WiFi 6E Connectivity
        • Set up Data Link using NetworkManager
        • Test WiFi Connectivity
    • Infrastructure Management
      • Intel® In-band Manageability
        • Install Intel® In-band Manageability
          • Intel In-band Manageability User Guides
          • Provision Intel In-band Manageability Framework without SDO
      • Application Management - Edge Orchestration
        • Edge Orchestration
          • Exclusive CAT (ExCAT) microservice for K8s
          • Exclusive CAT (ExCAT) for Ansible
          • Fault tolerance library
        • Deploy Edge Orchestration
  • Developer Resources
    • Develop and Build Components
      • ECI Development Practices
        • ECI Build Engine
        • ECI Source Code
        • Develop Deb Packages
          • Step 1: Set up Build System
          • Step 2: Create a Meta-layer
          • Step 3: Create a Recipe
          • Step 4: Start a bitbake Environment
          • Step 5: Build a Recipe
        • Debian Package Development Concepts
          • Bitbake and ISAR Variables
          • Raw Copy Reference Recipe
          • Upstream APT Reference Recipe
          • Upstream Maintained Reference Recipe
          • Custom Kernel Module DKMS Recipe
        • bitbake Command Reference
        • Custom Debian Live System Image containing ECI Deb Packages
      • Configure and Build Linux Kernel
        • Configure and Build Linux Kernel from ECI Build Engine
          • Step 1: Environment Prerequisites
          • Step 2: Use Linux Menu Tool
          • Step 3: Build Linux Kernel
        • Configure and Build Linux Kernel on local filesystem
          • Step 1: Local Environment Prerequisites
          • Step 2: Download Linux Intel LTS tree
          • Step 3: Apply patch quilt from IKPATCHSET_PROC
          • Step 4: Use local Linux Menu Tool
          • Step 5: Build and install local Linux kernel image
        • Restore Device Power-Management Core on Linux PREEMPT_RT kernel Intel image
      • Robot Operating System Software
        • ROS2 Overview
        • Install Robot Operating System Software
          • Install ROS2 Core Components
          • Install ROS2 Desktop Components
        • Getting Started with ROS2
          • Setup the Robotic node
          • ROS2 DDS/RSTP Communication sanity-check
          • ROS2 Navigation Stack
          • Simultaneous Localization and Mapping (SLAM)
          • Robot Motion Planning Framework - MoveIt2
        • Advanced ROS2 developer ECI Robotics content
      • Virtualize ECI Images with KVM
        • Prerequisites to Virtualize ECI Images
        • Install ECI Image into KVM
    • Optimize Performance
      • Intel® Resource Director Technology (Intel® RDT)
        • Intel® Cache Allocation Technology Terminology
        • Install Platform Quality of Service (PQoS) Tool
        • Install PQoS Helper
        • Cache Monitoring Technology (CMT) and Memory B/W Monitoring (MBM)
        • Example CMT/MBM Usage Scenario
        • Cache Allocation Technology (CAT) Usage
        • Example CAT Usage Scenario
        • Example CAT Usage with ECI
        • Memory Bandwidth Allocation (MBA) Usage
      • Real-Time Scheduling on Linux
        • General Definitions
          • IA64 Interrupt Definitions
          • Linux Multi-threading Definitions
          • General Linux Timer Definitions
        • PREEMPT_RT Preemptive and Priority Scheduling on Linux OS Runtime
          • Setting Low-latency Interrupt Software Handling
          • Set Preemptive and Priority Scheduling Policies
          • Set POSIX Thread Virtual Memory Allocation (vma)
          • Set NoHz (Tickless) Kernel
          • Set High Resolution Timers Thread
          • Set Thread temporal-isolation via Kernel Boot Parameters
        • Xenomai Cobalt Preemptive and Priority Scheduling Linux OS Runtime
          • Set Two-stage Interrupt Pipeline - [Head] and [Root] Stages
          • Set POSIX Thread Context Migration between [Head] and [Root] Stages
          • Set High Resolution Timers Thread in Xenomai
          • Further Reading Reference
        • RT-Scheduling Sanity Checks
          • Sanity Check 1: Monitor Thread CPU Core Affinity
          • Sanity Check 2: Monitor Kernel Interrupts
          • Sanity Check 3: Determine CPU LLC Cache Allocation Preset
          • Sanity Check 4: Check IA UEFI Firmware Setting
          • Sanity Check 5: Check Linux Kernel Command Line Parameters
          • Sanity Check 6: Report Thread KPIs as Latency Histograms
      • Intel® Time Coordinated Computing
        • Enable Intel TCC Mode
      • Linux TSN Endstation with Intel® Ethernet Controllers
        • Overview of IEEE 802.1AS Generalized Precision Time Protocol (gPTP)
          • gPTP Clock Types
          • Linux PTP Stack 802.1AS gPTP Profile
        • Overview of IEEE 802.1Q-2018 Enhancements for Scheduled Traffic (EST)
          • Virtual LANs (VLANs)
          • Linux Traffic Control (TC)
        • systemd Network Manager TSN Endstation Configuration for Intel® Ethernet Controllers
          • eci-ethirqs@.service- Networking Interrupts CPU Affinity for Intel® Ethernet Controllers
          • eci-ptp4l-p2p@.service - gPTP Time Synchronization Service for Intel® Ethernet Controllers
          • eci-phc2sys@.service - PHC Time Synchronization Service for Intel® Ethernet Controllers
          • eci-tsn-wait-sync-8021as@.service - TSN 802.1AS Services for Intel® Ethernet Controllers
          • eci-tsn-netlink@.service - 802.1Q-2018 TSN Link-layer Service for Intel® Ethernet Controllers
        • TSN Endstation Netlink Diagnostic Workflow
          • The check_clocks Tool
          • Ethernet/TSN Time-view - Trace af_packet Events
          • Ethernet/TSN Time-view - Trace af_packet Events with Advanced function_graph
          • Ethernet/TSN Time-view - Trace af_packet Events with Advanced intel_pt//
        • eBPF Offload Native Mode XDP on Intel® Ethernet Linux Driver
          • Install Linux BPFTool
          • Install Linux XDP Tools
          • Linux eXpress Data Path (XDP)
          • BPF Compiler Collection (BCC)
      • Linux OS Runtime Optimizations
        • CPU Isolation
        • Network Interrupts Affinity to CPU
          • Install Network-irq-affinity Tool
        • Best Practices for Achieving Real-time Performance
          • Eliminate Sources of CPU Contention
          • Prioritize Workloads
          • Use Cache Allocation Technology
          • Stop Unnecessary Services
          • Disable Machine Checks
          • Increase Thread Runtime Limit
        • Typical Workload Optimization Flow
      • Docker Runtime Optimizations
        • Resource Management with Control Groups
          • Linux Control Groups
          • QoS Classes
          • Set Control Group of Container
        • Docker CPUSet
          • Docker CPUSet Example
        • Docker CPUS
          • Docker CPUS Example
      • Real-time Development Tutorial
        • Real-Time Development & Debugging References
        • Linux RT Application Development Prerequisites
        • Install Real-time Development Tutorial
        • Application Overview
          • Parameter Summary and Sample Output
          • Function Flow
          • Parameter Details
        • RT Application Tutorials
          • RT Application Tutorials Prerequisites
          • CPU Core Affinity Tutorial
          • Memory Locking Tutorial
          • Real-Time Priority Tutorial
        • Application Tracing
          • Preemption by a Higher Priority Application
          • Preemption by the System
      • Benchmarks & Performance Characterization
        • 48-Hour Benchmark
          • Install 48-Hour Benchmark
          • Execute 48-Hour Benchmark
          • Interpret 48-Hour Benchmark Results
          • Example of 48-Hour Benchmark Data
        • Mega Benchmark
          • Install Mega Benchmark
          • Execute Mega Benchmark
          • Interpret Mega Benchmark Results
        • Cyclictest Workload
          • Install Cyclictest Workload
          • Execute Cyclictest Workload
          • Interpret Cyclictest Results
          • Additional Cyclictest Workload
        • Hardware Latency Detector
          • Install Hardware Latency Detector
          • Execute Hardware Latency Detector
          • Interpret Hardware Latency Detector Results
        • Jitter
          • Install Jitter
          • Execute Jitter
          • Interpret Jitter Results
        • LMbench
          • Install LMBench
          • Execute LMBench
          • Interpret LMbench Results
        • Caterpillar
          • Install Caterpillar
          • Execute Caterpillar
          • Interpret Caterpillar Results
        • RT-app
          • Install RT-app
          • Execute RT-app
        • Rhealstone
          • Install Rhealstone
          • Execute Rhealstone
          • Interpret Rhealstone Results
        • MSI Latency
          • Install MSI Latency
          • Execute MSI Latency
          • Interpret MSI Latency Results
        • MSI Jitter
          • Install MSI Jitter
          • Execute MSI Jitter
          • Interpret MSI Jitter Results
        • MMIO Latency
          • Install MMIO Latency
          • Execute MMIO Latency
          • Interpret MMIO Latency Results
        • Real-Time Performance Measurement (RTPM)
          • About RTPM
          • Install Real-Time Performance Measurement
          • RTPM Prerequisites
          • RTPM Test Modules
          • RTPM Command Line Parameters
        • Real-Time Compute Performance (RTCP) Benchmarks
          • Real-Time Compute Performance - DPDK
        • Ethernet TSN Intel Reference Benchmarks
          • Ethernet TSN Benchmark
          • Install Linutronix TSN Testbench
        • CODESYS Benchmarking Applications
          • CODESYS Benchmark
          • CODESYS OPC UA Client Benchmark
          • CODESYS ST-Fragment
        • 6-axis EtherCAT Benchmark
          • About 6-axis EtherCAT Benchmark
          • Install 6-axis EtherCAT Benchmark
          • Execute 6-axis EtherCAT Benchmark
          • Interpret 6-axis EtherCAT Benchmark Results
        • Robotic 6-axis Motion Control Benchmark
          • About Robotic 6-axis Motion Control Benchmark
          • Install Robotic 6-axis Motion Control Benchmark
          • Execute Robotic 6-axis Motion Control Benchmark
          • Interpret Robotic 6-axis Motion Control Benchmark
        • ROS2 DDS/RSTP Benchmark
          • About DDS/RSTP Benchmark
          • Install DDS/RSTP Benchmark
          • Launch DDS/RSTP Benchmark
          • Interpret DDS/RSTP Benchmark results
        • FLANN Intel oneAPI DPC++ Benchmark
          • About FLANN Intel oneAPI DPC++ Benchmark
          • Install FLANN Intel oneAPI DPC++ Benchmark
          • Launch FLANN Intel oneAPI DPC++ Benchmark
          • Interpret FLANN Intel® oneAPI DPC++ Benchmark results
        • PCL Intel oneAPI DPC++ Benchmark
          • About PCL Intel oneAPI DPC++ Benchmark
          • Install PCL Intel oneAPI DPC++ Benchmark
          • Launch PCL Intel oneAPI DPC++ Benchmark
          • Interpret PCL Intel oneAPI DPC++ Benchmark results
        • Performance Sanity Check Testing
          • Performance Sanity Check Testing
      • Benchmark Data
        • Benchmark Platforms
        • 48-Hour Benchmark Results
          • Intel® Core™ i7-1185GRE Processor - Caterpillar
          • Intel® Atom x6425RE Processor - Caterpillar
          • Intel® Core™ i7-1185GRE Processor - Cyclictest
          • Intel® Atom x6425RE Processor - Cyclictest
        • CODESYS OPC UA Client Benchmark Results
          • Intel® Core™ i7-1185GRE Processor - CODESYS OPC UA Client
    • Configure System
      • Manage Users and Permissions in ECI Images
        • Add Superuser Capability
        • Remove Superuser Capability
        • Change Users and Passwords in ECI Images
      • Install Linux Desktop Environment
        • Enable GuC/HuC Firmware Loading
      • UEFI Secure Boot
        • Enabling UEFI Secure Boot
        • Troubleshooting UEFI Secure Boot
          • UEFI key manager does not appear
          • Enrolling distribution certificate
      • Full Disk Encryption
        • Use Intel® Platform Trust Technology
      • Flash an Integrated Firmware Image
        • Hardware Requirements
        • Software Requirements
        • Connect DediProg
        • Flash IFWI
    • Troubleshoot
      • Use Linux Events Tracing (*ftrace*) to Report Latency Outliers
        • Use Linux Events Tracing (ftrace) to Report Latency Outliers
          • Linux Events Tracing
          • Linux Events Latency Histograms
      • Monitor CPU Utilization and Affinity
      • Monitor Kernel Interrupts
      • Determine CPU Cache Allocation
      • Common PTP Sync Issues
        • GM PTP messages TTL > 1
        • Overwhelmed with Ingress PTP Traffic
      • Use Linux perf Event with Intel® Processor Trace
        • Tracing your Own Code
      • Use Wireshark to Dissect OPC UA Pubsub with Time-scheduled Traffic-class
      • Custom Kernel Boot Parameters
    • Tutorials
      • Enable Intel® Level Zero and OpenCL™ Graphics Compute Runtime
      • Enable Intel® oneAPI DPC++ and OpenMP Compute Runtimes
      • Real-Time VMs using KVM
        • Host Configuration
          • Host Configuration: BIOS
          • Host Configuration: Dependencies
          • Host Configuration: Topology
          • Host Configuration: Linux Kernel
        • Real-Time VM Image Creation
          • Real-Time VM Configuration
        • Launch Real-Time VM
          • Real-Time VM Configuration: Dependencies
          • Real-Time VM Configuration: Linux Kernel
          • Verify Real-Time VM Configuration
        • Benchmarking Real-Time VM
          • Stressor VM Image Creation
          • Stressor VM Configuration
          • Execute Stressor VM Workload
          • Execute Real-Time VM Benchmark
          • Expected Real-Time VM Results
      • Industrial Gigabit Multimedia Serial Link™ (GMSL)
        • Brief GMSL Add-in-Card design overview
        • Configure Intel® GMSL SerDes ACPI devices
        • Intel® GMSL intel-ipu6 Debian kernel modules (DKMS)
        • Enable ROS2 Intel® RealSense™ Depth Camera D457 GMSL
        • Enable GStreamer v4l2src plugin with Intel® RealSense™ RGB Camera D457 source
        • Enable GStreamer icamerasrc plugin with Intel® RealSense™ RGB Camera D457 source
        • GMSL Troubleshooting
          • HOW TO rebuild intel-ipu6-dkms Debian package locally
          • HOW TO get and set V4L2_CID_LINK_FREQ controls
          • HOW TO reset, bind and display V4L2 Media Controller
          • WHAT are V4L2 Media Controller functional constraints of GMSL Aggregated-link SerDes?
          • HOW TO analyze GMSL V4L2 Media Controller events in a time-view
          • HOW TO detect in i2c bus to GMSL2 Deserializer and Serializer ACPI devices mapping
          • HOW TO bind V4L2 Media Controller on 3rd party GMSL2 camera modules?
      • LinuxCNC with EtherCAT
        • Install LinuxCNC with EtherCAT master stack
        • LinuxCNC Demo with Physical Axes
      • Robot Vision ROS2 Libraries
        • Launch 3-D Object Pose Detection tutorial
      • Industrial Motion-Control ROS2 Gateway
        • Launch RRBot 2-axis Robotic Arm ROS2 tutorial
        • Launch HIWIN 6-axis Robotic Arm ROS2 tutorial
        • Launch AGV ROS2 tutorial
  • Release Notes
  • ECI Roadmap
  • Appendix
    • ECI Supported Distributions
      • ECI Supported Distributions per Intel® platforms
    • ECI Linux Intel LTS Kernel
    • ECI Components
    • ECI Benchmarks
    • ECI Examples
    • ECI Kernel Configuration Optimizations
    • ECI Kernel Boot Optimizations
    • Additional Boot Parameters for Intel® TCC Tools
    • Additional Boot Parameters for ACRN Real-Time VM
    • Recommended ECI BIOS Optimizations
    • Required BIOS configuration for Intel® TCC Tools
  • FAQs, Known Limitations, Support
    • Intel® Edge Software Support Forum
    • Frequently Asked Questions
    • Known Limitations
      • Limitation #1 - ECI Build errors
      • Limitation #2 - ACRN Service VM monitor output
      • Limitation #3 - ACRN VM filesystem read-only
      • Limitation #4 - No results from msi-jitter benchmark
      • Limitation #5 - Cannot start CODESYS Linux runtime
      • Limitation #6 - Fail when calling Intel Level0 API
  • ECI Software License
  • Notices & Disclaimers
    • Benchmarking Disclaimer
    • Warranty Disclaimer
    • Errata Disclaimer
    • IP License Disclaimer
    • Infringement Analysis Disclaimer
    • Trademark & Copyright Notice
  • Developer Resources
  • Optimize Performance
  • Linux TSN Endstation with Intel® Ethernet Controllers
  • TSN Endstation Netlink Diagnostic Workflow

TSN Endstation Netlink Diagnostic Workflow¶

The following ECI workflow illustration provides the means to address many challenges IEEE std 802.1Q-2018 support for industry-graded Debian Linux products.

../../../_images/tsn-diag-workflow.png
  • Identify and mitigate the traps that might occur when exercising multi-threaded isochronous applications on a Real-time Preemptive Linux OS runtime.

  • Remove misleading working assumptions regarding software versus hardware, by illustrating it in a time-view.

  • Troubleshoot the time-division underlying Quality of Server (QoS) mechanisms in a multi-stack (for example, IEEE 60802, UAFX Controller Profile OPC 10000-084) and multi-nodes network environments.

  • Sanitize time-synchronized industrial applications.

  • Acknowledge Intel® Ethernet controllers hardware offload capabilities and Linux driver functionality.

The following section is applicable to:

../../../_images/target_generic6.png

logo_debian logo_ubuntu

Install from individual Deb package

Install the following components from the ECI repository. Setup the ECI repository, then run following command to install this component:

$ sudo apt install catapult checkclocks
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
0 upgraded, 0 newly installed, 2 reinstalled, 0 to remove and 0 not upgraded.
Need to get 996 kB of archives.
After this operation, 0 B of additional disk space will be used.
Get:1 http://wheeljack.ch.intel.com/apt-repos/ECI/bookworm isar/main amd64 catapult amd64 3.2-0eci1 [981 kB]
Get:2 http://wheeljack.ch.intel.com/apt-repos/ECI/bookworm isar/main amd64 checkclocks amd64 1.0-0eci1 [15.0 kB]
Fetched 996 kB in 0s (12.2 MB/s)
debconf: delaying package configuration, since apt-utils is not installed
(Reading database ... 115190 files and directories currently installed.)
Preparing to unpack .../catapult_3.2-0eci1_amd64.deb ...
Unpacking catapult (3.2-0eci1) over (3.2-0eci1) ...
Preparing to unpack .../checkclocks_1.0-0eci1_amd64.deb ...
Unpacking checkclocks (1.0-0eci1) over (1.0-0eci1) ...
Setting up catapult (3.2-0eci1) ...
Setting up checkclocks (1.0-0eci1) ...

logo_red-hat

Install from individual RPM package

$ sudo dnf install catapult checkclocks
Updating Subscription Management repositories.
Last metadata expiration check: 2:31:49 ago on Thu 04 Apr 2024 09:42:08 AM EDT.
Dependencies resolved.
======================================================================================================================================================================================================================================
Package                                               Architecture                                     Version                                                    Repository                                                    Size
======================================================================================================================================================================================================================================
Reinstalling:
catapult                                              x86_64                                           3.2-0eci1.el9                                              eci-el9-rpm-x86_64                                           987 k
checkclocks                                           x86_64                                           1.0-0eci1.el9                                              eci-el9-rpm-x86_64                                            23 k

Transaction Summary
======================================================================================================================================================================================================================================

Total download size: 1.0 M
Installed size: 6.1 M
Is this ok [y/N]: y
Downloading Packages:
(1/2): checkclocks-1.0-0eci1.el9.x86_64.rpm                                                                                                                                                           2.7 MB/s |  23 kB     00:00
(2/2): catapult-3.2-0eci1.el9.x86_64.rpm                                                                                                                                                               44 MB/s | 987 kB     00:00
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                                                                                                  42 MB/s | 1.0 MB     00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing        :                                                                                                                                                                                                              1/1
Reinstalling     : checkclocks-1.0-0eci1.el9.x86_64                                                                                                                                                                             1/4
Reinstalling     : catapult-3.2-0eci1.el9.x86_64                                                                                                                                                                                2/4
Running scriptlet: catapult-3.2-0eci1.el9.x86_64                                                                                                                                                                                2/4
Running scriptlet: catapult-3.2-0eci1.el9.x86_64                                                                                                                                                                                3/4
Cleanup          : catapult-3.2-0eci1.el9.x86_64                                                                                                                                                                                3/4
Running scriptlet: catapult-3.2-0eci1.el9.x86_64                                                                                                                                                                                3/4
Cleanup          : checkclocks-1.0-0eci1.el9.x86_64                                                                                                                                                                             4/4
Running scriptlet: checkclocks-1.0-0eci1.el9.x86_64                                                                                                                                                                             4/4
Verifying        : catapult-3.2-0eci1.el9.x86_64                                                                                                                                                                                1/4
Verifying        : catapult-3.2-0eci1.el9.x86_64                                                                                                                                                                                2/4
Verifying        : checkclocks-1.0-0eci1.el9.x86_64                                                                                                                                                                             3/4
Verifying        : checkclocks-1.0-0eci1.el9.x86_64                                                                                                                                                                             4/4
Installed products updated.

Reinstalled:
catapult-3.2-0eci1.el9.x86_64                                                                                    checkclocks-1.0-0eci1.el9.x86_64

Complete!

Start the following systemd services to serve the Catapult REST API from the target on port 8000:

$ systemctl enable catapult-restapi@8000.service && systemctl start catapult-restapi@8000.service && systemctl status catapult-restapi@8000.service
? catapult-restapi@8000.service - Catapult traceviewer REST API service
   Loaded: loaded (/lib/systemd/system/catapult-restapi.service; disabled; vendor preset: enabled)
   Drop-In: /usr/lib/systemd/system/service.d
            └─10-override-protect-proc.conf
   Active: active (running) since Thu 2018-08-30 04:50:28 UTC; 7s ago
   Main PID: 32902 (restapi_start.p)
      Tasks: 1 (limit: 9164)
   Memory: 36.3M
      CPU: 1.597s
   CGroup: /system.slice/catapult-restapi.service -port 8000
            └─32902 /usr/bin/python3 /usr/share/catapult/restapi_start.py

Aug 30 04:50:30 eci-intel-23f0 restapi_start.py[32902]: *** Getting all DMI data into a XML document variable
Aug 30 04:50:30 eci-intel-23f0 restapi_start.py[32902]: [1535604629.925063] short-list available kernel trace events...
Aug 30 04:50:30 eci-intel-23f0 restapi_start.py[32902]: [1535604629.9325438] short-list available kernel perf PMU hw-events...
Aug 30 04:50:30 eci-intel-23f0 restapi_start.py[32902]: [1535604630.0594482] short-list available kernel filter functions...
Aug 30 04:50:30 eci-intel-23f0 restapi_start.py[32902]:  * Serving Flask app "restapi_start" (lazy loading)
Aug 30 04:50:30 eci-intel-23f0 restapi_start.py[32902]:  * Environment: production
Aug 30 04:50:30 eci-intel-23f0 restapi_start.py[32902]:    WARNING: This is a development server. Do not use it in a production deployment.
Aug 30 04:50:30 eci-intel-23f0 restapi_start.py[32902]:    Use a production WSGI server instead.
Aug 30 04:50:30 eci-intel-23f0 restapi_start.py[32902]:  * Debug mode: on
Aug 30 04:50:30 eci-intel-23f0 restapi_start.py[32902]:  * Running on http://0.0.0.0:8000/ (Press CTRL+C to quit)

The check_clocks Tool¶

The check_clocks tool is used to check time-synchronization between PTP Hardware Clocks (PHC), Linux CLOCK_TAI, and CLOCK_REALTIME system time.

Tools

Version

Source

Measure Ethernet L2-PTP vs CLOCK_TAI time synchronization drift

0.2.0

https://tsn.readthedocs.io/_downloads/f329e8dec804247b1dbb5835bd949e6f/check_clocks.c (with eci patchset)

Usage

In the simplest, the following is the usage model:

$ check_clocks -d enp3s0 -v

You can interpret the Linux nanosecond time accuracy by looking at the absolute time stamps (for instance, epoch time) drift, timestamps read latencies, and time-domains delta in nanosecond: CLOCK_TAI, CLOCK_REALTIME, and gPTP.

Dumping timestamps and deltas

rt tstamp:      1521111579039529335
tai tstamp:     1521111579039529428
phc tstamp:     1521111579039531493
rt latency:     45
tai latency:    40
phc latency:    8384
phc-rt delta:   2158
phc-tai delta:  2065

More advanced monitoring usage model are also supported on certain Intel® Ethernet Controller supporting (PPS_CAPTUREASSERT callback pps_source_info API ):

  • [Endpoint PCI 8086:15f2] Intel® Ethernet Controller I225-LM for Time-Sensitive Networking (TSN)

  • [Endpoint PCI 8086:125b] Intel® Ethernet Controller I226-LM for Time-Sensitive Networking (TSN)

  • [Endpoint PCI 8086:157b, 8086:1533,…] Intel® Ethernet Controller I210-IT for Time-Sensitive Networking (TSN)

Note:

phc-rt delta: can be modified via International Atomic Time (TAI) and UTC currentUtcOffset default 37-second value:

$ pmc -u -b 0 -t 1 \
      "SET GRANDMASTER_SETTINGS_NP clockClass 248 clockAccuracy 0xfe offsetScaledLogVariance 0xffff currentUtcOffset 37 leap61 0 leap59 0 currentUtcOffsetValid 1 ptpTimescale 1 timeTraceable 1 frequencyTraceable 0 timeSource 0xa0"

The expected output should be similar to the following:

sending: SET GRANDMASTER_SETTINGS_NP
   2046a1.fffe.056bdc-0 seq 0 RESPONSE MANAGEMENT GRANDMASTER_SETTINGS_NP
            clockClass              248
            clockAccuracy           0xfe
            offsetScaledLogVariance 0xffff
            currentUtcOffset        0
            leap61                  0
            leap59                  0
            currentUtcOffsetValid   1
            ptpTimescale            1
            timeTraceable           1
            frequencyTraceable      0
            timeSource              0xa0

You can also use the check_clocks tool with the following options:

  • -a - Provides accurate PTP PPS and TSN QDisc continuous tracing

  • -v - Displays standard output at every split-second

$ check_clocks -d enp3s0 -v -a

You can interpret the Linux nanosecond time accuracy by looking at the absolute time stamps (for instance, epoch time) drift, timestamps read latencies, and time-domains delta in nanosecond: CLOCK_TAI, CLOCK_REALTIME, and gPTP.

Dumping timestamps and deltas

/dev/pps1 can be enabled from /dev/ptp1 on device enp3s0
trying PPS source "/dev/pps1"
found PPS source "/dev/pps1"
pps-phc-timestamp: 1659421181    sequence: 63840         offset: 20726   trt_lat=56691   tai_lat=37000056791
pps-phc-timestamp: 1659421182    sequence: 63841         offset: 20826   trt_lat=23809   tai_lat=37000023940
pps-phc-timestamp: 1659421183    sequence: 63842         offset: 12756   trt_lat=22415   tai_lat=37000022504
pps-phc-timestamp: 1659421184    sequence: 63843         offset: 13223   trt_lat=17613   tai_lat=37000017742
pps-phc-timestamp: 1659421185    sequence: 63844         offset: 14361   trt_lat=17442   tai_lat=37000017579
pps-phc-timestamp: 1659421186    sequence: 63845         offset: 13982   trt_lat=17403   tai_lat=37000017530
pps-phc-timestamp: 1659421187    sequence: 63846         offset: 13296   trt_lat=19543   tai_lat=37000019634
pps-phc-timestamp: 1659421188    sequence: 63847         offset: 13794   trt_lat=16073   tai_lat=37000016198

You can also use trace_event_clock_sync: of the check_clocks tool to represent time-synchronization using the Linux /sys/kernel/debug/tracing/options/markers tracing timeline:

  • etf_qdisc_check: and taprio_qdisc_check: represent QDisc time attributes that get through AF_NETLINK (rtnetlink)

  • taprio_sched_check: represents QDisc time-error calculation and cyclic 802.1-2018 EST scheduling intervals

  • taprio_stats_check:, ingress_stats_check:, and etf_stats_check: represent QDisc statistics especially over-limit or dropped packets

echo 1 > /sys/kernel/debug/tracing/options/markers
echo 1 > /sys/kernel/debug/tracing/options/record-tgid
echo 0 > /sys/kernel/debug/tracing/options/overwrite
echo 100000 > /sys/kernel/debug/tracing/buffer_size_kb
echo global > /sys/kernel/debug/tracing/trace_clock

Clean and start tracing:

echo > /sys/kernel/debug/tracing/trace
echo 1 > /sys/kernel/debug/tracing/tracing_on

Stop tracing and then display the trace buffer:

cat /sys/kernel/debug/tracing/trace
# tracer: nop
#
# entries-in-buffer/entries-written: 22693/1225143   #P:2
#
#                                _-----=> irqs-off
#                               / _----=> need-resched
#                              | / _----=> need-resched_lazy
#                              || / _---=> hardirq/softirq
#                              ||| / _--=> preempt-depth
#                              ||||/     delay
#           TASK-PID     CPU#  |||||   TIMESTAMP  FUNCTION
#              | |         |   |||||      |         |
         <idle>-0       (-------) [000] d...1.. 65428.638988: cpu_idle: state=1 cpu_id=0
         <idle>-0       (-------) [001] d..h1.. 65428.639011: irq_handler_entry: irq=158 name=enp1s0
         <idle>-0       (-------) [001] d..h1.. 65428.639012: irq_handler_exit: irq=158 ret=handled
         <idle>-0       (-------) [001] dN.h4.. 65428.639013: sched_wakeup: comm=irq/158-enp1s0 pid=1473 prio=49 target_cpu=001
         <idle>-0       (-------) [001] .N..1.. 65428.639014: cpu_idle: state=4294967295 cpu_id=1
         <idle>-0       (-------) [001] d...2.. 65428.639016: sched_switch: prev_comm=swapper/1 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=irq/158-enp1s0 next_pid=1473 next_prio=49
irq/158-enp1s0-1473    (   1473) [001] d...314 65428.639028: sched_wakeup: comm=check_clocks pid=2285 prio=120 target_cpu=001
irq/158-enp1s0-1473    (   1473) [001] d...2.. 65428.639031: sched_switch: prev_comm=irq/158-enp1s0 prev_pid=1473 prev_prio=49 prev_state=S ==> next_comm=check_clocks next_pid=2285 next_prio=120
   check_clocks-2285    (   2285) [001] ....... 65428.639053: tracing_mark_write: 0: trace_event_clock_sync: parent_ts=1525853974.18952 seq=64884 tai_lat=15850 ep=enp1s0
   check_clocks-2285    (   2285) [001] d..h1.. 65428.639056: softirq_raise: vec=8 [action=HRTIMER]
   check_clocks-2285    (   2285) [001] d.L.3.. 65428.639059: sched_wakeup: comm=ksoftirqd/1 pid=21 prio=120 target_cpu=001
   check_clocks-2285    (   2285) [001] d...2.. 65428.639062: sched_switch: prev_comm=check_clocks prev_pid=2285 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/1 next_pid=21 next_prio=120
   ...
   check_clocks-2285    (   2285) [001] ....... 65427.639411: tracing_mark_write: etf_qdisc_check: id=1 clk=TAI qdelay=50000 skipsock=0 qdeadline=0 qoffload=1 ep=enp1s0
   check_clocks-2285    (   2285) [001] ....... 65427.639386: tracing_mark_write: taprio_qdisc_check: clk=PTP basetime=1525795210 flag=0x2 seq=1140581394 ep=enp1s0
   ...
   check_clocks-2285    (   2285) [001] ....... 65427.639390: tracing_mark_write: taprio_sched_check: gate0=1525853973.795210 cmd=S mask=3ccccccc cyc=1000000 ep=enp1s0
   check_clocks-2285    (   2285) [001] ....... 65427.639392: tracing_mark_write: taprio_sched_check: gate1=1525853973.1295210 cmd=S mask=c210cccc cyc=1000000 ep=enp1s0
   ...
   check_clocks-2285    (   2285) [001] ....... 65427.639395: tracing_mark_write: taprio_stats_check: id=f qpkts=199503 qdrops=9816 ovrlmt=0 retry=0 estpps=-1 ep=enp1s0
   check_clocks-2285    (   2285) [001] ....... 65427.639413: tracing_mark_write: etf_stats_check: id=1 qpkts=1998 qdrops=2 ovrlmt=1 retry=0 estpps=-1 ep=enp1s0
   check_clocks-2285    (   2285) [001] ....... 65427.639421: tracing_mark_write: ingress_stats_check: id=fff1 qpkts=0 qdrops=0 ovrlmt=0 retry=0 estpps=-1 ep=enp1s0
   ...

Ethernet/TSN Time-view - Trace af_packet Events¶

The following section is applicable to any Host (|Windows|, |Linux|):

../../../_images/windows5.png

Open http://<target ipv4>:8000 on common Internet Browser.

../../../_images/timeviewer_tsn_capture_00.png

Note

Google* Chrome/Chromium or Microsoft* Edge are recommended. Opera* and Safari* browsers were not tried extensively, but are potential alternatives. Firefox* may be slow and Microsoft Internet Explore is incompatible.

../../../_images/timeviewer_tsn_capture_02.gif

Intel® ECI makes generic assumptions that the Linux* Ethernet/TSN usage model essentially leverages Linux system-level trace events and user-recorded significant timeline for IEEE std 802.1Q-2018 Linux af_packet traffic representation:

../../../_images/timeviewer_tsn_capture_01.png

Click Edit categories to view the full trace event configuration details. You can record a trace for manually selected settings instead of the default Linux* Ethernet/TSN.

../../../_images/timeviewer_tsn_capture_03.png

While editing, you have the option to record in two Modes:

  • Record until full - This mode will display a progress bar corresponding to the full percentage of the trace buffer, polled periodically using Catapult REST API GET call http://<machine-ipv4>:8000/json/get_buffer_percent_full.

    ../../../_images/timeviewer_tsn_capture_04.png
  • Record continuously - This mode will record silently until you click Stop.

    ../../../_images/timeviewer_tsn_capture_06.png

Click Record. The catapult REST API GET call http://<machine-ipv4>:8000/json/begin_recording?<base64 encoded user-config> will pass the default Linux* Ethernet/TSN pre-canned configuration:

  • Linux netdev egress Ethernet traffic representation using the net_dev_start_xmit, net_dev_xmit, net_dev_queue, and net_dev_xmit_timeout events

  • Linux netif ingress Ethernet traffic representation using the netif_rx_ni_entry and netif_rx_ni_exit events

  • Linux napi ingress Ethernet traffic representation using the napi_gro_receive_entry and napi_gro_receive_exit events

  • Linux Scheduler FSM representation using the sched_switch and sched_wakeup events

  • Linux interrupt handlers representation using all irq events

  • Linux kernel drivers work-queues job representation using all workqueue events

  • Linux CPU idle and frequency representation using cpu_idle, clock_set_rate``y, and ``cpu_frequency events

Click to view the equivalent manual command line

Activate events:

echo 1 > /sys/kernel/debug/tracing/events/net/net_dev_start_xmit/enable
echo 1 > /sys/kernel/debug/tracing/events/net/net_dev_xmit/enable
echo 1 > /sys/kernel/debug/tracing/events/net/net_dev_queue/enable
echo 1 > /sys/kernel/debug/tracing/events/net/net_dev_xmit_timeout/enable
echo 1 > /sys/kernel/debug/tracing/events/net/netif_rx_ni_entry/enable
echo 1 > /sys/kernel/debug/tracing/events/net/netif_rx_ni_exit/enable
echo 1 > /sys/kernel/debug/tracing/events/net/netif_rx_entry/enable
echo 1 > /sys/kernel/debug/tracing/events/net/netif_rx_exit/enable
echo 1 > /sys/kernel/debug/tracing/events/net/napi_gro_receive_entry/enable
echo 1 > /sys/kernel/debug/tracing/events/net/napi_gro_receive_exit/enable
echo 1 > /sys/kernel/debug/tracing/events/sched/sched_switch/enable
echo 1 > /sys/kernel/debug/tracing/events/sched/sched_wakeup/enable
echo 1 > /sys/kernel/debug/tracing/events/power/cpu_idle/enable
echo 1 > /sys/kernel/debug/tracing/events/power/cpu_frequency/enable
echo 1 > /sys/kernel/debug/tracing/events/power/clock_set_rate/enable
echo 1 > /sys/kernel/debug/tracing/events/workqueue/enable
echo 1 > /sys/kernel/debug/tracing/events/irq/enable
  • tracing/options/override disable flushing tracing/trace ftrace buffer on every new record

  • tracing/options/record-tgid add column process-id or TASK-PID

  • tracing/buffer_size_kb size ftrace buffers, for example 100000 equivalent to 100 MB for each CPU core

Click to view the equivalent manual command line

Select tracing options:

echo 100000 > /sys/kernel/debug/tracing/buffer_size_kb
echo 1 > /sys/kernel/debug/tracing/options/record-tgid
echo 0 > /sys/kernel/debug/tracing/options/overwrite
echo global > /sys/kernel/debug/tracing/trace_clock
echo > /sys/kernel/debug/tracing/trace
echo 1 > /sys/kernel/debug/tracing/tracing_on

Click Stop. The catapult REST API GET call http://<machine-ipv4>:8000/json/end_recording_compressed?<base64 encoded compressed-json trace dump> retrieves and renders the trace JSON record onto the time-view UI.

Click to view the equivalent manual command line

Stop tracing, and then redirect the standard output trace buffer to a temporary file:

echo 0 > /sys/kernel/debug/tracing/tracing_on
cat /sys/kernel/debug/tracing/trace > /tmp/trace.txt
../../../_images/timeviewer_capture_02.png
../../../_images/timeviewer_capture_03.png
../../../_images/timeviewer_capture_04.png
../../../_images/timeviewer_capture_07.png

The ? Helper and M Meta-data helper buttons explain navigation options and tracing configuration to reconcile the recording context.

../../../_images/timeviewer_tsn_capture_08.png
../../../_images/timeviewer_tsn_capture_09.png

You can also click Save to archive to the trace_my-tsn-usecase.json.gz file for redistribution.

../../../_images/timeviewer_tsn_capture_07.png

Ethernet/TSN Time-view - Trace af_packet Events with Advanced function_graph¶

Important

The tracing/options/funcgraph-flat enable low-overhead function-graph tracer it allow to compress function Entry or Exit into a single Trace event (kernel tracing CONFIG_TRACE_GRAPH_PRINT_FLAT).

../../../_images/timeviewer_tsn_capture_10.png

Intel® ECI makes generic assumptions regarding the Linux* Ethernet/TSN* usage Linux* af_packet events with Linux function tracing Entry/Exit time.

The catapult REST API GET call http://<machine-ipv4>:8000/json/begin_recording?<base64 encoded user-config> passes the resulting Manually select settings trace events and filtered function configurations.

Click to view the equivalent manual command line

echo 0 > /sys/kernel/debug/tracing/tracing_on
echo 1 > /sys/kernel/debug/tracing/options/funcgraph-abstime
echo 1 > /sys/kernel/debug/tracing/options/funcgraph-cpu
echo 1 > /sys/kernel/debug/tracing/options/funcgraph-proc
echo 1 > /sys/kernel/debug/tracing/options/funcgraph-flat

From the available_filter_functions, ONLY enable the relevant IEEE std 802.1Q-2018. For example, QDisc TAPRIO, QDisc ETF, or both.

echo "etf_reset" > /sys/kernel/debug/tracing/set_ftrace_filter
echo "etf_enqueue_timesortedlist" >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "etf_peek_timesortedlist" >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "etf_dequeue_timesortedlist" >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "etf_init" >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "etf_reset" >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "etf_destroy" >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "etf_dump" >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "taprio_reset" >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "taprio_enqueue" >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "taprio_peek" >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "taprio_peek_offload" >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "taprio_peek_soft" >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "taprio_dequeue" >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "taprio_dequeue_offload" >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "taprio_dequeue_soft" >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "taprio_walk" >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "taprio_change" >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "taprio_destroy" >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "taprio_dump" >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "taprio_init" >> /sys/kernel/debug/tracing/set_ftrace_filter
  • [Endpoint PCI 8086:15f2] Intel® Ethernet Controller I225-LM for Time-Sensitive Networking (TSN)

echo "igc_setup_tc" >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "igc_reset" >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "igc_tsn_new_flags" >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "igc_tsn_enable_offload" >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "igc_tsn_offload_apply" >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "igc_ptp_tx_hang" >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "igc_ptp_rx_pktstamp" >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "igc_ptp_suspend" >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "igc_ptp_reset" >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "igc_ptp_read" >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "igc_ptp_init" >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "igc_ptp_stop" >> /sys/kernel/debug/tracing/set_ftrace_filter
  • [Endpoint PCI 8086:125b] Intel® Ethernet Controller I226-LM for Time-Sensitive Networking (TSN)

echo "igc_setup_tc" >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "igc_reset" >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "igc_tsn_new_flags" >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "igc_tsn_enable_offload" >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "igc_tsn_offload_apply" >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "igc_ptp_tx_hang" >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "igc_ptp_rx_pktstamp" >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "igc_ptp_suspend" >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "igc_ptp_reset" >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "igc_ptp_read" >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "igc_ptp_init" >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "igc_ptp_stop" >> /sys/kernel/debug/tracing/set_ftrace_filter
  • [Endpoint PCI 8086:157b, 8086:1533,…] Intel® Ethernet Controller I210-IT for Time-Sensitive Networking (TSN)

echo "igb_reset" >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "igb_tx_timeout" >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "igb_config_tx_modes" >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "igb_ptp_settime_i210"  >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "igb_ptp_feature_enable"  >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "igb_ptp_verify_pin"  >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "igb_ptp_set_timestamp_mode"  >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "igb_ptp_overflow_check"  >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "igb_ptp_feature_enable_i210"  >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "igb_ptp_gettimex_i210"  >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "igb_ptp_adjtime_i210"  >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "igb_ptp_systim_to_hwtstamp"  >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "igb_ptp_tx_work"  >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "igb_ptp_rx_hang"  >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "igb_ptp_tx_hang"  >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "igb_ptp_rx_pktstamp"  >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "igb_ptp_rx_rgtstamp"  >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "igb_ptp_get_ts_config"  >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "igb_ptp_set_ts_config"  >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "igb_ptp_suspend"  >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "igb_ptp_stop"  >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "igb_ptp_reset"  >> /sys/kernel/debug/tracing/set_ftrace_filter
echo "igb_ptp_init"  >> /sys/kernel/debug/tracing/set_ftrace_filter

Enable function_graph as the current tracer. Then, clean and start tracing:

echo function-trace > /sys/kernel/debug/tracing/trace_options
echo function_graph >  /sys/kernel/debug/tracing/current_tracer
echo > /sys/kernel/debug/tracing/trace
echo 1 > /sys/kernel/debug/tracing/tracing_on

Stop tracing and send the standard output trace buffer to a file:

echo 0 > /sys/kernel/debug/tracing/tracing_on
cat /sys/kernel/debug/tracing/trace > /tmp/func-trace.txt

When you click Stop, catapult REST API GET call http://<machine-ipv4>:8000/json/end_recording_compressed?<base64 encoded compressed-json trace dump> will retrieve and render the trace JSON record onto the time-view UI.

../../../_images/timeviewer_capture_05.png

Ethernet/TSN Time-view - Trace af_packet Events with Advanced intel_pt//¶

A more advanced usage model can combine Linux* af_packet events with Linux perf event tracing, such as perf/intel_pt.

../../../_images/timeviewer_tsn_capture_11.png

Intel® ECI makes generic assumptions about the perf-intel-pt features usage model using perf record and perf scripts available options:

Important

It is highly recommended that with intel_pt/branch=1/, intel_pt//k, intel_pt//, or intel_pt/cyc=1/u, record configurations to Filter branch on a particular process name (ptp4l in this example) to avoid decoding and loading congestion:

  • intel_pt/branch=1/u save intel_pt records all branches call and returns user space ONLY across all cores

  • intel_pt//k save intel_pt records all branches call and returns ONLY kernel space across all cores

  • intel_pt// save intel_pt records all branches call and returns type user space and kernel space across all cores

  • intel_pt/cyc=1/u perf instructions hardware counter derived from the intel_pt branch records across all cores

  • intel_pt/branch=0,ptw=1/ save intel_pt records only PTWRITE from all cores and disabled if cpuid is not supported

  • intel_pt/branch=0,pwr_evt=1/ save intel_pt records only POWER EVENTS from all cores and disabled if cpuid is not supported

  • intel_pt//u,branch-misses:u save intel_pt call-graph of all branch-misses user space records from all cores

  • intel_pt//u,<perf-event>:u save intel_pt call-graph for a particular perf event user space records from all cores

Click Record. The catapult REST API GET call http://<machine-ipv4>:8000/json/begin_recording?<base64 encoded user-config> passes the resulting Manually select settings trace events and Linux perf configurations:

../../../_images/linux-tracing-to-catapult.png

Click to view the equivalent manual command line

echo > /sys/kernel/debug/tracing/trace && \
echo /proc/kallsym > /tmp/kallsym.log
echo 'kernel.kptr_restrict=0' >> /etc/sysctl.conf
echo 1 > /sys/kernel/debug/tracing/tracing_on && \
perf record -e '{intel_pt//}' -a sleep 1 && -p <ptp4l pid> \
echo 0 > /sys/kernel/debug/tracing/tracing_on
cat /sys/kernel/debug/tracing/trace > /tmp/trace.txt
perf script -i perf.data \
--kallsym /tmp/kallsym.log --ns --itrace=crxwp \
-s /usr/shared/catapult/catapult_ftrace-perf.py -- \
--input /tmp/trace.txt -t -f json \
-o /tmp/perf+ftrace_intel-pt.json

Click Stop. The catapult REST api GET call http://<machine-ipv4>:8000/json/end_recording_compressed?<base64 encoded compressed-json trace dump> retrieves and renders the trace JSON record onto the time-view UI.

../../../_images/timeviewer_tsn_capture_12.png

The ECI documentation instantiates a local time-view UI for sharing archives file and performs a event timeline deep-dive analysis.

../../../_images/timeviewer_capture_06.gif


Previous

© Copyright 2019-2024, Intel.  Last updated on Sep 12, 2024. Published on Jun 23, 2025

ECI Documentation v: 3.3
Document Versions
3.3
3.2
3.1
3.0.2
3.0.1
3.0
2.6
2.5