Skip to content
 

Giới thiệu về Linux Control Groups (cgroups)

Nhân Linux từ phiên bản 2.6.24 có tính năng mới gọi là “control groups” thường được gọi là “cgroups”. Cgroups cho phép bạn có thể cấp phát tài nguyên – như thời gian sử dụng CPU, bộ nhớ hệ thống, băng thông mạng. Bạn có thể theo dõi cgroups, từ chối cgroups sử dụng tài nguyên nhất định và ngay cả việc cấu hình lại cgroups trên một hệ thống đang chạy.

Sử dụng cgroups, người quản trị hệ thống có thể điều khiển các việc như cấp phát, ưu tiên, từ chối, quản lí và theo theo dõi tài nguyên hệ thống. Tài nguyên phần cứng sẽ được chia sẽ hiệu quả giữa các người dùng và tăng khả năng ổn định của hệ thống.

Tương tự như các tiến trình, cgroups có cấu trúc phân cấp, những cgroups con (child) sẽ thừa hưởng các thuộc tính từ cgroups cha (parent). Trong cgroups, các tài nguyên hệ thống được gọi bằng thuật ngữ “subsystem” hay “resource controller” và các tiến trình trên hệ thống được gọi là “task”.

1. Cgroups được tổ chức như thế nào ?

Cgroups được tổ chức có cấp bậc, các child cgroup thừa hưởng các thuộc tính từ parent cgroup. Trên một hệ thống có thể có nhiều parent cgroup.

Các subsystem phổ phiến trên cgroups:

  • cpu: sử dụng OS scheduler để cấp phát CPU cho các “task”.
  • cpuacct: báo cáo về trình trạng sử dụng CPU của các “task”.
  • cpuset: giới hạn việc sử dụng số lượng CPU trên hệ thống nhiều CPU.
  • memory: giới hạn việc sử dụng bộ nhớ hệ thống.
  • blkio: giới hạn việc truy cập nhập/xuất(I/O) đến các thiết bị như ổ đĩa cứng.
  • net_cls: đánh số classid cho từng gói tin nhằm giúp Linux Traffic Controller(tc) có thể biết gói tin đến từ cgroup nào.
  • net_prio: giới hạn băng thông mạng theo độ ưu tiên.

2. Các quy tắc trong Cgroups:

Cgroups được thiết kế theo bốn quy tắc sau:

  • Quy tắc thứ 1: Một hệ thống cấp bậc(hierarchy) có thể một hoặc nhiều “subsystem” gắn vào.

Linux Cgroups #Rule 1

  • Quy tắc thứ 2: Một “subsystem” bất kì không thể gắn vào nhiều hơn một hệ thống cấp bật nếu một trong hệ thống cấp bật đó đang có một “subsystem” khác loại đang gắn vào.

Linux Cgroups # Rule 2

  • Quy tắc thứ 3: Mỗi “task” trên hệ thống chỉ được thuộc về một cgroup duy nhất trong cùng hệ thống cấp bậc.

Linux Cgroups # Rule 3

  • Quy tắc thứ 4: Khi một “parent task” (Process) tạo ra(fork) một “child task” thì “child task” này sẽ tự động nằm trong cgroup mà “parent task” đang thuộc về .

Linux Cgroups # Rule 4

Tài liệu tham khảo:

This work, unless otherwise expressly stated, is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Vietnam License.