Изменение swappiness для контейнера docker

я использую docker для контейнеризации кучи услуг. Иногда контейнерные услуги сильно меняются местами. Я изменился vm.swappiness to 1 через sysctl в моей хост-системе. Но cgroup памяти docker по-прежнему имеет старое (по умолчанию) значение 60. Таким образом, все конкретные группы контейнеров имеют то же значение, что и родительские.

sysctl vm.swappiness
> vm.swappiness = 1
cat /sys/fs/cgroup/memory/docker/memory.swappiness
> 60
cat /sys/fs/cgroup/memory/docker/${CONTAINER_ID}/memory.swappiness
> 60

все попытки изменить swappiness вручную (повторяя желаемое значение в memory.swappiness файл) не удается с permission denied.

тема: как я могу ограничить замену контейнеров?

я использую ubuntu 12.04 С ядром 3.13 Мои настройки версия 1.1.2 с собственным драйвером выполнения (не lxc) версии 0.2. Ядро загружается с cgroup_enable=memory swapaccount=1.

2 ответов


при обновлении до ядра 3.18 или более поздней версии ограничение, препятствующее модификации cgroup memory.swappiness параметр в дочерних / иерархических группах удаляется. Патч ядра Linux, который удалил это ограничение, можно увидеть здесь: https://github.com/torvalds/linux/commit/3dae7fec5e884a4e72e5416db0894de66f586201

Docker 1.8, скорее всего, будет включать следующий PR (https://github.com/docker/docker/pull/14004) которое позволяет контейнеру установите свой собственный memory.swappiness значение, позволяющее пользователю управлять этим параметром cgroup, если ядро хоста docker daemon имеет патч, указанный выше, или ядро хоста 3.18 или выше.


понял! Docker даже не касается этого параметра. memory.swappines для групп, действительно изменяющихся в соответствии /proc/vm/swappiness. Все дети наследуют это значение от parent. Docker даже не касается этого параметра. Более того, в некоторых случаях (и именно в моем собственном) нет возможности написать что-то в memory.swappines. если cgroup памяти использует иерархию или содержит детей, все попытки написать что-то в cgroups memory.swappiness не удастся.

посмотреть там. Это от mm/memcontrol.c.

static int mem_cgroup_swappiness_write(struct cgroup_subsys_state *css,
                       struct cftype *cft, u64 val)
{
    struct mem_cgroup *memcg = mem_cgroup_from_css(css);
    struct mem_cgroup *parent = mem_cgroup_from_css(css_parent(&memcg->css));

    if (val > 100 || !parent)
        return -EINVAL;

    mutex_lock(&memcg_create_mutex);

    /* If under hierarchy, only empty-root can set this value */
    if ((parent->use_hierarchy) || memcg_has_children(memcg)) {
        mutex_unlock(&memcg_create_mutex);
        return -EINVAL;
    }

    memcg->swappiness = val;

    mutex_unlock(&memcg_create_mutex);

    return 0;
}