Berapa banyak CPU yang digunakan kontainer buruh pelabuhan?

120

Katakanlah saya menjalankan layanan multiprosesing di dalam kontainer buruh pelabuhan yang menghasilkan banyak proses, apakah pekerja pelabuhan akan menggunakan semua / beberapa inti / CPU dari host atau hanya satu?

kev
sumber
11
CPU sebanyak mungkin di dalam cgroup yang diijinkan untuk digunakan. Yang, secara default, tidak terbatas. Lihat --cpuset-cpusapakah Anda ingin mengubahnya.
Charles Duffy
3
(Wadah buruh pelabuhan hanyalah sekumpulan ruang nama pribadi - karena tidak meniru CPU, ia harus berusaha keras untuk memaksakan batasan apa pun pada mereka; Kernel Linux menyediakan fasilitas untuk memungkinkan keluar-keluar- cara seseorang, tapi itu masih sesuatu yang perlu benar-benar dilakukan secara eksplisit).
Charles Duffy
Bagaimana dengan Docker Toolbox di Windows yang menggunakan VirtualBox?
Egor Kraev

Jawaban:

111

Seperti yang disebutkan Charles, secara default semua dapat digunakan, atau Anda dapat membatasinya per penampung menggunakan --cpuset-cpusparameter.

docker run --cpuset-cpus="0-2" myapp:latest

Itu akan membatasi penampung menjadi 3 CPU (0, 1, dan 2). Lihat dokumentasi menjalankan buruh pelabuhan untuk lebih jelasnya.


Cara yang disukai untuk membatasi penggunaan CPU atas kontainer adalah dengan batas pecahan pada CPU:

docker run --cpus 2.5 myapp:latest

Itu akan membatasi penampung Anda menjadi 2,5 core pada host.


Terakhir, jika Anda menjalankan buruh pelabuhan di dalam VM, termasuk Docker untuk Mac, Docker untuk Windows, dan mesin buruh pelabuhan, VM tersebut akan memiliki batas CPU terpisah dari laptop Anda sendiri. Docker berjalan di dalam VM itu dan akan menggunakan semua sumber daya yang diberikan ke VM itu sendiri. Misalnya dengan Docker untuk Mac Anda memiliki menu berikut:

Docker untuk Mac Pengaturan lanjutan

BMitch
sumber
Apakah dua kontainer buruh pelabuhan yang berjalan di VM yang sama dengan 2 CPU memengaruhi kinerja jika keduanya merupakan proses pemijahan? Jadi keduanya memunculkan dua proses dengan total empat saat hanya ada 2 CPU di VM?
cocoPuffs
@cocoPuffs kecuali Anda menentukan batas CPU, itu sama seperti jika Anda menjalankan proses tersebut di luar penampung pada host yang sama. Menambahkan batas CPU ke setiap penampung dapat mencegah proses di satu penampung menggunakan semua sumber daya CPU untuk dirinya sendiri.
BMitch
Benar-benar komprehensif, hal
Darragh Enright
7

Mungkin VM host Anda hanya memiliki satu inti secara default. Oleh karena itu Anda harus meningkatkan VM cpu-count Anda terlebih dahulu dan kemudian menggunakan opsi --cpuset-cpus untuk meningkatkan inti buruh pelabuhan Anda. Anda dapat menghapus VM default buruh pelabuhan menggunakan perintah berikut, lalu Anda dapat membuat VM lain dengan opsional cpu-count dan ukuran memori . :

docker-machine rm default
docker-machine create -d virtualbox --virtualbox-cpu-count=8 --virtualbox-memory=4096 --virtualbox-disk-size=50000 default

Setelah langkah ini Anda dapat menentukan jumlah inti sebelum menjalankan gambar Anda. perintah ini akan menggunakan 4 inti dari total 8 inti.

docker run -it --cpuset-cpus="0-3" your_image_name

Kemudian Anda dapat memeriksa jumlah inti yang tersedia di gambar Anda menggunakan perintah ini:

nproc
arcsin.dll
sumber