SlideShare a Scribd company logo
Tuning systemd for Embedded
Alison Chaiken
alison_chaiken@mentor.com
Mar. 23, 2015
Latest version: http://she-devel.com/ELC_systemd.pdf
Auxiliary files: http://she-devel.com/ELC_auxiliary.tar.bz2
Text in blue is hyperlinked.
Quiz: 
what is the most widely 
used
Linux init system?
?
?
?
?
?? ??
?
Linux needs to keep innovating
LicensedunderCCBY-SA3.0
http://commons.wikimedia.org/wiki/File:Fire-lite-bg-
10.jpg#mediaviewer/File:Fire-lite-bg-10.jpg
“No one has a guaranteed
position in the technology
industry.” -- Bill Gates, Pirates of
Silicon Valley
“The only thing that can ever hurt
Linux is Linux itself.” -- GKH,
Linux Action Show
“Success is a self-correcting
phenomenom.” -- Gary Hamel
Philosophy of systemd
Extract duplicate functionality from daemons and move 
it to systemd core or kernel.
Replace /etc scripts with declarative config files.
Expose newer kernel APIs to userspace via a simple 
interface.
● modular;
● asynchronous and concurrent;
● described by declarative sets of properties;
● bundled with analysis tools and tests;
● features a fully language-agnostic API.
systemd is:
One daemon to rule them all
xinetd: a daemon to lazily launch internet
services when activity is detected on an
AF_INET socket
systemd: a daemon to lazily launch any
system service when activity is detected on
an AF_UNIX socket (oversimplification)
Complexity arising from many similar small units
init.d scripts  systemd units
● Unit's action and parameters: ExecStart=
● Dependencies: Before=, After=, Requires=, Conflicts=
and Wants=.
● Default dependencies:
– Requires= and After= on basic.target;
– Conflicts= and Before= on shutdown.target.
● Conditionals: ConditionPathExists, ConditionPathIsReadWrite!=
● Types of unit files: service, socket, device, mount,
scope, slice, automount, swap, target, path, timer,
snapshot
sysVinit runlevels ≈ systemd targets
● Targets are synchronization points.
● Check /lib/systemd/system/runlevel?.target symlinks:
multi-user.target (runlevel 3 == text session)
graphical.target (runlevel 5 == graphical session)
● Select boot-target :
– via /etc/systemd/system/default.target symlink;
– appending number or systemd.unit=<target> to bootargs.
plus: intuitively exposes kernel interfaces
● Including Capabilities, Watchdog, Cgroups and kdbus
('coming attraction')
● Kernel features configurable via simple ASCII options
in unit files.
● Encourages creation of system policies via unit
templates.
systemd and cgroups
● cgroups are a kernel-level mechanism for allocating resources:
storage, memory, CPU and network.
● slices are groups of daemons whose resources are managed
jointly.
● systemd scopes are resultant groups of user processes.
● Can set BlockIOWeight, IOSchedulingPriority, OOMScoreAdjust,
CPUShares, MemoryLimit …
Demo Example: limiting memory usage of Firefox.
systemd and security:
granular encapsulationvia kernel's capabilities
● CapabilityBoundingSet
● PrivateTmp, PrivateDevices, PrivateNetwork
● JoinNamespaces
● ProtectSystem (/usr and /etc), ProtectHome
● ReadOnlyDirectories, InaccessibleDirectories
● systemd-nspawn: systemd's native containers
Demo Example: limiting privileges of root-initiated program
systemd and watchdogs
● Support for soft or hard watchdogs
● RuntimeWatchdogSec sets a timer for petting the dog
● ShutdownWatchdogSec sets a timer to force reboot if shutdown
hangs
Demo Example: systemd and softdog
resource utilization
● systemd-211 in Poky includes 17 packages = 8 MB.
● systemd-219 builds 90 MB of executables (not all needed).
● minimal build = systemd, udevd and journald.
● Memory (RSS) of fully featured build: ≈9 MB; minimum build ≈5
MB.
● Features added/removed via './configure'.
● Get rid of D-Bus, syslog and bash?
using the systemd journal
● Easily pushed to a remote.
● Can be cryptographically 'sealed'.
● Configurable max size and rotation.
● Log-reading tools are simple:
journalctl -xn
journalctl -p err
journalctl -u cron
journalctl -o json-pretty
systemctl status
systemctl is-failed bluetooth
systemctl --failed
Other embedded-relevant features
● Support for read-only rootfs
● Remote journaling via HTTP requests
● Coredumpctl:
– read last core file
– read stack trace automatically written to journal
● Timesyncd: lightweight network-time daemon
● 'systemctl snapshot' captures state to which the system can be
restored
systemd prevents self-injury!
● Test out new units by trying them:
– in /run
– in *.conf.d directory
– via bootargs
● No need ever to modify files in /lib/systemd.
● Services linked into basic.target.wants (≈runlevel 1) that won't
work until graphical.target (runlevel 5) will start properly if their
dependencies are correctly stated.
systemd and backwards compatibility
system updates
Ye Good Olde Days:
-- update kernel and modules
-- separately update root fs
Newfangled:
-- update kernel and modules
-- update device-tree
-- separately update root fs
Tuning systemd for embedded
New system updates?
Old:
-- update kernel and modules
-- separately update root fs
New:
-- update kernel and modules
-- update device-tree?
-- separately update root fs
Newer:
-- update kernel and modules
-- update device-tree?
-- update systemd?
-- separately update root fs
systemd's 'Interface Portability and Stability Chart'
Deprecated!
developing systemd
● git clone git://anongit.freedesktop.org/systemd/systemd
● systemd-devel list: submit patches or ask questions
● Featureful utility library in src/shared/
#define streq(a,b) (strcmp((a),(b)) == 0)
#define strneq(a, b, n) (strncmp((a), (b), (n)) == 0)
#define strcaseeq(a,b) (strcasecmp((a),(b)) == 0)
#define strncaseeq(a, b, n) (strncasecmp((a), (b), (n)) == 0)
● Complex autotools build system, many dependencies.
● 'Plumbing' dev tools in /lib/systemd, 'porcelain' tools in /bin
Summary
● Systemd has:
– a superior design;
– tight integration with the Linux kernel;
– a vibrant developer community.
● systemd is the less stable part of kernel's ABI.
● Mostly things will 'just work'.
● systemd exemplifies modernization Linux needs to
stay competitive.
photo
courtesy
Jym
Dyer
Thanks
● Vladimir Pantelic, Tom Gundersen, Lennart Poettering, Jeff
Waugh, Ivan Shapovalov, Mantas Mikulènas, Stephanie
Lockwood-Childs and Jon Stanley for corrections and advice.
● Bill Ward, Jym Dyer and Janet Lafleur for use of their images.
Resources
● Man pages are part of systemd git repo.
●
freedesktop.org: systemd mailing list archives and wiki
● Poettering's 0pointer.de blog
● ➟At wayback machine: “Booting up” articles
●
Neil Brown series at LWN
● ➟Fedora's SysVinit to systemd cheatsheet
● Poettering's 'What's new' talk from FOSDEM 2015
●
Josh Triplett's Debconf talk video
● Linux Action Show interviews with Mark Shuttleworth and Lennart Poettering
Leftover
Materials
Understanding dependencies
Try:
systemctl list-dependencies basic.target
systemctl list-dependencies –after tmp.mount
Try:
systemd-analyze dot rescue.target
systemd-analyze dot basic.target > basic.dot
dot -Tsvg basic.dot -o basic.svg
eog basic.svg (or view basic.svg with any web browser)
Understanding dependencies, p. 2
SysV already has a big service manager: bash
[user@localhost]$ ls -l /sbin/init
26k
[user@localhost]$ ls -lh /bin/bash
1008K
[user@localhost]$ ls -lh /lib/systemd/systemd
1.3M
Tuning systemd for embedded
Greg K-H: “Tightly-coupled components”
Originally from https://lwn.net/Articles/494095/
[Socket activation demo with cups and ncat]
systemd and udev
● udev is a kernel facility that handles device events.
– merged into the systemd project.
● Rules are enabled by placement in /lib/udev/rules.d,
unlike systemd unit enablement.
● Rule loading is ordered by numeric filename prefix,
like old sysVinit scripts.
udev is still old-school
Try:
ls /lib/udev/rules.d
cat /lib/udev/rules.d/99-systemd.rules
Hierarchy of unit files for
system and user sessions
● Organized into system and user units
● /lib/systemd/system: systemd upstream defaults for
system-wide services
● /etc/systemd/system: local customizations by override
and extension
● /lib/systemd/user/: systemd's upstream defaults for per-
user services
● $HOME/.local/share/systemd/user/ for user-installed
units
● 'drop-ins' are run-time extensions
X
Upstart
Serial Linked list Fully parallel
Modularity can produce complexity
photo
courtesy
Bill
Ward
systemd and outside projects: CoreOS
● networkd was initially contributed by CoreOS developers.
● CoreOS's fleet “tool that presents your entire cluster as a single init system”
is based on systemd.
– Spin up new containers due to events on sockets.
● CoreOS devs are outside systemd inner circle.
● systemd has many patches from Arch, Intel, Debian . . .
systemd in embedded systems
● systemd is widely adopted in embedded systems
because
– proper allocation of resources is critical;
– fastboot is required;
– customization of boot sequence is common.
● Lack of backward compatibility for older kernels (due
to firmware loading) is a pain point.
● Embedded use cases are not always understood by
systemd devs.
[runlevel demo with Fedora Qemu and Firefox]
Try: 'systemctl isolate multi-user.target'
[warning: KILLS X11]
systemd is easy to use
● systemd utilities:
– Try: apropos systemd | grep ctl
● All-ASCII configuration files: no hidden “registry”.
● Customization is by overriding default files.
● Many choices are controllable via symlinks.
● Bash-completion by default.
● Backwards compatibility with SysVinit
Override your defaults!
photo courtesy
Jym Dyer
● Replace a unit in /lib (upstream)
by creating one of the same name
in /etc (local changes).
● Add services to boot by symlinking
them into
/etc/systemd/system/default.target.wants.
● 'mask' unit with link to /dev/null.
● Best practice: do not change the
files in /lib/systemd.
● Read in-use unit with 'systemctl
cat'.
Extensions: drop-ins
Try: systemd-delta
Try: systemctl cat <list from 1st
command>
Old way New way History
X11 manages graphics
memory
Kernel's drm manages
graphics memory
“Linux Graphics Drivers: an I
ntroduction,”
p. 26
static /dev, then devfs udev
getrlimit, setrlimit cgroups
KDE3 and GNOME2 KDE4 and GNOME3 KDE and GNOME
sysVinit systemd in progress
X11 client-server
model
Wayland compositor
Crux of the problem: Dave Neary
“There is no freedesktop.org process for
proposing standards, identifying those which are
proposals and those which are de facto
implemented, and perhaps more importantly,
there is no process for building consensus around
a specification . . .”
(comment regarding GNOME3)
systemd is . . .
● the basis of Fedora, RHEL, CentOS, OpenSUSE,
Ubuntu, Debian and much embedded.
● praised by Jordan Hubbard of FreeBSD.
● tightly integrated with Linux kernel cgroups.
● the reference implementation for udev and for kdbus
userspace access.
Customizing your installation
● Replace a unit in /lib (upstream) by creating one of the same
name in /etc (local changes).
● Add services to boot by symlinking them into
/etc/systemd/system/default.target.wants.
● Best practice: do not change the files in /lib/systemd
Sequence of targets on a typical system
>$ ls -l /lib/systemd/system/default.target
/lib/systemd/system/default.target -> graphical.target
>$ cat /lib/systemd/system/graphical.target
After=multi-user.target
>$ cat /lib/systemd/system/multi-user.target
After=basic.target
>$ cat /lib/systemd/system/basic.target
After=sysinit.target sockets.target timers.target paths.target
slices.target
Example: set display manager
[user@localhost ~]$ ls -l `locate display-manager.service`
lrwxrwxrwx. 1 root root 35 Dec 11 2013
/etc/systemd/system/display-manager.service ->
/usr/lib/systemd/system/gdm.service
[user@localhost ~]$ cat /usr/lib/systemd/system/gdm.service
[Unit]
Description=GNOME Display Manager
[ . . . ]
[Install]
Alias=display-manager.service
or
WantedBy=graphical.target
sysinit, sockets and multi-user
are composite targets
>$ ls /lib/systemd/system/multi-user.target.wants/
dbus.service@ systemd-ask-password-wall.path@ systemd-
update-utmp-runlevel.service@ getty.target@
>$ ls /lib/systemd/system/sockets.target.wants:
dbus.socket@ systemd-shutdownd.socket@
systemd-initctl.socket@ systemd-udevd-control.socket@
>$ ls /lib/systemd/system/sysinit.target.wants:
cryptsetup.target@ systemd-journald.service@
debian-fixup.service@ systemd-journal-flush.service@
Symlinks replace lines of conditional code in SysVinit scripts.
Example: change the default target
[alison@localhost ~]$ ls /etc/systemd/system/default.target
/etc/systemd/system/default.target ->
/lib/systemd/system/graphical.target
[alison@localhost ~]$ sudo rm /etc/systemd/system/default.target
[alison@localhost ~]$ sudo ln -s /lib/systemd/system/multi-user.target
/etc/systemd/system/default.target
[alison@localhost ~]$ ~/bin/systemd-delta
[ . . . ]
[REDIRECTED] /etc/systemd/system/default.target →
/usr/lib/systemd/system/default.target
problems
● systemd is modular, but:
– interopability with other SW may be inadequately tested.
● Potentially rocky piecemeal transition by distros.
– e.g., Debian installer doesn't warn about a separate /usr
partition.
● Merciless deprecation of features (firmware loading,
readahead . . . ).
● Frequent releases, not particularly stable.
Taxonomy of systemd dependencies
Requires, RequiresOverridable, Requisite, RequisiteOverridable,
Wants, BindsTo, PartOf, Conflicts, Before, After, OnFailure
PropagateReloadsTo, ReloadPropagateFrom,
Brandon Philips at linux.conf.au
Brandon Philips at linux.conf.au
Design

More Related Content

PDF
Introduction to GitHub Actions
PPTX
OSSライセンス入門
PDF
Your first dive into systemd!
PDF
組み込みLinuxでのGolangのススメ
PDF
猫にはわからないGit講座
PDF
第20回 OpenStack勉強会 Neutron Deep Dive - DVR
PDF
GitLab Auto DevOps 大解析—CI/CD 原來可以這樣做
PDF
Linux kernel tracing
Introduction to GitHub Actions
OSSライセンス入門
Your first dive into systemd!
組み込みLinuxでのGolangのススメ
猫にはわからないGit講座
第20回 OpenStack勉強会 Neutron Deep Dive - DVR
GitLab Auto DevOps 大解析—CI/CD 原來可以這樣做
Linux kernel tracing

What's hot (20)

PDF
Operating PostgreSQL at Scale with Kubernetes
PPTX
Gstreamer plugin development
PDF
Pynqでカメラ画像をリアルタイムfastx コーナー検出
PDF
Git-flow workflow and pull-requests
PDF
Trunk based development for Beginners
PPTX
plotnetcfg入門 | Introduction to plotnetcfg
PDF
elixirを使ったゲームサーバ
PPTX
MAASで管理するBaremetal server
PDF
Gstreamer: an Overview
PDF
iOS 11からのDeviceCheck #とは
PDF
icecream / icecc:分散式編譯系統簡介
PPTX
Java 9で進化する診断ツール
PDF
Unityでオンラインゲーム作った話
PDF
Clean architectures with fast api pycones
PDF
Advanced Namespaces and cgroups
PDF
GitOps is the best modern practice for CD with Kubernetes
PPTX
Git branching strategies
PDF
やりなおせる Git 入門
PDF
Wireshark だけに頼らない! パケット解析ツールの紹介
PDF
Gitlab, GitOps & ArgoCD
Operating PostgreSQL at Scale with Kubernetes
Gstreamer plugin development
Pynqでカメラ画像をリアルタイムfastx コーナー検出
Git-flow workflow and pull-requests
Trunk based development for Beginners
plotnetcfg入門 | Introduction to plotnetcfg
elixirを使ったゲームサーバ
MAASで管理するBaremetal server
Gstreamer: an Overview
iOS 11からのDeviceCheck #とは
icecream / icecc:分散式編譯系統簡介
Java 9で進化する診断ツール
Unityでオンラインゲーム作った話
Clean architectures with fast api pycones
Advanced Namespaces and cgroups
GitOps is the best modern practice for CD with Kubernetes
Git branching strategies
やりなおせる Git 入門
Wireshark だけに頼らない! パケット解析ツールの紹介
Gitlab, GitOps & ArgoCD
Ad

Viewers also liked (20)

PDF
IRQs: the Hard, the Soft, the Threaded and the Preemptible
PDF
Centos7 systemd
PPTX
Oracle Performance On Linux X86 systems
PDF
LISA15: systemd, the Next-Generation Linux System Manager
PDF
Comparing file system performance: Red Hat Enterprise Linux 6 vs. Microsoft W...
PPTX
CPN302 your-linux-ami-optimization-and-performance
PPTX
Docker, LinuX Container
PDF
Boost UDP Transaction Performance
PDF
Linux Performance Profiling and Monitoring
PDF
Improving Hadoop Performance via Linux
PPT
2 Linux Container and Docker
PDF
Improving Hadoop Cluster Performance via Linux Configuration
PDF
Docker in the Oracle Universe / WebLogic 12c / OFM 12c
PDF
NVMe Over Fabrics Support in Linux
PDF
SR-IOV ixgbe Driver Limitations and Improvement
PDF
WebLogic im Docker Container
PDF
Container Landscape in 2017
PDF
Advanced troubleshooting linux performance
PDF
Feature rich BTRFS is Getting Richer with Encryption
PDF
Container Storage Best Practices in 2017
IRQs: the Hard, the Soft, the Threaded and the Preemptible
Centos7 systemd
Oracle Performance On Linux X86 systems
LISA15: systemd, the Next-Generation Linux System Manager
Comparing file system performance: Red Hat Enterprise Linux 6 vs. Microsoft W...
CPN302 your-linux-ami-optimization-and-performance
Docker, LinuX Container
Boost UDP Transaction Performance
Linux Performance Profiling and Monitoring
Improving Hadoop Performance via Linux
2 Linux Container and Docker
Improving Hadoop Cluster Performance via Linux Configuration
Docker in the Oracle Universe / WebLogic 12c / OFM 12c
NVMe Over Fabrics Support in Linux
SR-IOV ixgbe Driver Limitations and Improvement
WebLogic im Docker Container
Container Landscape in 2017
Advanced troubleshooting linux performance
Feature rich BTRFS is Getting Richer with Encryption
Container Storage Best Practices in 2017
Ad

Similar to Tuning systemd for embedded (20)

PDF
Systemd for developers
PDF
Systemd: the modern Linux init system you will learn to love
PDF
Automotive Grade Linux and systemd
PDF
Systemd mlug-20140614
ODP
CLUG 2010 09 - systemd - the new init system
ODP
SystemV vs systemd
PPTX
Systemd 간략하게 정리하기
PDF
Systemd evolution revolution_regression
PDF
systemd
PPTX
CoreOS Intro
PDF
Systemd
PDF
Systemd poettering
PDF
SystemD Usage Guide
PDF
Introduction to systemd
PDF
Fedora 15 para sysadmins
PDF
Basic of Systemd
PPTX
First steps on CentOs7
PDF
Summit demystifying systemd1
PDF
systemd @ Facebook -- a year later
PDF
systemd @ Facebook in 2019
Systemd for developers
Systemd: the modern Linux init system you will learn to love
Automotive Grade Linux and systemd
Systemd mlug-20140614
CLUG 2010 09 - systemd - the new init system
SystemV vs systemd
Systemd 간략하게 정리하기
Systemd evolution revolution_regression
systemd
CoreOS Intro
Systemd
Systemd poettering
SystemD Usage Guide
Introduction to systemd
Fedora 15 para sysadmins
Basic of Systemd
First steps on CentOs7
Summit demystifying systemd1
systemd @ Facebook -- a year later
systemd @ Facebook in 2019

More from Alison Chaiken (20)

PDF
Not breaking userspace: the evolving Linux ABI
PDF
Supporting SW Update via u-boot and GPT/EFI
PDF
Two C++ Tools: Compiler Explorer and Cpp Insights
PDF
V2X Communications: Getting our Cars Talking
PDF
Practical Challenges to Deploying Highly Automated Vehicles
PDF
Linux: the first second
PDF
Functional AI and Pervasive Networking in Automotive
PDF
Flash in Vehicles: an End-User's Perspective
PDF
Linux: the first second
PDF
Automotive Linux, Cybersecurity and Transparency
PDF
Developing Automotive Linux
ODP
Technology, Business and Regulation of the Connected Car
PDF
Best practices for long-term support and security of the device-tree
PDF
The “Telematics Horizon” V2V and V2I Networking
PDF
Developing automotive Linux
PDF
Automotive Free Software 2013: "Right to Repair" and Privacy
PDF
Addressing the hard problems of automotive Linux: networking and IPC
PDF
Tier X and the Coming of the Whitebox Car
PDF
Booth content from Maker Faire Bay Area 2012
PDF
From Driver Distraction to Driver Augmentation: Open Source in Cars
Not breaking userspace: the evolving Linux ABI
Supporting SW Update via u-boot and GPT/EFI
Two C++ Tools: Compiler Explorer and Cpp Insights
V2X Communications: Getting our Cars Talking
Practical Challenges to Deploying Highly Automated Vehicles
Linux: the first second
Functional AI and Pervasive Networking in Automotive
Flash in Vehicles: an End-User's Perspective
Linux: the first second
Automotive Linux, Cybersecurity and Transparency
Developing Automotive Linux
Technology, Business and Regulation of the Connected Car
Best practices for long-term support and security of the device-tree
The “Telematics Horizon” V2V and V2I Networking
Developing automotive Linux
Automotive Free Software 2013: "Right to Repair" and Privacy
Addressing the hard problems of automotive Linux: networking and IPC
Tier X and the Coming of the Whitebox Car
Booth content from Maker Faire Bay Area 2012
From Driver Distraction to Driver Augmentation: Open Source in Cars

Recently uploaded (20)

PPTX
CYBER-CRIMES AND SECURITY A guide to understanding
PDF
Automation-in-Manufacturing-Chapter-Introduction.pdf
PPTX
Recipes for Real Time Voice AI WebRTC, SLMs and Open Source Software.pptx
PPTX
MCN 401 KTU-2019-PPE KITS-MODULE 2.pptx
PPTX
Welding lecture in detail for understanding
PPTX
Construction Project Organization Group 2.pptx
PPTX
Lecture Notes Electrical Wiring System Components
PDF
PPT on Performance Review to get promotions
PPTX
additive manufacturing of ss316l using mig welding
PPTX
bas. eng. economics group 4 presentation 1.pptx
PPTX
Infosys Presentation by1.Riyan Bagwan 2.Samadhan Naiknavare 3.Gaurav Shinde 4...
PDF
R24 SURVEYING LAB MANUAL for civil enggi
PDF
keyrequirementskkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
PDF
BMEC211 - INTRODUCTION TO MECHATRONICS-1.pdf
PPTX
IOT PPTs Week 10 Lecture Material.pptx of NPTEL Smart Cities contd
PDF
July 2025 - Top 10 Read Articles in International Journal of Software Enginee...
PPTX
Sustainable Sites - Green Building Construction
PPTX
Engineering Ethics, Safety and Environment [Autosaved] (1).pptx
PDF
TFEC-4-2020-Design-Guide-for-Timber-Roof-Trusses.pdf
PDF
Operating System & Kernel Study Guide-1 - converted.pdf
CYBER-CRIMES AND SECURITY A guide to understanding
Automation-in-Manufacturing-Chapter-Introduction.pdf
Recipes for Real Time Voice AI WebRTC, SLMs and Open Source Software.pptx
MCN 401 KTU-2019-PPE KITS-MODULE 2.pptx
Welding lecture in detail for understanding
Construction Project Organization Group 2.pptx
Lecture Notes Electrical Wiring System Components
PPT on Performance Review to get promotions
additive manufacturing of ss316l using mig welding
bas. eng. economics group 4 presentation 1.pptx
Infosys Presentation by1.Riyan Bagwan 2.Samadhan Naiknavare 3.Gaurav Shinde 4...
R24 SURVEYING LAB MANUAL for civil enggi
keyrequirementskkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
BMEC211 - INTRODUCTION TO MECHATRONICS-1.pdf
IOT PPTs Week 10 Lecture Material.pptx of NPTEL Smart Cities contd
July 2025 - Top 10 Read Articles in International Journal of Software Enginee...
Sustainable Sites - Green Building Construction
Engineering Ethics, Safety and Environment [Autosaved] (1).pptx
TFEC-4-2020-Design-Guide-for-Timber-Roof-Trusses.pdf
Operating System & Kernel Study Guide-1 - converted.pdf

Tuning systemd for embedded

  • 1. Tuning systemd for Embedded Alison Chaiken alison_chaiken@mentor.com Mar. 23, 2015 Latest version: http://she-devel.com/ELC_systemd.pdf Auxiliary files: http://she-devel.com/ELC_auxiliary.tar.bz2 Text in blue is hyperlinked.
  • 3. Linux needs to keep innovating LicensedunderCCBY-SA3.0 http://commons.wikimedia.org/wiki/File:Fire-lite-bg- 10.jpg#mediaviewer/File:Fire-lite-bg-10.jpg “No one has a guaranteed position in the technology industry.” -- Bill Gates, Pirates of Silicon Valley “The only thing that can ever hurt Linux is Linux itself.” -- GKH, Linux Action Show “Success is a self-correcting phenomenom.” -- Gary Hamel
  • 5. ● modular; ● asynchronous and concurrent; ● described by declarative sets of properties; ● bundled with analysis tools and tests; ● features a fully language-agnostic API. systemd is:
  • 6. One daemon to rule them all xinetd: a daemon to lazily launch internet services when activity is detected on an AF_INET socket systemd: a daemon to lazily launch any system service when activity is detected on an AF_UNIX socket (oversimplification)
  • 7. Complexity arising from many similar small units
  • 8. init.d scripts  systemd units ● Unit's action and parameters: ExecStart= ● Dependencies: Before=, After=, Requires=, Conflicts= and Wants=. ● Default dependencies: – Requires= and After= on basic.target; – Conflicts= and Before= on shutdown.target. ● Conditionals: ConditionPathExists, ConditionPathIsReadWrite!= ● Types of unit files: service, socket, device, mount, scope, slice, automount, swap, target, path, timer, snapshot
  • 9. sysVinit runlevels ≈ systemd targets ● Targets are synchronization points. ● Check /lib/systemd/system/runlevel?.target symlinks: multi-user.target (runlevel 3 == text session) graphical.target (runlevel 5 == graphical session) ● Select boot-target : – via /etc/systemd/system/default.target symlink; – appending number or systemd.unit=<target> to bootargs.
  • 10. plus: intuitively exposes kernel interfaces ● Including Capabilities, Watchdog, Cgroups and kdbus ('coming attraction') ● Kernel features configurable via simple ASCII options in unit files. ● Encourages creation of system policies via unit templates.
  • 11. systemd and cgroups ● cgroups are a kernel-level mechanism for allocating resources: storage, memory, CPU and network. ● slices are groups of daemons whose resources are managed jointly. ● systemd scopes are resultant groups of user processes. ● Can set BlockIOWeight, IOSchedulingPriority, OOMScoreAdjust, CPUShares, MemoryLimit … Demo Example: limiting memory usage of Firefox.
  • 12. systemd and security: granular encapsulationvia kernel's capabilities ● CapabilityBoundingSet ● PrivateTmp, PrivateDevices, PrivateNetwork ● JoinNamespaces ● ProtectSystem (/usr and /etc), ProtectHome ● ReadOnlyDirectories, InaccessibleDirectories ● systemd-nspawn: systemd's native containers Demo Example: limiting privileges of root-initiated program
  • 13. systemd and watchdogs ● Support for soft or hard watchdogs ● RuntimeWatchdogSec sets a timer for petting the dog ● ShutdownWatchdogSec sets a timer to force reboot if shutdown hangs Demo Example: systemd and softdog
  • 14. resource utilization ● systemd-211 in Poky includes 17 packages = 8 MB. ● systemd-219 builds 90 MB of executables (not all needed). ● minimal build = systemd, udevd and journald. ● Memory (RSS) of fully featured build: ≈9 MB; minimum build ≈5 MB. ● Features added/removed via './configure'. ● Get rid of D-Bus, syslog and bash?
  • 15. using the systemd journal ● Easily pushed to a remote. ● Can be cryptographically 'sealed'. ● Configurable max size and rotation. ● Log-reading tools are simple: journalctl -xn journalctl -p err journalctl -u cron journalctl -o json-pretty systemctl status systemctl is-failed bluetooth systemctl --failed
  • 16. Other embedded-relevant features ● Support for read-only rootfs ● Remote journaling via HTTP requests ● Coredumpctl: – read last core file – read stack trace automatically written to journal ● Timesyncd: lightweight network-time daemon ● 'systemctl snapshot' captures state to which the system can be restored
  • 17. systemd prevents self-injury! ● Test out new units by trying them: – in /run – in *.conf.d directory – via bootargs ● No need ever to modify files in /lib/systemd. ● Services linked into basic.target.wants (≈runlevel 1) that won't work until graphical.target (runlevel 5) will start properly if their dependencies are correctly stated.
  • 18. systemd and backwards compatibility
  • 19. system updates Ye Good Olde Days: -- update kernel and modules -- separately update root fs Newfangled: -- update kernel and modules -- update device-tree -- separately update root fs
  • 21. New system updates? Old: -- update kernel and modules -- separately update root fs New: -- update kernel and modules -- update device-tree? -- separately update root fs Newer: -- update kernel and modules -- update device-tree? -- update systemd? -- separately update root fs
  • 22. systemd's 'Interface Portability and Stability Chart' Deprecated!
  • 23. developing systemd ● git clone git://anongit.freedesktop.org/systemd/systemd ● systemd-devel list: submit patches or ask questions ● Featureful utility library in src/shared/ #define streq(a,b) (strcmp((a),(b)) == 0) #define strneq(a, b, n) (strncmp((a), (b), (n)) == 0) #define strcaseeq(a,b) (strcasecmp((a),(b)) == 0) #define strncaseeq(a, b, n) (strncasecmp((a), (b), (n)) == 0) ● Complex autotools build system, many dependencies. ● 'Plumbing' dev tools in /lib/systemd, 'porcelain' tools in /bin
  • 24. Summary ● Systemd has: – a superior design; – tight integration with the Linux kernel; – a vibrant developer community. ● systemd is the less stable part of kernel's ABI. ● Mostly things will 'just work'. ● systemd exemplifies modernization Linux needs to stay competitive.
  • 26. Thanks ● Vladimir Pantelic, Tom Gundersen, Lennart Poettering, Jeff Waugh, Ivan Shapovalov, Mantas Mikulènas, Stephanie Lockwood-Childs and Jon Stanley for corrections and advice. ● Bill Ward, Jym Dyer and Janet Lafleur for use of their images.
  • 27. Resources ● Man pages are part of systemd git repo. ● freedesktop.org: systemd mailing list archives and wiki ● Poettering's 0pointer.de blog ● ➟At wayback machine: “Booting up” articles ● Neil Brown series at LWN ● ➟Fedora's SysVinit to systemd cheatsheet ● Poettering's 'What's new' talk from FOSDEM 2015 ● Josh Triplett's Debconf talk video ● Linux Action Show interviews with Mark Shuttleworth and Lennart Poettering
  • 29. Understanding dependencies Try: systemctl list-dependencies basic.target systemctl list-dependencies –after tmp.mount
  • 30. Try: systemd-analyze dot rescue.target systemd-analyze dot basic.target > basic.dot dot -Tsvg basic.dot -o basic.svg eog basic.svg (or view basic.svg with any web browser) Understanding dependencies, p. 2
  • 31. SysV already has a big service manager: bash [user@localhost]$ ls -l /sbin/init 26k [user@localhost]$ ls -lh /bin/bash 1008K [user@localhost]$ ls -lh /lib/systemd/systemd 1.3M
  • 33. Greg K-H: “Tightly-coupled components” Originally from https://lwn.net/Articles/494095/
  • 34. [Socket activation demo with cups and ncat]
  • 35. systemd and udev ● udev is a kernel facility that handles device events. – merged into the systemd project. ● Rules are enabled by placement in /lib/udev/rules.d, unlike systemd unit enablement. ● Rule loading is ordered by numeric filename prefix, like old sysVinit scripts.
  • 36. udev is still old-school Try: ls /lib/udev/rules.d cat /lib/udev/rules.d/99-systemd.rules
  • 37. Hierarchy of unit files for system and user sessions ● Organized into system and user units ● /lib/systemd/system: systemd upstream defaults for system-wide services ● /etc/systemd/system: local customizations by override and extension ● /lib/systemd/user/: systemd's upstream defaults for per- user services ● $HOME/.local/share/systemd/user/ for user-installed units ● 'drop-ins' are run-time extensions
  • 39. Modularity can produce complexity photo courtesy Bill Ward
  • 40. systemd and outside projects: CoreOS ● networkd was initially contributed by CoreOS developers. ● CoreOS's fleet “tool that presents your entire cluster as a single init system” is based on systemd. – Spin up new containers due to events on sockets. ● CoreOS devs are outside systemd inner circle. ● systemd has many patches from Arch, Intel, Debian . . .
  • 41. systemd in embedded systems ● systemd is widely adopted in embedded systems because – proper allocation of resources is critical; – fastboot is required; – customization of boot sequence is common. ● Lack of backward compatibility for older kernels (due to firmware loading) is a pain point. ● Embedded use cases are not always understood by systemd devs.
  • 42. [runlevel demo with Fedora Qemu and Firefox] Try: 'systemctl isolate multi-user.target' [warning: KILLS X11]
  • 43. systemd is easy to use ● systemd utilities: – Try: apropos systemd | grep ctl ● All-ASCII configuration files: no hidden “registry”. ● Customization is by overriding default files. ● Many choices are controllable via symlinks. ● Bash-completion by default. ● Backwards compatibility with SysVinit
  • 44. Override your defaults! photo courtesy Jym Dyer ● Replace a unit in /lib (upstream) by creating one of the same name in /etc (local changes). ● Add services to boot by symlinking them into /etc/systemd/system/default.target.wants. ● 'mask' unit with link to /dev/null. ● Best practice: do not change the files in /lib/systemd. ● Read in-use unit with 'systemctl cat'.
  • 45. Extensions: drop-ins Try: systemd-delta Try: systemctl cat <list from 1st command>
  • 46. Old way New way History X11 manages graphics memory Kernel's drm manages graphics memory “Linux Graphics Drivers: an I ntroduction,” p. 26 static /dev, then devfs udev getrlimit, setrlimit cgroups KDE3 and GNOME2 KDE4 and GNOME3 KDE and GNOME sysVinit systemd in progress X11 client-server model Wayland compositor
  • 47. Crux of the problem: Dave Neary “There is no freedesktop.org process for proposing standards, identifying those which are proposals and those which are de facto implemented, and perhaps more importantly, there is no process for building consensus around a specification . . .” (comment regarding GNOME3)
  • 48. systemd is . . . ● the basis of Fedora, RHEL, CentOS, OpenSUSE, Ubuntu, Debian and much embedded. ● praised by Jordan Hubbard of FreeBSD. ● tightly integrated with Linux kernel cgroups. ● the reference implementation for udev and for kdbus userspace access.
  • 49. Customizing your installation ● Replace a unit in /lib (upstream) by creating one of the same name in /etc (local changes). ● Add services to boot by symlinking them into /etc/systemd/system/default.target.wants. ● Best practice: do not change the files in /lib/systemd
  • 50. Sequence of targets on a typical system >$ ls -l /lib/systemd/system/default.target /lib/systemd/system/default.target -> graphical.target >$ cat /lib/systemd/system/graphical.target After=multi-user.target >$ cat /lib/systemd/system/multi-user.target After=basic.target >$ cat /lib/systemd/system/basic.target After=sysinit.target sockets.target timers.target paths.target slices.target
  • 51. Example: set display manager [user@localhost ~]$ ls -l `locate display-manager.service` lrwxrwxrwx. 1 root root 35 Dec 11 2013 /etc/systemd/system/display-manager.service -> /usr/lib/systemd/system/gdm.service [user@localhost ~]$ cat /usr/lib/systemd/system/gdm.service [Unit] Description=GNOME Display Manager [ . . . ] [Install] Alias=display-manager.service or WantedBy=graphical.target
  • 52. sysinit, sockets and multi-user are composite targets >$ ls /lib/systemd/system/multi-user.target.wants/ dbus.service@ systemd-ask-password-wall.path@ systemd- update-utmp-runlevel.service@ getty.target@ >$ ls /lib/systemd/system/sockets.target.wants: dbus.socket@ systemd-shutdownd.socket@ systemd-initctl.socket@ systemd-udevd-control.socket@ >$ ls /lib/systemd/system/sysinit.target.wants: cryptsetup.target@ systemd-journald.service@ debian-fixup.service@ systemd-journal-flush.service@ Symlinks replace lines of conditional code in SysVinit scripts.
  • 53. Example: change the default target [alison@localhost ~]$ ls /etc/systemd/system/default.target /etc/systemd/system/default.target -> /lib/systemd/system/graphical.target [alison@localhost ~]$ sudo rm /etc/systemd/system/default.target [alison@localhost ~]$ sudo ln -s /lib/systemd/system/multi-user.target /etc/systemd/system/default.target [alison@localhost ~]$ ~/bin/systemd-delta [ . . . ] [REDIRECTED] /etc/systemd/system/default.target → /usr/lib/systemd/system/default.target
  • 54. problems ● systemd is modular, but: – interopability with other SW may be inadequately tested. ● Potentially rocky piecemeal transition by distros. – e.g., Debian installer doesn't warn about a separate /usr partition. ● Merciless deprecation of features (firmware loading, readahead . . . ). ● Frequent releases, not particularly stable.
  • 55. Taxonomy of systemd dependencies Requires, RequiresOverridable, Requisite, RequisiteOverridable, Wants, BindsTo, PartOf, Conflicts, Before, After, OnFailure PropagateReloadsTo, ReloadPropagateFrom,
  • 56. Brandon Philips at linux.conf.au
  • 57. Brandon Philips at linux.conf.au