Tôi có 3 quy trình trên một máy lõi đơn. Mỗi quá trình là hoàn toàn giống nhau và đốt cháy CPU nhanh nhất có thể (vòng lặp chặt chẽ). Hai trong số chúng ( A
và B
) được khởi chạy với cgexec trong các nhóm riêng biệt với cổ phần được đặt thành 512 và 512. Thứ ba ( C
) được khởi chạy thường xuyên, không phải với cgexec.
Khi tất cả đã hoạt động, hãy C
lấy 66% CPU A
và B
chia 33%. Nếu tôi giết C
sau đó A
và B
nhận 50% mỗi cái (như mong đợi).
Tại sao C
nhận được 66%? Tôi đã mong đợi 33% mỗi kịch bản trong kịch bản này, hoặc có thể 50% (C), 25% (A) và 25% (B). 66% sẽ C
không thành công cho dù tôi có làm toán như thế nào.
Nói chung, tôi muốn hiểu làm thế nào các quy trình được khởi chạy mà không cgexec
tương tác với các quy trình được khởi chạy cgexec
khi chia sẻ tài nguyên (cụ thể là CPU, nhưng một câu trả lời chung chung hơn sẽ được đánh giá cao nếu nó không quá phức tạp).
top
và tôi tin rằng chúng được bắt đầu khá đơn giản từ một dấu nhắc lệnh: cgexec -g cpu:foo myprogram
và ./myprogram
. Đã được một thời gian nên tôi không nhớ chắc chắn.
cpu.shares
là một tùy chọn cấu hình rất đặc biệt; Tôi khuyên bạn nên chia nhỏ mọi thứ bằng CPU nếu có thể sử dụng cpuset.cpus
thay thế.