TL; DR : Từ nghiên cứu ngắn gọn, có thể hạn chế các lệnh đối với số lượng lõi cụ thể, tuy nhiên trong mọi trường hợp bạn phải sử dụng một lệnh thực sự hạn chế.
nhóm
Linux cgroups
thường được sử dụng chính xác cho mục đích hạn chế tài nguyên có sẵn cho các quy trình. Từ một nghiên cứu ngắn gọn, bạn có thể tìm thấy một ví dụ trong Arch Wiki với cấu hình Matlab (một phần mềm khoa học) được đặt trong /etc/cgconfig.conf
:
group matlab {
perm {
admin {
uid = username;
}
task {
uid = username;
}
}
cpuset {
cpuset.mems="0";
cpuset.cpus="0-5";
}
memory {
memory.limit_in_bytes = 5000000000;
}
}
Để cấu hình như vậy có hiệu lực, bạn phải chạy quy trình thông qua cgexec
lệnh, ví dụ từ cùng một trang wiki:
$ cgexec -g memory,cpuset:matlab /opt/MATLAB/2012b/bin/matlab -desktop
nhiệm vụ
Một câu hỏi liên quan về Hỏi Ubuntu và Làm cách nào để giới hạn một quy trình trong một lõi CPU trong Linux? [trùng lặp] trên trang web Unix & Linux cho thấy một ví dụ về việc sử dụng taskset
để giới hạn CPU cho quy trình. Trong câu hỏi đầu tiên, nó đạt được thông qua phân tích tất cả các quy trình cho một người dùng cụ thể
$ ps aux | awk '/^housezet/{print $2}' | xargs -l taskset -p 0x00000001
Trong câu hỏi khác, một quá trình được bắt đầu thông qua taskset
chính nó:
$ taskset -c 0 mycommand --option # start a command with the given affinity
Phần kết luận
Mặc dù chắc chắn có thể hạn chế các quy trình, nhưng có vẻ như không đơn giản để đạt được điều đó cho người dùng cụ thể. Ví dụ trong bài viết Hỏi Ubuntu được liên kết sẽ yêu cầu quét nhất quán các quy trình thuộc về mỗi người dùng và sử dụng taskset
trên mỗi người dùng mới. Một cách tiếp cận hợp lý hơn sẽ là chạy có chọn lọc các ứng dụng chuyên sâu về CPU, thông qua cgexec
hoặc taskset
; Sẽ không có ý nghĩa gì khi hạn chế tất cả các quy trình với số lượng CPUS cụ thể, đặc biệt đối với những quy trình thực sự sử dụng song song và đồng thời để chạy các tác vụ của chúng nhanh hơn - giới hạn chúng với số lượng CPU cụ thể có thể có tác dụng làm chậm quá trình xử lý. Ngoài ra, như câu trả lời của terdon đã đề cập đến việc lãng phí tài nguyên
Chạy các ứng dụng được chọn thông qua taskset
hoặc cgexec
yêu cầu giao tiếp với người dùng của bạn để cho họ biết những ứng dụng nào họ có thể chạy hoặc tạo tập lệnh bao bọc sẽ khởi chạy các ứng dụng được chọn thông qua tasksel
hoặc cgexec
.
Ngoài ra, hãy xem xét cài đặt số lượng quy trình mà người dùng hoặc nhóm có thể sinh ra thay vì đặt giới hạn số lượng CPU. Điều này có thể đạt được thông qua /etc/security/limits.conf
tập tin .
Xem thêm