Làm thế nào để các nhóm tương tác với các quá trình không nhóm?


12

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 ( AB) đượ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 Clấy 66% CPU ABchia 33%. Nếu tôi giết Csau đó ABnhận 50% mỗi cái (như mong đợi).

Tại sao Cnhậ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ẽ Ckhô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 cgexectương tác với các quy trình được khởi chạy cgexeckhi 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).


Trước hết, tôi tự hỏi làm thế nào để bạn đo tỷ lệ sử dụng CPU? Các ưu tiên bạn chạy A, B và C là gì?
KWubbufetowicz

Tôi tin rằng tôi đã đo mức độ sử dụng CPU topvà 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./myprogram. Đã được một thời gian nên tôi không nhớ chắc chắn.
Micah Zoltu

Nó có thể là trường hợp mà chương trình của tôi sử dụng nhiều hơn một luồng / quy trình không? Btw bạn vẫn quan tâm đến việc giải quyết vấn đề này?
KWubbufetowicz

Chương trình là một ứng dụng thử nghiệm được viết chỉ để kiểm tra hành vi này. Đó là cố ý đơn luồng để thu hẹp kết quả. Tôi vẫn quan tâm đến một câu trả lời cho câu hỏi này.
Micah Zoltu

Trang này từ RedHat có thể hỗ trợ ở đây. cpu.shareslà 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.cpusthay thế.
tự đại diện

Câu trả lời:


3

Các nhóm là chữ tượng hình và chúng được kế thừa bởi tất cả các quy trình con. Vì vậy, tất cả các quy trình phải ở trong một số nhóm. Theo mặc định, đó là nhóm gốc và theo mặc định, nó có 1024 cổ phần, gấp đôi A và B trong ví dụ của bạn.

Thời gian CPU được chia sẻ các nhóm betwean theo trọng lượng được gán cho chúng trong cpu.shares.

Nếu A có 1024 cổ phiếu và B 512 và C 256 và D 256, phân phối thời gian cpu sẽ là A - 50%, B - 25%, C và D 12,5%.


Vì vậy, bất kỳ quy trình nào không được khởi chạy với cgexec đều nằm trong nhóm gốc với 1024 lượt chia sẻ, chia đều cho tất cả trẻ em ngay lập tức. Một đứa trẻ ngay lập tức là nhóm được tạo ra bằng cách gọi cgexec. Vì vậy, cgexecquá trình không xử lý sẽ nhận được 50% và các quy trình được nhóm sẽ chia sẻ 50% còn lại. Trong các quy trình được nhóm, họ chia sẻ đồng đều 50%, nghĩa là cả hai đều nhận được 25%. Điều này sẽ có ý nghĩa, nhưng nó không phải là hành vi tôi quan sát. Những gì tôi thấy là 66%, 33% và 33%. Bạn có thể cập nhật câu trả lời để bao gồm thêm chi tiết và có lẽ là một bản phân phối mẫu không?
Micah Zoltu

Ồ, tôi nghĩ rằng tôi thấy. Bất kỳ quá trình nào trên HĐH được khởi chạy mà không cgexecnhận được 1024 cổ phiếu. Bất kỳ quá trình đưa ra với cgexeccác cổ phiếu được chỉ định. Vì vậy, trong trường hợp này, một quá trình nhận được 1024 cổ phiếu và hai quá trình còn lại nhận được 512 cổ phiếu, dẫn đến phân phối mà tôi thấy. Bạn có phiền cập nhật câu trả lời của bạn để làm rõ hơn một chút, ví dụ, với một ví dụ?
Micah Zoltu

Trên thực tế, điều đó vẫn không thêm. 1024 + 512 + 512 = 2048. 512/2048 == 25%. Tôi không tin câu trả lời này thực sự chính xác, ít nhất là không phải trên bề mặt.
Micah Zoltu

Bạn có nhóm nào khác không? Nó có thể ảnh hưởng đến những con số. Bạn cũng có thể kiểm tra tài liệu redhat, ther là một ví dụ simmilar access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/...
Lazy404

Không có gì khác có ý nghĩa khi chạy, hộp không hoạt động trước và sau khi chạy thử. Tất cả các ví dụ chỉ hiển thị những gì xảy ra khi tất cả các quy trình được bắt đầu với thiết lập cgroups. Nó không thảo luận về những gì xảy ra khi một số quy trình không sử dụng các nhóm, đó là những gì tôi đang cố gắng tìm ra.
Micah Zoltu
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.