Kami memiliki komputer yang CPU-nya memiliki 32 core dan akan digunakan untuk menjalankan program oleh beberapa pengguna yang berbeda. Apakah ada cara untuk membatasi jumlah core yang dapat digunakan setiap pengguna setiap saat sehingga satu pengguna tidak akan memonopoli semua daya CPU?
18
Jawaban:
Meskipun ini mungkin , itu rumit dan hampir pasti merupakan ide yang buruk. Jika hanya satu pengguna yang menggunakan mesin saat ini, membatasi mereka ke core N adalah pemborosan sumber daya. Pendekatan yang jauh lebih baik adalah menjalankan semuanya dengan
nice
:Ini adalah alat yang hebat yang menetapkan prioritas suatu proses. Jadi, jika hanya satu pengguna yang menjalankan sesuatu, mereka akan mendapatkan waktu CPU sebanyak yang mereka butuhkan, tetapi jika orang lain meluncurkan pekerjaan mereka sendiri (juga rasa), mereka akan baik dan berbagi satu sama lain. Dengan begitu, jika semua pengguna Anda menjalankan perintah
nice 10 command
, tidak ada yang akan memonopoli sumber daya (dan tidak ada yang akan membuat server bertekuk lutut).Perhatikan bahwa nilai bagus yang tinggi berarti prioritas rendah. Ini adalah ukuran seberapa baik kita seharusnya dan semakin bagus kita, semakin banyak kita berbagi.
Perhatikan juga bahwa ini tidak akan membantu mengatur alokasi memori, itu hanya memengaruhi penjadwalan CPU. Jadi, jika banyak pengguna meluncurkan beberapa proses intensif-memori, Anda masih akan mengalami masalah. Jika itu masalah, Anda harus melihat sistem antrian yang tepat seperti torsi .
sumber
nice
, dari apa yang Anda jelaskan, itu persis seperti yang Anda butuhkan.TL; DR : Dari penelitian singkat, tampaknya ada kemungkinan untuk membatasi perintah pada jumlah inti tertentu, namun dalam semua kasus Anda harus menggunakan perintah yang benar-benar memberlakukan pembatasan.
cgroups
Linux memiliki
cgroups
yang sering digunakan tepat untuk tujuan membatasi sumber daya yang tersedia untuk proses. Dari penelitian yang sangat singkat, Anda dapat menemukan contoh di Arch Wiki dengan konfigurasi Matlab (perangkat lunak ilmiah) yang diatur dalam/etc/cgconfig.conf
:Agar konfigurasi tersebut berlaku, Anda harus menjalankan proses melalui
cgexec
perintah, misalnya dari halaman wiki yang sama:tasket
Sebuah pertanyaan terkait tentang Tanyakan pada Ubuntu dan Bagaimana cara membatasi proses untuk satu inti CPU di Linux? [duplikat] di situs Unix & Linux menunjukkan contoh penggunaan
taskset
untuk membatasi CPU untuk proses. Pada pertanyaan pertama, itu dicapai melalui penguraian semua proses untuk pengguna tertentuDalam pertanyaan lain, proses dimulai dengan
taskset
sendirinya:Kesimpulan
Meskipun dimungkinkan untuk membatasi proses, tampaknya tidak mudah untuk mencapai hal itu bagi pengguna tertentu. Contoh di posting Ask Ubuntu yang tertaut akan membutuhkan pemindaian yang konsisten untuk proses yang dimiliki oleh setiap pengguna dan digunakan
taskset
pada setiap yang baru. Pendekatan yang jauh lebih masuk akal adalah dengan menjalankan aplikasi intensif CPU secara selektif, baik melaluicgexec
atautaskset
; tidak masuk akal untuk membatasi semua proses pada jumlah CPUS tertentu, terutama bagi mereka yang benar-benar memanfaatkan paralelisme dan konkurensi untuk menjalankan tugas mereka lebih cepat - membatasi mereka ke jumlah CPU tertentu dapat memiliki efek memperlambat pemrosesan. Selain itu, seperti jawaban terdon yang disebutkan itu adalah pemborosan sumber dayaMenjalankan aplikasi tertentu melalui
taskset
ataucgexec
membutuhkan komunikasi dengan pengguna Anda untuk memberi tahu mereka aplikasi apa yang dapat mereka jalankan, atau membuat skrip wrapper yang akan meluncurkan aplikasi tertentu melaluitasksel
ataucgexec
.Selain itu, pertimbangkan pengaturan jumlah proses yang dapat ditelurkan oleh pengguna atau grup alih-alih menetapkan batas jumlah CPU. Ini dapat dicapai melalui
/etc/security/limits.conf
file .Lihat juga
sumber
sched_setaffinity(2)
kata topeng afinitas terpelihara di seluruhexecve(2)
, dan bahwa seorang anak mewarisinyafork(2)
. Jadi jika Anda tasket shell untuk pengguna (atau shell grafis mereka untuk sesi X), semua yang mereka mulai dari shell itu akan, secara default, menggunakan topeng afinitas yang sama.