blob: e1f761bbb1f41d86a9e1b016a0470b97b6e7f0da [file] [log] [blame]
# Copyright 2018 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
description "Fine-grained memory stats collector"
author "chromium-os-dev@chromium.org"
# The memory daemon collects memory stats around
# events of interest (such as tab discards).
start on started metrics_daemon
stop on stopped metrics_daemon
# Sacrifice before OOM panic.
oom score 0
# Limit rss to 30MB (normally using 3MB at this point).
# Syntax is "limit <kind> <limit> <max_settable_limit>".
limit as 30000000 unlimited
# Stop respawining after 10 tries in 10 seconds.
respawn
respawn limit 10 10
# minijail0 does the forking.
expect fork
pre-start exec mkdir -p /var/log/memd
# basic mounts: --profile minimalistic-mountns
# log to syslog: -b /dev/log
# receive low-mem notifications: -b /dev/chromeos-low-mem
# read /sys/kernel/mm: -b /sys
# /sys/kernel/debug is a separate mount: -b /sys/kernel/debug,,1
# get a writeable and empty /var path: -k tmpfs,/var,tmpfs,0xe
# mount /var/log/memd on it: -b /var/log/memd,,1
# get a writeable and empty /run path: -k tmpfs,/run,tmpfs,0xe
# mount /run/dbus for dbus socket: -b /run/dbus
# create new hostname namespace: --uts
# also: pid ns (-p), network ns (-e), no new privs (-n), IPC ns (-l)
# seccomp policy: -S /usr/share/policy/memd-seccomp.policy
# fork and exit: -i
exec minijail0 \
--profile minimalistic-mountns \
-b /dev/log \
-b /dev/chromeos-low-mem \
-b /sys \
-k '/var,/var,tmpfs,MS_NODEV|MS_NOEXEC|MS_NOSUID,mode=755,size=10M' \
-b /var/log/memd,,1 \
-k '/run,/run,tmpfs,MS_NODEV|MS_NOEXEC|MS_NOSUID,mode=755,size=10M' \
-b /run/dbus \
--uts \
-p -e -n -l \
-S /usr/share/policy/memd-seccomp.policy \
-i \
-- /usr/bin/memd