blob: f2af4edfa6863f4d27a089777a78db62b4e15a25 [file] [log] [blame]
# Copyright (c) 2012 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 "mount cgroups on /sys/fs/cgroup"
author "chromium-os-dev@chromium.org"
start on starting boot-services
task
script
log() {
logger -t "${UPSTART_JOB}" "failed to mount cgroup susbsystem $1"
}
default_mount_opts="noexec,nosuid,nodev"
mount -t tmpfs -o mode=755,${default_mount_opts} none /sys/fs/cgroup
for subsys in cpu freezer devices cpuacct cpuset schedtune; do
# Verify that the subsystem is available on our kernel.
grep -q ${subsys} /proc/cgroups || continue
mkdir -p /sys/fs/cgroup/${subsys}
mount_opts="${default_mount_opts}"
if [ "${subsys}" = "cpuset" ]; then
# To be compatible with how Android container mounts cpusets
# we mount without prefix (so "cpuset.cpus" turns into "cpus").
mount_opts="${mount_opts},noprefix"
fi
mount -t cgroup cgroup /sys/fs/cgroup/${subsys} \
-o ${subsys},${mount_opts} || log ${subsys}
mkdir -p /sys/fs/cgroup/${subsys}/session_manager_containers
if id -u android-root 2>/dev/null; then
chown android-root:android-root \
/sys/fs/cgroup/${subsys}/session_manager_containers
fi
if id -u user-containers 2>/dev/null; then
mkdir -p /sys/fs/cgroup/${subsys}/user_containers
chown user-containers:user-containers \
/sys/fs/cgroup/${subsys}/user_containers
fi
mkdir -p /sys/fs/cgroup/${subsys}/chronos_containers
chown chronos:chronos /sys/fs/cgroup/${subsys}/chronos_containers
done
# Create and set up Chrome cpusets with default settings
# (all cpus, all mems).
cpuset_root_dir="/sys/fs/cgroup/cpuset"
if [ -d "${cpuset_root_dir}" ]; then
cpuset_root_cpus=$(cat "${cpuset_root_dir}/cpus")
cpuset_root_mems=$(cat "${cpuset_root_dir}/mems")
for cset in chrome chrome/urgent chrome/non-urgent; do
cset_dir="${cpuset_root_dir}/${cset}"
mkdir -p "${cset_dir}"
chown chronos:chronos "${cset_dir}/tasks"
echo "${cpuset_root_cpus}" > "${cset_dir}/cpus"
echo "${cpuset_root_mems}" > "${cset_dir}/mems"
done
# Adjust cpusets of the rest of the created containers to
# also have all available cpus and all mems.
for cset in session_manager_containers chronos_containers user_containers;
do
cset_dir="${cpuset_root_dir}/${cset}"
if [ -d "${cset_dir}" ]; then
echo "${cpuset_root_cpus}" > "${cset_dir}/cpus"
echo "${cpuset_root_mems}" > "${cset_dir}/mems"
fi
done
fi
schedtune_root_dir="/sys/fs/cgroup/schedtune"
if [ -d "${schedtune_root_dir}" ]; then
for cset in chrome chrome/urgent; do
cset_dir="${schedtune_root_dir}/${cset}"
mkdir -p "${cset_dir}"
chown chronos:chronos "${cset_dir}/tasks"
done
fi
end script