Real-time properties of Linux¶
Regular Linux is not a real-time operating system. Profinet have rather strict timing constraints. For example a Simatic PLC (with default settings) will send an alarm if no incoming Profinet frame is received for 7-8 ms. So it is important that Linux is responsive enough.
There are a few methods that can be used to improve the Linux responsiveness. The most important is to use FIFO scheduling and to isolate the application on a separate CPU core.
Use USE_SCHED_FIFO option¶
Select the FIFO Linux kernel scheduling option. This is done by passing
-DUSE_SCHED_FIFO=ON command line argument to cmake.
Run the application on a separate processor core¶
It is possible to tell the Linux kernel not to put any processes on a specific processor core. This assumes that you have more than one core in your CPU. Check it using:
By setting the
isolcpus=2 Linux boot command, the kernel will not put any
processes on CPU core number 2 automatically. This option is typically set from
the boot loader.
The best way to check which CPU cores that are currently isolated:
To see which kernel command line options that have been used:
Put your Profinet application on the isolated CPU core. It is done using:
taskset -c 2 pn_dev
-c 2 tells which CPU core to use.
By applying the real-time patches (PREEMPT_RT) the real-time properties can be improved.
For more details, see:
It is important to write you application so that it can use the benefits of the real-time patches. This includes running in a separate thread and setting the priorities properly.
For the real-time patches to have an effect on p-net, set the
Increase application cycle time¶
For testing, you can increase the cycle time from the PLC in order to reduce the time-out problems. Also the allowed number of missed frames can be increased in the PLC settings.
Network interface hardware¶
If your Ethernet network interface is connected via USB, there can be an additional latency. This can affect the frame-to-frame interval for transmitted Profinet frames.
For example the Ethernet interface in a Raspberry Pi 3 is connected via an USB bus internally.