an introduction to control groups cgroups
play

An introduction to Control Groups (cgroups) (plus some systemd - PowerPoint PPT Presentation

An introduction to Control Groups (cgroups) (plus some systemd evangelizing) Who am I? Jonathan maw (not James Thomas) jonathan.maw@codethink.co.uk Responsibilities: GENIVI Node Startup Controller AGL Distro OS/Common Libs


  1. An introduction to Control Groups (cgroups) (plus some systemd evangelizing)

  2. Who am I? Jonathan maw (not James Thomas) jonathan.maw@codethink.co.uk Responsibilities: ● GENIVI Node Startup Controller ● AGL Distro OS/Common Libs maintainer Automotive experience: since June 2012 cgroup experience: since Sep 01 2015

  3. What are cgroups? /sys/fs/cgroup/ … ↳ blkio hierarchical grouping of processes managed by the linux ↳ cpu kernel, and exposed through a special filesystem ↳ memory ↳ net_cls # cat /sys/fs/cgroup/systemd/system.slice/ssh.service/tasks ↳ systemd 622 … ↳ user.slice ↳ system.slice (systemd-cgls) … ↳ ssh.service ↳ cgroup.clone_children ↳ cgroup.procs ↳ notify_on_release ↳ tasks

  4. Why use cgroups? /sys/fs/cgroup/ … ↳ blkio subsystems/controllers ↳ cpu https://www.kernel.org/doc/Documentation/cgroups/ ↳ memory ↳ devices Lots of features, the most useful ones I see: ↳ systemd … ● Control memory usage ↳ user.slice ● Control how much CPU time is allocated ↳ system.slice ● Control how much device I/O is allowed … ● Control which devices can be accessed ↳ ssh.service ↳ cgroup.clone_children Horror story: memory leak in browser kills system ↳ cgroup.procs ↳ notify_on_release ↳ tasks

  5. Why I’d recommend systemd Systemd uses cgroups to organise processes (each service is a cgroup, and all processes started by that service use that cgroup) Systemd handles blkio, cpu, device, and memory accounting for you (http://man7. org/linux/man-pages/man5/systemd.cgroup.5.html) [Service] ExecStart=/bin/foo MemoryAccounting=true MemoryLimit=400K (also systemd-cgtop, systemd-cgls)

  6. Demonstration top -d1 top -d1 echo “+1000” > /proc/$(pidof top)/oom_score_adj echo “+1000” > /proc/$(pidof top)/oom_score_adj ./memory-hog (OOM kills top, then memory-hog) systemctl start memory-hog (OOM kills memory-hog) cat >/etc/systemd/system/memory-hog.service <<EOF [Unit] Description=Memory Hog Service [Service] ExecStart=/home/user/memory-hog MemoryAccounting=true MemoryLimit=400K

  7. An example hierarchy for an HMI system.slice -> weston dbus can-message-app hmiapp.slice -> clock.service map.service navigation.service rtaudio.slice -> alerts.service music.service navigation-assistant.service rt.slice -> rearview.service

  8. Why not? systemd: cgroups: ● Doesn’t do every feature of cgroups. ● the subsystem controllers (memory, etc.) ● e.g. if you want cpu scheduling, you may have a performance cost - is it an want to disable systemd’s use of the CPU acceptable cost? controller, and handle CPU scheduling, yourself. ● If you want network priority, you’ll have to handle it yourself. ● alternative: http://libcg.sourceforge.net/

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend