2014-09-10 20 views
6

Tôi đang sử dụng docker để container hóa các gói dịch vụ. Một số lần, dịch vụ container được hoán đổi rất nhiều. Tôi đã thay đổi vm.swappiness thành 1 qua sysctl trên hệ thống máy chủ của tôi. Nhưng cgroup bộ nhớ của docker vẫn có giá trị cũ (mặc định) là 60. Vì vậy, tất cả các nhóm cgroups cụ thể có cùng giá trị, như cha mẹ.Thay đổi swappiness cho 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 

Tất cả những nỗ lực để thay đổi swappiness bằng tay (bằng cách lặp lại giá trị mong muốn vào memory.swappiness tập tin) không thành công với permission denied.

Chủ đề: Làm cách nào để hạn chế sự thay đổi của vùng chứa?

Tôi đang sử dụng ubuntu 12.04 với hạt nhân 3.13, phiên bản trình docker của tôi là 1.1.2 với trình điều khiển thực thi gốc (không phải lxc) của phiên bản 0.2. Hạt nhân được tải với cgroup_enable=memory swapaccount=1.

Trả lời

2

OK! Docker thậm chí không chạm vào tham số này. memory.swappines cho các nhóm thực sự thay đổi theo /proc/vm/swappiness. Tất cả trẻ em đều thừa hưởng giá trị này từ cha mẹ. Docker thậm chí không chạm vào tham số này. Hơn nữa, trong một số trường hợp (và chính xác trong của riêng tôi) không có khả năng viết một cái gì đó trong memory.swappines. Nếu nhóm bộ nhớ sử dụng phân cấp, hoặc chứa trẻ em, mọi nỗ lực để viết một cái gì đó cho nhóm cgroups memory.swappiness sẽ không thành công.

Nhìn ở đó. Đây là từ 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

Nếu bạn nâng cấp lên một kernel 3.18 hoặc mới hơn, hạn chế ngăn chặn sửa đổi để các cgroup memory.swappiness tham số trong cgroups con/hệ thống phân cấp được lấy ra. Bản vá hạt nhân Linux đã loại bỏ hạn chế này có thể được nhìn thấy ở đây: https://github.com/torvalds/linux/commit/3dae7fec5e884a4e72e5416db0894de66f586201

Docker 1.8 rất có thể bao gồm PR sau (https://github.com/docker/docker/pull/14004) cho phép vùng chứa đặt giá trị memory.swappiness cho phép người dùng kiểm soát cài đặt nhóm này vì hạt nhân máy chủ lưu trữ Docker có bản vá được lưu ý ở trên hoặc hạt nhân chủ là 3.18 hoặc cao hơn.

Các vấn đề liên quan