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:

cat /proc/cpuinfo

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:

cat /sys/devices/system/cpu/isolated

To see which kernel command line options that have been used:

cat /proc/cmdline

Put your Profinet application on the isolated CPU core. It is done using:

taskset -c 2 pn_dev

where -c 2 tells which CPU core to use.

Real-time patches

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 USE_SCHED_FIFO cmake option.

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.