2014-09-10 5 views
6

Ich benutze Docker Container zu bündeln viele Dienste. Manchmal werden die containerisierten Dienste stark ausgetauscht. Ich habe vm.swappiness zu 1 über sysctl auf meinem Host-System geändert. Die Speicher-Cgroup des Andockers hat jedoch immer noch den alten (Standardwert) Wert von 60. Daher haben alle C-Gruppen bestimmter Container denselben Wert wie Parent.Ändern Swappiness für Docker-Container

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 

Alle Versuche swappiness manuell zu ändern (indem gewünschten Wert in memory.swappiness Datei Echo) nicht mit permission denied.

Betreff: Wie kann ich Container Swappiness einschränken?

ich verwende ubuntu 12.04 mit Kernel 3.13, ist meine Docker Version 1.1.2 mit nativen Ausführung Treiber (nicht LXC) der Version 0.2. Der Kernel wird mit cgroup_enable=memory swapaccount=1 geladen.

Antwort

2

Verstanden! Docker berührt diesen Parameter nicht einmal. memory.swappines für cgroups wirklich entsprechend /proc/vm/swappiness ändern. Alle Kinder erben diesen Wert von Parent. Docker berührt diesen Parameter nicht einmal. Außerdem gibt es in einigen Fällen (und genau in meinem Fall) keine Möglichkeit, etwas in memory.swappines zu schreiben. Wenn Speichercgroup Hierarchie verwendet oder untergeordnete Elemente enthält, schlagen alle Versuche fehl, etwas in cgroups memory.swappiness zu schreiben.

Schauen Sie dort. Dies ist von 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; 
} 
3

Wenn Sie oder später zu einem 3,18-Kernel aktualisieren, die Beschränkung auf die cgroup memory.swappiness Parameter in Kind/Hierarchie cgroups verhindert Modifikation entfernt. Der Linux-Kernel-Patch, der diese Einschränkung entfernt sind hier zu sehen: https://github.com/torvalds/linux/commit/3dae7fec5e884a4e72e5416db0894de66f586201

Docker 1.8 höchstwahrscheinlich auch die folgenden PR (https://github.com/docker/docker/pull/14004), die der Behälter seine eigenen memory.swappiness Wert ermöglicht Benutzer die Kontrolle über diese cgroup Einstellung festlegen können, so lange Der Kernel des Docker-Daemon-Hosts hat das oben erwähnte Patch oder der Host-Kernel ist 3.18 oder höher.