Câu trả lời:
Trước hết tôi muốn bạn hiểu về Cgroups là một phần của tiện ích LXC. Khi bạn có một container, rõ ràng bạn sẽ muốn đảm bảo rằng các container khác nhau mà bạn đang chạy đã bỏ đói bất kỳ container nào khác hoặc xử lý bên trong. Với suy nghĩ này, anh chàng tốt bụng của dự án LXChay còn gọi là Daniel Lezcano tích hợp các nhóm với công nghệ container mà anh ta đang tạo ra tức là LXC. Bây giờ nếu bạn muốn chỉ định sử dụng tài nguyên, bạn sẽ cần xem xét cấu hình CGROUP của mình. Các nhóm cho phép bạn phân bổ tài nguyên, chẳng hạn như thời gian CPU, bộ nhớ hệ thống, băng thông mạng hoặc kết hợp các tài nguyên này với nhau giữa các nhóm tác vụ (quy trình) do người dùng xác định đang chạy trên hệ thống. Bạn có thể theo dõi các nhóm bạn định cấu hình, từ chối quyền truy cập của các nhóm vào một số tài nguyên nhất định và thậm chí cấu hình lại các nhóm của bạn một cách linh hoạt trên một hệ thống đang chạy. Dịch vụ cgconfig (cấu hình nhóm điều khiển) có thể được cấu hình để khởi động khi khởi động và thiết lập lại các nhóm được xác định trước của bạn, do đó làm cho chúng liên tục trong các lần khởi động lại. Các nhóm có thể có nhiều cấu trúc phân cấp vì mỗi cấu trúc phân cấp được gắn vào một hoặc nhiều hệ thống con (còn được gọi là bộ điều khiển tài nguyên hoặc bộ điều khiển). Điều này sau đó sẽ tạo ra nhiều cây không được kết nối. Có chín hệ thống con có sẵn.
Chúng ta có thể liệt kê các hệ thống con mà chúng ta có trong kernel bằng lệnh:
lssubsys –am
lxc-cgroup nhận hoặc đặt giá trị từ nhóm điều khiển được liên kết với tên container. Quản lý nhóm kiểm soát liên kết với một container. sử dụng ví dụ:
lxc-cgroup -n foo cpuset.cpus "0,3"
gán bộ xử lý 0 và 3 cho container.
Bây giờ, tôi có ý kiến trả lời câu hỏi ban đầu của bạn. Nhưng hãy để tôi thêm một chút các tham số có thể hữu ích cho bạn để định cấu hình bộ chứa của bạn để sử dụng lxc. có dạng cô đọng của tài liệu kiểm soát tài nguyên bằng cách làm lại
Thông số có thể sửa đổi BLKIO:
blkio.reset_stats : any int to reset the statistics of BLKIO
blkio.weight : 100 - 1000 (relative proportion of block I/O access)
blkio.weight_device : major, minor , weight 100 - 1000
blkio.time : major, minor and time (device type and node numbers and length of access in milli seconds)
blkio.throttle.read_bps_device : major, minor specifies the upper limit on the number of read operations a device can perform. The rate of the read operations is specified in bytes per second.
blkio.throttle.read_iops_device :major, minor and operations_per_second specifies the upper limit on the number of read operations a device can perform
blkio.throttle.write_bps_device : major, minor and bytes_per_second (bytes per second)
blkio.throttle.write_iops_device : major, minor and operations_per_second
Thông số có thể sửa đổi CFS:
cpu.cfs_period_us : specifies a period of time in microseconds for how regularly a cgroup's access to CPU resources should be reallocated. If tasks in a cgroup should be able to access a single CPU for 0.2 seconds out of every 1 second, set cpu.cfs_quota_us to 200000 and cpu.cfs_period_us to 1000000.
cpu.cfs_quota_us : total amount of time in microseconds that all tasks in a cgroup can run during one period. Once limit has reached, they are not allowed to run beyond that.
cpu.shares : contains an integer value that specifies the relative share of CPU time available to tasks in a cgroup.
Note: For example, tasks in two cgroups that have cpu.shares set to 1 will receive equal CPU time, but tasks in a cgroup that has cpu.shares set to 2 receive twice the CPU time of tasks in a cgroup where cpu.shares is set to 1. Note that shares of CPU time are distributed per CPU. If one cgroup is limited to 25% of CPU and another cgroup is limited to 75% of CPU, on a multi-core system, both cgroups will use 100% of two different CPUs.
Thông số có thể thay đổi RT:
cpu.rt_period_us : time in microseconds for how regularly a cgroups access to CPU resources should be reallocated.
cpu.rt_runtime_us : same as above.
CPUset:
cpuset subsystem assigns individual CPUs and memory nodes to cgroups.
Note: here some parameters are mandatory
Mandatory:
cpuset.cpus : specifies the CPUs that tasks in this cgroup are permitted to access. This is a comma-separated list in ASCII format, with dashes (" -") to represent ranges. For example 0-2,16 represents CPUs 0, 1, 2, and 16.
cpuset.mems : specifies the memory nodes that tasks in this cgroup are permitted to access. same as above format
Optional:
cpuset.cpu_exclusive : contains a flag ( 0 or 1) that specifies whether cpusets other than this one and its parents and children can share the CPUs specified for this cpuset. By default ( 0), CPUs are not allocated exclusively to one cpuset.
cpuset.mem_exclusive : contains a flag ( 0 or 1) that specifies whether other cpusets can share the memory nodes specified for this cpuset. By default ( 0), memory nodes are not allocated exclusively to one cpuset. Reserving memory nodes for the exclusive use of a cpuset ( 1) is functionally the same as enabling a memory hardwall with the cpuset.mem_hardwall parameter.
cpuset.mem_hardwall : contains a flag ( 0 or 1) that specifies whether kernel allocations of memory page and buffer data should be restricted to the memory nodes specified for this cpuset. By default ( 0), page and buffer data is shared across processes belonging to multiple users. With a hardwall enabled ( 1), each tasks' user allocation can be kept separate.
cpuset.memory_pressure_enabled : contains a flag ( 0 or 1) that specifies whether the system should compute the memory pressure created by the processes in this cgroup
cpuset.memory_spread_page : contains a flag ( 0 or 1) that specifies whether file system buffers should be spread evenly across the memory nodes allocated to this cpuset. By default ( 0), no attempt is made to spread memory pages for these buffers evenly, and buffers are placed on the same node on which the process that created them is running.
cpuset.memory_spread_slab : contains a flag ( 0 or 1) that specifies whether kernel slab caches for file input/output operations should be spread evenly across the cpuset. By default ( 0), no attempt is made to spread kernel slab caches evenly, and slab caches are placed on the same node on which the process that created them is running.
cpuset.sched_load_balance : contains a flag ( 0 or 1) that specifies whether the kernel will balance loads across the CPUs in this cpuset. By default ( 1), the kernel balances loads by moving processes from overloaded CPUs to less heavily used CPUs.
Thiết bị:
The devices subsystem allows or denies access to devices by tasks in a cgroup.
devices.allow : specifies devices to which tasks in a cgroup have access. Each entry has four fields: type, major, minor, and access.
type can be of following three values:
a - applies to all devices
b - block devices
c - character devices
access is a sequence of one or more letters:
r read from device
w write to device
m create device files that do not yet exist
devices.deny : similar syntax as above
devices.list : reports devices for which access control has been set for tasks in this cgroup
Ký ức:
Hệ thống con bộ nhớ tạo báo cáo tự động về tài nguyên bộ nhớ được sử dụng bởi các tác vụ trong một nhóm và đặt giới hạn cho việc sử dụng bộ nhớ bởi các tác vụ đó Các tham số có thể sửa đổi bộ nhớ: memory.limit_in_bytes: đặt lượng bộ nhớ người dùng tối đa. có thể sử dụng các hậu tố như K cho kilo và M cho mega, v.v ... Điều này chỉ giới hạn các nhóm thấp hơn trong chế độ thừa kế. tức là cgroup gốc không thể bị giới hạn bộ nhớ.memsw.limit_in_bytes: đặt số lượng tối đa cho tổng bộ nhớ và sử dụng trao đổi. một lần nữa điều này không thể giới hạn các nhóm gốc.
Note: memory.limit_in_bytes should always be set before memory.memsw.limit_in_bytes because only after limit, can swp limit be set
memory.force_empty : when set to 0, empties memory of all pages used by tasks in this cgroup
memory.swappiness : sets the tendency of the kernel to swap out process memory used by tasks in this cgroup instead of reclaiming pages from the page cache. he default value is 60. Values lower than 60 decrease the kernel's tendency to swap out process memory, values greater than 60 increase the kernel's tendency to swap out process memory, and values greater than 100 permit the kernel to swap out pages that are part of the address space of the processes in this cgroup.
Note: Swappiness can only be asssigned to leaf groups in the cgroups architecture. i.e if any cgroup has a child cgroup, we cannot set the swappiness for that
memory.oom_control : contains a flag ( 0 or 1) that enables or disables the Out of Memory killer for a cgroup. If enabled ( 0), tasks that attempt to consume more memory than they are allowed are immediately killed by the OOM killer.
net_cls:
Hệ thống con net_cls gắn thẻ các gói mạng với một mã định danh lớp (classid) cho phép bộ điều khiển lưu lượng Linux (tc) xác định các gói có nguồn gốc từ một nhóm cụ thể. Bộ điều khiển lưu lượng có thể được cấu hình để gán các mức độ ưu tiên khác nhau cho các gói từ các nhóm khác nhau.
net_cls.classid : 0XAAAABBBB AAAA = major number (hex)
BBBB = minor number (hex)
net_cls.classid contains a single value that indicates a traffic control handle. The value of classid read from the net_cls.classid file is presented in the decimal format while the value to be written to the file is expected in the hexadecimal format. e.g. 0X100001 = 10:1
net_prio:
Hệ thống con Ưu tiên mạng (net_prio) cung cấp một cách để tự động đặt mức độ ưu tiên của lưu lượng mạng trên mỗi giao diện mạng cho các ứng dụng trong các nhóm khác nhau. Ưu tiên của mạng là số được gán cho lưu lượng mạng và được sử dụng nội bộ bởi hệ thống và thiết bị mạng. Ưu tiên mạng được sử dụng để phân biệt các gói được gửi, xếp hàng hoặc bỏ. bộ điều khiển lưu lượng (tc) có trách nhiệm đặt mức độ ưu tiên của mạng.
net_prio.ifpriomap : networkinterface , priority (/cgroup/net_prio/iscsi/net_prio.ifpriomap)
Contents of the net_prio.ifpriomap file can be modified by echoing a string into the file using the above format, for example:
~]# echo "eth0 5" > /cgroup/net_prio/iscsi/net_prio.ifpriomap
Tài liệu này khá hữu ích: http://doc.opensuse.org/documentation/html/openSUSE/opensuse-tuning/cha.tuning.cgroups.html
Thông tin có trong tài liệu nhân Linux tại đây: / usr / src / linux / Documentation / cgroups