Điểm:0

Cách hạn chế các quy trình tương tác đang chạy với cgroup2

lá cờ br

Máy chủ gia đình của tôi đang chạy một số phần cứng đã cũ (Core i5-3450, RAID1 phần mềm trên đĩa SATA) và thường gặp sự cố khi tôi chạy những thứ đòi hỏi hiệu suất cao như công việc biên dịch bên cạnh các dịch vụ "bình thường" chạy trong nền (DNS, Web, DHCP, Thư, v.v., v.v.)

Gần đây, tôi gần như đã phá hỏng hệ thống của mình khi một công việc biên dịch chiếm gần 100% CPU và do đó, I/O chờ đợi cũng tăng vọt và về cơ bản, không có quy trình nào khác có thể nhận được bất kỳ tài nguyên miễn phí nào nữa.

Tôi đã đọc về cgroup2 và đã dùng thử. Đặt tùy chọn grub systemd.unified_cgroup_hierarchy=1 và khởi động lại. Đã tạo một cgroup mới, kích hoạt I/O và bộ điều khiển CPU và có thể ném PID của trình biên dịch của tôi vào cgroup.procs và có thể đặt thành công nó vào "nền" chỉ chạy với 5% CPU và không can thiệp vào phần còn lại của hệ thống. Công việc biên dịch gần như mất mãi mãi (vài ngày), nhưng tôi không bận tâm. Tuy nhiên, nhiều lần trong ngày, đột nhiên cài đặt cpu.max của tôi biến mất và hệ thống lại mất cân bằng.Sau khi đọc thêm về cgroup và systemd, tôi tin rằng đó là do tôi đã can thiệp vào các điều khiển systemd và về cơ bản, systemd dường như đã đặt lại cài đặt tùy chỉnh của tôi về mặc định (cpu.max == 'max 1000000'), sau đó bắt đầu phá hỏng hệ thống của tôi.

Vì vậy, tôi đọc về làm thế nào để làm điều đó đúng.

Đầu tiên tôi đặt Đại biểu = đúng với tôi [email protected] tập tin và khởi động lại.

Sau đó, tôi đã thử sinh ra một "công việc" mới bằng cách chạy systemd-run --user CPUQuota=5% stress-ng --matrix 0 -t 10m đã hoạt động thành công, tức là mức sử dụng CPU cho mỗi quy trình được giới hạn ở mức 5%/4 cho mỗi luồng căng thẳng!

Tôi có thể thấy một thư mục mới bên dưới /sys/fs/cgroup/user.slice/user-1000.slice/[email protected] trong đó có cài đặt của tôi:

mèo /sys/fs/cgroup/user.slice/user-1000.slice/[email protected]/run-raef937da699b484b80f1bf03bc049f7a.service/cpu.max
5000 100000

cgroups.procs chứa PID tương ứng của stress-ng. Thành công!

Bây giờ tôi có thể muốn thay đổi cài đặt đó. Hoặc bởi vì nó quá thấp hay vì lý do gì khác. Tôi có thể viết một giá trị khác trực tiếp vào cpu.max không? Hay tôi phải sử dụng một công cụ lệnh systemd để làm điều đó? (Cái nào?)

Vấn đề khác của tôi là: Nếu tôi không biết trước rằng một lệnh mà tôi sắp chạy có thể có tác động xấu đến hiệu suất hệ thống của tôi, thì làm cách nào để hạn chế lệnh đó sau này mà không tắt lệnh đó và chạy lại bằng systemd- chạy?

Giả sử tôi chỉ chạy "stress-ng" trong shell của mình (không có systemd-run), tôi có thể thấy PID là thành viên của cgroup phiên bình thường

mèo /proc/742779/cgroup
0::/user.slice/user-1000.slice/session-2232.scope

Nhưng mà điều đó cgroup được quản lý bởi systemd, vì vậy tôi không được phép (với quyền người dùng thông thường) tôi không được ghi vào cấu trúc cpu.max, io.max, v.v. của nó, đúng không?

Tôi có những cách hạn chế nào đối với các tiến trình đang chạy trong phiên-xxx.scope thay vì dưới quyền của tôi [email protected]? Tôi có thể "sở hữu" PID 742779 và bằng cách nào đó chuyển nó vào [email protected] phiên họp?

Tôi biết có cgcreate, cgclassify, v.v. nhưng đó chỉ là cgroup1, đúng không? (Ít nhất họ cho tôi cgcreate: khởi tạo libcgroup không thành công: Cgroup không được gắn kết kết quả là.)

Điểm:0
lá cờ us

như đã được viết ở nơi khác, thuộc tính set systemctl(trang chủ) có thể là những gì bạn đang tìm kiếm.

cyberschlumpf avatar
lá cờ br
Cảm ơn schtobia! Có cách nào để chuyển đổi PID cụ thể mà tôi muốn hạn chế sang một nhóm hoàn toàn khác không? `systemctl set-property` sẽ luôn ảnh hưởng đến toàn bộ cgroup với tất cả các PID khác trong đó, đúng không?
lá cờ us
Tôi không chắc. `libcgroup` dường như [có khả năng cgroups v2](https://github.com/libcgroup/libcgroup/issues/12), nhưng tôi không có kinh nghiệm với nó. Và vâng, `systemctl set-property` *will* luôn ảnh hưởng đến toàn bộ nhóm - hay chính xác hơn là toàn bộ [đơn vị](https://www.freedesktop.org/software/systemd/man/systemd.unit.html ).

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.