real-time linux (rt-preempt) + sched deadline (linux

Post on 25-Dec-2021

14 Views

Category:

Documents

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Real-Time Linux (RT-Preempt)

+

SCHED DEADLINE (Linux Kernel 3.14)

Josef Widder

BRDS 2015

Misconceptions about Real-Time Computing [Sta88]

I Advances in supercomputer hardware will take care ofreal-time requiremens

I Real-time computing is equivalent to fast computing

I Real-time programming is assembly coding

I Real-time is meaningless if hardware will fail or softwarecontains bugs

I Real-time systems function in static environments

2

Misconceptions about Real-Time Computing [Sta88]

I Advances in supercomputer hardware will take care ofreal-time requiremens

I Real-time computing is equivalent to fast computing

I Real-time programming is assembly coding

I Real-time is meaningless if hardware will fail or softwarecontains bugs

I Real-time systems function in static environments

2

Misconceptions about Real-Time Computing [Sta88]

I Advances in supercomputer hardware will take care ofreal-time requiremens

I Real-time computing is equivalent to fast computing

I Real-time programming is assembly coding

I Real-time is meaningless if hardware will fail or softwarecontains bugs

I Real-time systems function in static environments

2

Misconceptions about Real-Time Computing [Sta88]

I Advances in supercomputer hardware will take care ofreal-time requiremens

I Real-time computing is equivalent to fast computing

I Real-time programming is assembly coding

I Real-time is meaningless if hardware will fail or softwarecontains bugs

I Real-time systems function in static environments

2

Misconceptions about Real-Time Computing [Sta88]

I Advances in supercomputer hardware will take care ofreal-time requiremens

I Real-time computing is equivalent to fast computing

I Real-time programming is assembly coding

I Real-time is meaningless if hardware will fail or softwarecontains bugs

I Real-time systems function in static environments

2

Real-Time vs. general-purpose OS

real-timealways predictable behavior

I timing guarantees

I under worst case behavior

general-purposemost of the time good behavior

I high throughput

I under normal (avg. case) behavior

3

Real-Time vs. general-purpose OS

real-timealways predictable behavior

I timing guarantees

I under worst case behavior

general-purposemost of the time good behavior

I high throughput

I under normal (avg. case) behavior

3

Why (Vanilla) Linux is not Real-time (bird’s eye view)

I general-purpose

I high functionality

I optimized for average case

I latency my vary and may not be bounded

(even with patch, convenient Linux features should not be touched)

4

Why (Vanilla) Linux is not Real-time (bird’s eye view)

I general-purpose

I high functionality

I optimized for average case

I latency my vary and may not be bounded

(even with patch, convenient Linux features should not be touched)

4

Why Linux is not Real-time (a closer look)

I Applications run in user space

I Hardware interaction is in kernel

I kernel not preempted by user threads ⇒

I event triggers high-priority thread

I thread cannot preempt kernel⇒ large latency possible > 100ms

I “classic” time sharing scheduling

5

CONFIG PREEMPT RT patch

to improve RT behavior, “reduce special status” of kernel

I kernel code outside of

I spinlocks protected areas

I interrupt handlers

may be preempted

I WC latency drops to (single digit) ms

Unlike semaphores, spinlocks may be used in code that cannotsleep, such as interrupt handlers. When properly used, spinlocksoffer higher performance than semaphores in general.

6

How does it work? [faq07]

The patch converts Linux into a fully preemptible kernel:

I in-kernel locking-primitives (using spinlocks) preemptiblethrough reimplementation with rtmutexes.RT-mutexes extend the semantics of simple mutexes by thepriority inheritance protocol

I citical sections protected by spinlock t and rwlock t arenow preemptible.rwlock t allows multiple readers in critical section

I priority inheritance for in-kernel spinlocks and semaphores.

I converting interrupt handlers into preemptible kernel threads

I user space POSIX timers with high resolution.

7

How does it work? [faq07]

The patch converts Linux into a fully preemptible kernel:

I in-kernel locking-primitives (using spinlocks) preemptiblethrough reimplementation with rtmutexes.RT-mutexes extend the semantics of simple mutexes by thepriority inheritance protocol

I citical sections protected by spinlock t and rwlock t arenow preemptible.rwlock t allows multiple readers in critical section

I priority inheritance for in-kernel spinlocks and semaphores.

I converting interrupt handlers into preemptible kernel threads

I user space POSIX timers with high resolution.

7

How does it work? [faq07]

The patch converts Linux into a fully preemptible kernel:

I in-kernel locking-primitives (using spinlocks) preemptiblethrough reimplementation with rtmutexes.RT-mutexes extend the semantics of simple mutexes by thepriority inheritance protocol

I citical sections protected by spinlock t and rwlock t arenow preemptible.rwlock t allows multiple readers in critical section

I priority inheritance for in-kernel spinlocks and semaphores.

I converting interrupt handlers into preemptible kernel threads

I user space POSIX timers with high resolution.

7

How does it work? [faq07]

The patch converts Linux into a fully preemptible kernel:

I in-kernel locking-primitives (using spinlocks) preemptiblethrough reimplementation with rtmutexes.RT-mutexes extend the semantics of simple mutexes by thepriority inheritance protocol

I citical sections protected by spinlock t and rwlock t arenow preemptible.rwlock t allows multiple readers in critical section

I priority inheritance for in-kernel spinlocks and semaphores.

I converting interrupt handlers into preemptible kernel threads

I user space POSIX timers with high resolution.

7

What sort of real-time? [faq07]

it depends. . .

I speed of the CPU and the architecture

I device drivers

I hardware

e.g., DMA activity can introduce significant latencies

e.g., some firmwares can stop the system for housekeeping(SMI, Service Management Interrupts)SMIs can not be trapped by the OS

. . . and it is still Linux ⇒ certain features must not be used. . .

8

What sort of real-time? [faq07]

it depends. . .

I speed of the CPU and the architecture

I device drivers

I hardware

e.g., DMA activity can introduce significant latencies

e.g., some firmwares can stop the system for housekeeping(SMI, Service Management Interrupts)SMIs can not be trapped by the OS

. . . and it is still Linux ⇒ certain features must not be used. . .

8

Guidelines for writing RT applications [faq07]

I Call mlockall() as soon as possible from main().causes all of the pages mapped by the address space of aprocess to be memory residenti.e., preventing that memory is paged to the swap area

I Create all threads at startup time of the applicationi.e., never start threads dynamically during mission time

I Touch each page of the entire stack of each thread

I Never use system calls that are known to generate page faults,such as fopen().opening files does mmap() system call ⇒ page fault

9

Guidelines for writing RT applications [faq07]

I Call mlockall() as soon as possible from main().causes all of the pages mapped by the address space of aprocess to be memory residenti.e., preventing that memory is paged to the swap area

I Create all threads at startup time of the applicationi.e., never start threads dynamically during mission time

I Touch each page of the entire stack of each thread

I Never use system calls that are known to generate page faults,such as fopen().opening files does mmap() system call ⇒ page fault

9

Guidelines for writing RT applications [faq07]

I Call mlockall() as soon as possible from main().causes all of the pages mapped by the address space of aprocess to be memory residenti.e., preventing that memory is paged to the swap area

I Create all threads at startup time of the applicationi.e., never start threads dynamically during mission time

I Touch each page of the entire stack of each thread

I Never use system calls that are known to generate page faults,such as fopen().opening files does mmap() system call ⇒ page fault

9

How to not build RT applications [how07]

Don’t use fancy stuff!

Direct memory access

I latency in microseconds by

I SATA/PATA/SCSI devices

I network adapters

I video cards

I can sometimes be controlled by device driversthroughput vs. latency

I this problem independent of OS

Power managementWatts vs. latency

Hyperthreading and out-of-order executionperformance vs. latency

10

How to not build RT applications [how07]

Don’t use fancy stuff!

Direct memory access

I latency in microseconds by

I SATA/PATA/SCSI devices

I network adapters

I video cards

I can sometimes be controlled by device driversthroughput vs. latency

I this problem independent of OS

Power managementWatts vs. latency

Hyperthreading and out-of-order executionperformance vs. latency

10

How to not build RT applications [how07]

Don’t use fancy stuff!

Direct memory access

I latency in microseconds by

I SATA/PATA/SCSI devices

I network adapters

I video cards

I can sometimes be controlled by device driversthroughput vs. latency

I this problem independent of OS

Power managementWatts vs. latency

Hyperthreading and out-of-order executionperformance vs. latency

10

More Guidelines. . . [how07]

I do not use VGA text consolevery large latency

I use serial console, ssh, telnet

I take care of page faults (swapping) during start-up

I Call directly from the main() entry the mlockall() call

I Create all threads at startup time of the application.

I Reserve a pool of memory to do new/delete or malloc/free

I Never use system calls that are known to generate pagefaults.

I do not configure application with priority 99

some watchdog threads need higher priority than appl.

I use mmap to pass data around

11

More Guidelines. . . [how07]

I do not use VGA text consolevery large latency

I use serial console, ssh, telnet

I take care of page faults (swapping) during start-up

I Call directly from the main() entry the mlockall() call

I Create all threads at startup time of the application.

I Reserve a pool of memory to do new/delete or malloc/free

I Never use system calls that are known to generate pagefaults.

I do not configure application with priority 99

some watchdog threads need higher priority than appl.

I use mmap to pass data around

11

More Guidelines. . . [how07]

I do not use VGA text consolevery large latency

I use serial console, ssh, telnet

I take care of page faults (swapping) during start-up

I Call directly from the main() entry the mlockall() call

I Create all threads at startup time of the application.

I Reserve a pool of memory to do new/delete or malloc/free

I Never use system calls that are known to generate pagefaults.

I do not configure application with priority 99

some watchdog threads need higher priority than appl.

I use mmap to pass data around

11

Install [rth06]

it is a kernel patch. . . thus something like this:

getting the sources:

# wget ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.23.1.tar.bz2

# wget http://www.kernel.org/pub/linux/kernel/projects/rt/patch-2.6.23.1-rt11.bz2

Patching the Sources

# tar xfj linux-2.6.23.1.tar.bz2

# cd linux-2.6.23.1

# bzcat ../patch-2.6.23.1-rt11.bz2 | patch -p1

configuring and build. . .

let’s see “hello, world.” and kernel detection [rth06]

12

Install [rth06]

it is a kernel patch. . . thus something like this:

getting the sources:

# wget ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.23.1.tar.bz2

# wget http://www.kernel.org/pub/linux/kernel/projects/rt/patch-2.6.23.1-rt11.bz2

Patching the Sources

# tar xfj linux-2.6.23.1.tar.bz2

# cd linux-2.6.23.1

# bzcat ../patch-2.6.23.1-rt11.bz2 | patch -p1

configuring and build. . .

let’s see “hello, world.” and kernel detection [rth06]

12

SCHED DEADLINE

“Classic” Linux Schedulers

Normal scheduling policies

I SCHED OTHER

standard round-robin time-sharing policy

I SCHED BATCH

for ”batch” style execution of processes“middle priority”

I SCHED IDLE

for running very low priority background jobs

Linux real-time schedulers with static priorities:

I SCHED FIFO: first in first outno time slicing

I SCHED RR: round robintime slices with preemption

14

“Classic” Linux Schedulers

Normal scheduling policies

I SCHED OTHER

standard round-robin time-sharing policy

I SCHED BATCH

for ”batch” style execution of processes“middle priority”

I SCHED IDLE

for running very low priority background jobs

Linux real-time schedulers with static priorities:

I SCHED FIFO: first in first outno time slicing

I SCHED RR: round robintime slices with preemption

14

SCHED DEADLINE

I real-time scheduling class in Linux

I earliest deadline first (EDF)

I dynamic priorities

I shortest deadline = highest priority

I optimal (restrictions apply)

I taskset is schedulable iff U ≤ 1

I released in kernel 3.14 on March 30, 2014.

15

There are some issues with EDF

I critical sectionpriority inheritance (deadline inheritance still a to-do

I precendence constraintsshifting deadlines w.r.t. dependent tasks

I overloadsadmission control

I context switch for free“in theory there is no differencebetween theory and practice. . . ”

. . . see RT Scheduling lecture

let’s see Linux implementation of EDF. . .

16

There are some issues with EDF

I critical sectionpriority inheritance (deadline inheritance still a to-do

I precendence constraintsshifting deadlines w.r.t. dependent tasks

I overloadsadmission control

I context switch for free“in theory there is no differencebetween theory and practice. . . ”

. . . see RT Scheduling lecture

let’s see Linux implementation of EDF. . .

16

sched-deadline.txt [EDF]

0. WARNING

===========

Fiddling with these settings can result in an

unpredictable or even unstable system behavior. As

for -rt (group) scheduling, it is assumed that root

users know what they’re doing.

17

Scheduling Guarantee

3 parameters

I runtime

I period

I deadline

The task receives runtime time units within deadline if a properadmission control strategy is used.

WCET vs. runtime?

In the example: deadline = period

18

Constant Bandwidth Server Scheduling (CBS) [EDF]

EDF-based scheduling algorithm that allows:

I periodic (sporadic) tasks with hard deadlinesutilization Up

I a CB server s with given utilization Us for “soft tasks”CBS ensures bounded utilization even in overload

I schedulable iff Us + Up ≤ 1

Tasks in CBS:

I Task cannot exceed its registered budget,

I Task cannot be unblocked when a ratio between remainingbudget and remaining deadline is higher than bandwidth.

19

Constant Bandwidth Server Scheduling (CBS) [EDF]

EDF-based scheduling algorithm that allows:

I periodic (sporadic) tasks with hard deadlinesutilization Up

I a CB server s with given utilization Us for “soft tasks”CBS ensures bounded utilization even in overload

I schedulable iff Us + Up ≤ 1

Tasks in CBS:

I Task cannot exceed its registered budget,

I Task cannot be unblocked when a ratio between remainingbudget and remaining deadline is higher than bandwidth.

19

Task interface

Specifying a periodic/sporadic task requires:

I a (maximum/typical) instance execution time,

I a minimum interval between consecutive instances,

I a time constraint by which each instance must be completed.

Therefore:

I struct sched attr with all the necessary fields

I sched setattr() and sched getattr()

scheduling related syscalls that manipulate sched attr

20

Task interface

Specifying a periodic/sporadic task requires:

I a (maximum/typical) instance execution time,

I a minimum interval between consecutive instances,

I a time constraint by which each instance must be completed.

Therefore:

I struct sched attr with all the necessary fields

I sched setattr() and sched getattr()

scheduling related syscalls that manipulate sched attr

20

Admission control

I interface parameters are only used at admission control timewhen user calls sched setattr()

I system-wide settings under proc file system

I for a root domain comprising M CPUs, -deadline tasks canbe created while the sum of their bandwidths stays below:M * (sched rt runtime us / sched rt period us)

I disable by writing -1 in/proc/sys/kernel/sched rt runtime us

21

minimal main. . . [EDF]

22

Thanks!

References I

Deadline task scheduling.https:

//www.kernel.org/doc/Documentation/scheduler/sched-deadline.txt.Accessed: Oct, 2015.

Frequently Asked Questions: RTwiki.https://rt.wiki.kernel.org/index.php/Frequently_Asked_Questions,2007.Accessed: Oct, 2015.

HOWTO: Build an RT-application Jump to: navigation, search.https://rt.wiki.kernel.org/index.php/HOWTO:_Build_an_RT-application,2007.Accessed: Oct, 2015.

RT PREEMPT HOWTO.https://rt.wiki.kernel.org/index.php/RT_PREEMPT_HOWTO, 2006.Accessed: Oct, 2015.

John A. Stankovic.Misconceptions about real-time computing.IEEE Computer, 21(10):10–19, 1988.

24

top related