Cgroup
Chào các bạn, vẫn là tôi - MinhKMA. Tôi đã chạy docker được năm rồi nhưng mới chỉ dừng lại ở docker-compose. Lần này quay lại với nó với mục đích tiến xa hơn với công nghệ container này.
Trong phần này chúng ta sẽ xem xét các Control Groups (cgroups), cung cấp một cơ chế để dễ dàng quản lý và giám sát tài nguyên hệ thống, bằng cách phân vùng những thứ như cpu time, system memory, disk và network bandwidth thành các nhóm, sau đó phân công nhiệm vụ cho các nhóm đó .
Hãy để tôi thử và giải thích Control Groups là gì và chúng cho phép bạn làm gì. Chúng ta hãy bắt đầu bằng một ví dụ:
Bạn có một resources intensive application trên máy chủ
Trong việc chia sẻ tài nguyên giữa tất cả các tiến trình trên một hệ thống, Linux is great. Nhưng với trường hợp bạn muốn To allocate or guarantee, a greater amount to a specific application, or a set of applications thì Cgroup sẽ giúp ích bạn. (Phần này xin phép mình không dịch nó :D)
Ví dụ: Giả sử Tôi muốn gán hoặc cô lập tài nguyên cho ứng dụng, hãy tạo hai nhóm:
- Nhóm #1 sẽ dành cho hệ điều hành
- Nhóm #2 sẽ dành cho ứng dụng của tôi
Sau đó chúng tôi có thể define thông tin về tài nguyên cho từng nhóm.
Hãy tập trung vào Nhóm #2 một lát. Tôi muốn quản lý cpu, memory, disk và network bandwidth cho ứng dụng nên tôi đã tạo ra một nhóm và giới hạn tài nguyên cho nhóm vừa tạo. Vì thế nhưng ứng dụng thuộc nhóm này không thể vượt quá tài nguyên mà tôi đã gán cho nhóm trước đó.
Như vậy bạn có thể thấy, các ứng dụng trong nhóm #2 không thể vượt quá được:
- 80% CPU
- 10GB memory
- 80% of disk reads and writes
- 80% of our network bandwidth
Khi nhóm được tạo ra, bạn chỉ cần gán PIDs của các ứng dụng mình muốn và các ứng dụng sẽ tự động điều chỉ mà không cần phải khởi động lại hệ thống.
Thay vào đó chúng ta có hệ điều hành và có thể có nhiều nhóm:
Nào, để dễ hình dung hơn tôi sẽ làm một ví dụ cụ thể:
Cài đặt libcgroup
yum install libcgroup libcgroup-tools -y systemctl start cgconfig systemctl enable cgconfig
Tạo demo1 trong blkio control group
[root@pihole ~]# mkdir /sys/fs/cgroup/blkio/demo1 [root@pihole demo1]# cd /sys/fs/cgroup/blkio/demo1 [root@pihole demo1]# lscgroup [root@pihole demo1]# lscgroup | grep demo1 blkio:/demo1 [root@pihole demo1]#
Thực hiện việc đọc ghi dữ liệu thông thường
[root@pihole ~]# dd if=/dev/zero of=file-abc bs=1M count=2000 2000+0 records in 2000+0 records out 2097152000 bytes (2,1 GB) copied, 26,1617 s, 80,2 MB/s [root@pihole ~]# dd if=/dev/zero of=file-xyz bs=1M count=2000 2000+0 records in 2000+0 records out 2097152000 bytes (2,1 GB) copied, 23,308 s, 90,0 MB/s [root@pihole ~]# free -m total used free shared buff/cache available Mem: 3790 195 135 8 3459 3231 Swap: 2047 1 2046 [root@pihole ~]# echo 3 > /proc/sys/vm/drop_caches [root@pihole ~]# free -m total used free shared buff/cache available Mem: 3790 186 2913 8 690 3349 Swap: 2047 1 2046 [root@pihole ~]#
Giới hạn rw trong group demo1
[root@pihole demo1]# ls -l /dev/sda* brw-rw---- 1 root disk 8, 0 Jan 4 16:08 /dev/sda brw-rw---- 1 root disk 8, 1 Jan 4 16:08 /dev/sda1 brw-rw---- 1 root disk 8, 2 Jan 4 16:08 /dev/sda2 [root@pihole demo1]# echo "8:0 5242880" > blkio.throttle.read_bps_device [root@pihole demo1]# echo 3 > /proc/sys/vm/drop_caches [root@pihole demo1]# free -m total used free shared buff/cache available Mem: 3790 175 3511 8 103 3429 Swap: 2047 1 2046 [root@pihole demo1]#
Ở đây mình đã giới hạn read 5MB cho demo1
Kiểm tra:
[root@pihole ~]# cgexec -g blkio:demo1 dd if=file-abc of=/dev/null 2363041+0 records in 2363040+0 records out 1209876480 bytes (1,2 GB) copied, 246,069 s, 4,9 MB/s [root@pihole ~]#
Kết quả đúng như gì mong đợi phải không?
4,9 MB/s
so với ban đầu là90,0 MB/s