Hitung jumlah CPU yang diizinkan dalam wadah Docker

14

Skenario spesifik saya adalah sebagai berikut. Saya meluncurkan wadah buruh pelabuhan dengan cpuset tertentu:

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

di dalam wadah itu saya menjalankan skrip shell sebagai titik masuk dan skrip shell itu akan berjalan makedi beberapa titik. Saya ingin mengetahui berapa jumlah pekerjaan yang baik ( -j). Saya tentu saja bisa melewati jumlah CPU yang dialokasikan melalui lingkungan, tetapi cara otomatis untuk mendeteksinya akan jauh lebih disukai.

Saya tahu saya dapat menggunakan taskset -c -p $$atau cat /proc/self/status | grep Cpus_allowed_listuntuk mengambil Cpus_alloweduntuk proses saat ini, tetapi saya tidak tahu bagaimana cara mengambil jumlah aktual dari CPU yang diizinkan. Saya ingin menghindari parsing output dari perintah-perintah atau mengutak-atik Cpus_allowedtopeng, tetapi akan melakukannya, ketika keluar dari opsi.

sore
sumber
1
nproc- cetak jumlah unit pemrosesan yang tersedia
Brian
@ Brian Itu terlalu mudah.
sore

Jawaban:

19

Anda dapat menggunakan nprocalat skrip shell.

Jadi itu akan berada -j$(nproc)di baris perintah make yang dimaksud.

Brian
sumber
1
"buruh pelabuhan menjalankan --rm --cpus 2 debian nproc" -> 8?
Evan Benn
2
@ EvanBenn --cpus="2"tidak membatasi jumlah unit pemrosesan dan setara dengan -cpu-period="100000" and --cpu-quota="200000".
Brian