Đếm số lượng CPU được phép trong bộ chứa Docker


14

Kịch bản cụ thể của tôi là như sau. Tôi khởi chạy một container docker với một cpuset cụ thể:

docker run --cpuset-cpus="0-2" # ...

bên trong container đó tôi chạy một kịch bản shell là điểm vào và kịch bản shell đó sẽ chạy maketại một số điểm. Tôi muốn tìm ra một số lượng tốt các công việc ( -j) sẽ là gì. Tất nhiên tôi có thể vượt qua số lượng CPU được phân bổ thông qua môi trường, nhưng một cách tự động để phát hiện nó sẽ được ưu tiên hơn nhiều.

Tôi biết tôi có thể sử dụng taskset -c -p $$hoặc cat /proc/self/status | grep Cpus_allowed_listtruy xuất Cpus_allowedquy trình hiện tại, nhưng tôi không biết cách truy xuất số lượng CPU thực tế được phép. Tôi muốn tránh phân tích cú pháp đầu ra của các lệnh đó hoặc thay đổi với Cpus_allowedmặt nạ, nhưng sẽ thực hiện nó khi không có tùy chọn.


1
nproc- in số lượng đơn vị xử lý có sẵn
Brian

@Brian Điều đó quá dễ dàng.
pmr

Câu trả lời:


19

Bạn có thể sử dụng nproccông cụ shell script.

Vì vậy, nó sẽ là -j$(nproc)trong dòng lệnh make trong câu hỏi.


1
"Docker chạy --rm --cpus 2 debian nproc" -> 8?
Evan Benn

2
@EvanBenn --cpus="2"không giới hạn số lượng đơn vị xử lý và tương đương với -cpu-period="100000" and --cpu-quota="200000".
Brian
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.