User Tools

Site Tools


realtime:documentation:howto:tools:cpu-partitioning:start

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
realtime:documentation:howto:tools:cpu-partitioning:start [2024/05/27 23:33]
alison [Realtime application best practices]
realtime:documentation:howto:tools:cpu-partitioning:start [2024/07/28 15:49] (current)
alison [Softirqs and kthreads] improve hyperlink
Line 88: Line 88:
 Softirqs are kernel threads which are often challenging to manage on realtime systems. ​ Softirqs may run in atomic context immediately following a hard IRQ which "​raises"​ them, or they may be executed in process context by per-CPU kernel threads called //​ksoftirqd/​n//,​ where //n// is the core number. ​  There are 10 kinds of softirqs which perform diverse tasks for the networking, block, scheduling, timer and [[https://​wiki.linuxfoundation.org/​realtime/​documentation/​technical_details/​rcu|RCU]] subsystems as well as executing callbacks for a large number of device drivers via the tasklet mechanism. ​  Only one softirq of any kind may be active at any given time on a core.   Thus if ksoftirqd is preempted by a hard IRQ, the associated soft interrupt is disabled from following it immediately,​ and must wait for ksoftirqd. ​  This unfortunate situation has been called "the new Big Kernel Lock" by realtime Linux maintainers. Softirqs are kernel threads which are often challenging to manage on realtime systems. ​ Softirqs may run in atomic context immediately following a hard IRQ which "​raises"​ them, or they may be executed in process context by per-CPU kernel threads called //​ksoftirqd/​n//,​ where //n// is the core number. ​  There are 10 kinds of softirqs which perform diverse tasks for the networking, block, scheduling, timer and [[https://​wiki.linuxfoundation.org/​realtime/​documentation/​technical_details/​rcu|RCU]] subsystems as well as executing callbacks for a large number of device drivers via the tasklet mechanism. ​  Only one softirq of any kind may be active at any given time on a core.   Thus if ksoftirqd is preempted by a hard IRQ, the associated soft interrupt is disabled from following it immediately,​ and must wait for ksoftirqd. ​  This unfortunate situation has been called "the new Big Kernel Lock" by realtime Linux maintainers.
  
-Kernel configuration allows system managers to move the NET_RX and RCU callbacks out of softirqs and into their own kthreads. ​ Since kernel 5.12, moving the NET_RX into its own kthread is possible by //​echo//​-ing '​1'​ into the //​threaded//​ sysfs attribute associated with a network device. ​ The process table will afterwards include a new kthread called //​napi/​xxx//,​ where xxx is the interface name. [Read more about the [[https://​wiki.linuxfoundation.org/​networking/​napi?s[]=napi|NAPI]] mechanism in the networking wiki.] ​ Userspace may employ //taskset// to pin this kthread on any core.   ​Moving the softirq into its own kthread incurs a context-switch penalty, but even so may be worthwhile on systems where bursts of network traffic unacceptably delay applications. ​  ​[[https://​wiki.linuxfoundation.org/​realtime/​documentation/​technical_details/​rcu?​s[]=rcu#​rcu_callback_offloading|RCU Callback Offloading]] produces a new set of kthreads, and can be accomplished via a combination of compile-time configuration with boot-time command-line parameters.+Kernel configuration allows system managers to move the NET_RX and RCU callbacks out of softirqs and into their own kthreads. ​ Since kernel 5.12, moving the NET_RX into its own kthread is possible by //​echo//​-ing '​1'​ into the //​threaded//​ sysfs attribute associated with a network device. ​ The process table will afterwards include a new kthread called //​napi/​xxx//,​ where xxx is the interface name. [Read more about the [[https://​wiki.linuxfoundation.org/​networking/​napi|NAPI]] mechanism in the networking wiki.] ​ Userspace may employ //taskset// to pin this kthread on any core.   ​Moving the softirq into its own kthread incurs a context-switch penalty, but even so may be worthwhile on systems where bursts of network traffic unacceptably delay applications. ​  ​[[https://​wiki.linuxfoundation.org/​realtime/​documentation/​technical_details/​rcu|RCU Callback Offloading]] produces a new set of kthreads, and can be accomplished via a combination of compile-time configuration with boot-time command-line parameters.
  
realtime/documentation/howto/tools/cpu-partitioning/start.1716852826.txt.gz ยท Last modified: 2024/05/27 23:33 by alison