Statistics
While running the RTC Testbench it collects statistics about various aspects including round
trip and one way times, errors, processing and workload execution. This sections explains what
statistics are collected and how they can be obtained and visualized.
Statistics
The following table shows all gathered statistics. All statistics are collected per traffic class.
Name |
Description |
|---|---|
FrameIdErrors |
Is incremented if a traffic class receives a packet with wrong Profinet frame id. This could happen e.g., due to a wrong XDP eBPF program. Should be zero. |
FramesReceived |
How many frames have been received and processed. |
FramesSent |
How many frames have been transmitted. |
Oneway[Min,Max,Av] [us] |
One way time measures the time between sending a packet from reference to mirror (or the other way around) and receiving it on the other side. The time stamps for this are taken in software on the application level. |
OnewayOutliers |
Incremented if one way time is greater than cycle time. Should be zero. |
OutofOrderErrors |
Is incremented if a frame does not have the expected sequence number. This can indicate out of order transmission, but will also be increased if a packet is lost. Should be zero. |
PayloadErrors |
Is incremented if a frame does not have the expected payload. May happen due to driver bugs. Should be zero. |
ProcBatch[Min,Max,Av] [us] |
Latency from the first RX hardware timestamp to the last TX hardware timestamp (batch processing latency per cycle). |
ProcFirst[Min,Max,Av] [us] |
Latency from the first RX hardware timestamp to the first TX hardware timestamp (first-frame processing latency per cycle). |
RoundTrip[Min,Max,Av] [us] |
Round trip delay measures the time from reference to mirror and back. The delay is calculated based on software timestamps. Also the mirror sends back the frame not immediately, but rather in next cycle. Therefore, the round trip time should be less than 2 * cycle time. |
RoundTripOutliers [us] |
Is increment if a round trip time is greater than 2 * cycle time. This usually indicates some real time issue (e.g., kernel, driver, hardware, …). Should be zero. |
Rx[Min,Max,Av] [us] |
Latency from NIC hardware to user space based on hardware timestamps. |
RxHw2Xdp[Min,Max,Av] [us] |
Latency from NIC hardware to XDP program based on hardware timestamps. |
RxWorkload[Min,Max,Av] [us] |
Duration of workload execution. |
RxXdp2App[Min,Max,Av] [us] |
Latency from XDP program to user space. |
Tx[Min,Max,Av] [us] |
Latency from user space enqueue to hardware transmit based on hardware timestamps. |
TxHwTimestampMissing |
Is incremented if hardware timestamp requested, but only software timestamp available. |
Note
Some statistics (e.g., ones based on hardware timestamps) are only available in combination with XDP.
File log
All statistics are logged once per collection interval into a file log in text form.
MQTT / Grafana
Furthermore, the statistics can be submitted with MQTT and visualized with Grafana.
See MQTT and Grafana Integration for more information.
JSON/UDP
In addition, there is a JSON/UDP logger. This one submits the statistics in JSON representation per UDP once per collection interval. This is useful to get the statistics into other tools.
In order to use the JSON/UDP logging, the following configuration parameters can be used:
Option |
Description |
|---|---|
StatsCollectionIntervalNS |
Interval in which a summary of the data is generated, typically 1s |
LogJson |
Enable and/or disable JSON logging |
LogJsonThreadPriority |
Thread priority for the logging thread, usually low < 7 |
LogJsonThreadCpu |
Thread CPU affinity |
LogJsonHost |
IP address/host name where to send the JSON/UDP packets |
LogJsonPort |
Port used by the UDP communication |
LogJsonMeasurementName |
Used to distinguish measurements coming from different machines |
The code base contains a script to collect and print the statistics data. The user has to provide the measurement name and the statistics of interest.
Example:
./scripts/stat.pl -p 8888 -m testbench1 -t TsnHigh -s FramesSent -s FramesReceived -s Workload*
Measurement: testbench1 -- TC: TsnHigh
FramesReceived: 0
FramesSent: 24016
RxWorkloadAv: 0
RxWorkloadMax: 0
RxWorkloadMin: 18446744073709551615