เรามีคอมพิวเตอร์ที่มี CPU มี 32 คอร์และมันจะถูกใช้สำหรับการรันโปรแกรมโดยผู้ใช้ที่ต่างกัน มีวิธีใดที่จะ จำกัด จำนวนคอร์ที่ผู้ใช้แต่ละคนสามารถใช้ได้ตลอดเวลาเพื่อให้ผู้ใช้รายหนึ่งไม่ผูกขาดอำนาจ CPU ทั้งหมดหรือไม่
เรามีคอมพิวเตอร์ที่มี CPU มี 32 คอร์และมันจะถูกใช้สำหรับการรันโปรแกรมโดยผู้ใช้ที่ต่างกัน มีวิธีใดที่จะ จำกัด จำนวนคอร์ที่ผู้ใช้แต่ละคนสามารถใช้ได้ตลอดเวลาเพื่อให้ผู้ใช้รายหนึ่งไม่ผูกขาดอำนาจ CPU ทั้งหมดหรือไม่
คำตอบ:
ขณะนี้เป็นไปได้มีความซับซ้อนและเกือบจะเป็นความคิดที่ดีอย่างแน่นอน หากมีผู้ใช้เพียงรายเดียวเท่านั้นที่ใช้เครื่องในตอนนี้การ จำกัด ให้ผู้ใช้ไม่ต้องเสียค่าใช้จ่าย แนวทางที่ดีกว่าคือการใช้ทุกอย่างด้วยnice
:
NAME
nice - run a program with modified scheduling priority
SYNOPSIS
nice [OPTION] [COMMAND [ARG]...]
DESCRIPTION
Run COMMAND with an adjusted niceness, which affects process scheduling. With
no COMMAND, print the current niceness. Niceness values range from -20 (most
favorable to the process) to 19 (least favorable to the process).
นี่เป็นเครื่องมือที่ยอดเยี่ยมที่กำหนดลำดับความสำคัญของกระบวนการ ดังนั้นหากมีผู้ใช้เพียงคนเดียวที่กำลังใช้งานบางสิ่งพวกเขาจะได้รับเวลา CPU มากที่สุดเท่าที่พวกเขาต้องการ แต่ถ้ามีคนอื่นเปิดงานของตัวเอง ด้วยวิธีนี้หากผู้ใช้ของคุณเปิดใช้งานคำสั่งด้วยnice 10 command
จะไม่มีใครเป็นทรัพยากร hogging (และไม่มีใครจะนำเซิร์ฟเวอร์ไปที่หัวเข่า)
โปรดทราบว่าค่า nice ที่สูงหมายถึงลำดับความสำคัญต่ำ นี่เป็นตัวชี้วัดว่าเราควรจะดีเพียงใดและเราดีกว่ามากเพียงใด
นอกจากนี้โปรดทราบว่าการดำเนินการนี้จะไม่ช่วยในการจัดการการจัดสรรหน่วยความจำ แต่จะมีผลกับการตั้งเวลา CPU เท่านั้น ดังนั้นหากผู้ใช้หลายคนเปิดกระบวนการที่ใช้หน่วยความจำมากคุณจะยังคงมีปัญหา หากเป็นเรื่องที่คุณควรมีลักษณะเป็นระบบการเข้าคิวที่เหมาะสมเช่นแรงบิด
nice
จากสิ่งที่คุณอธิบายนั่นเป็นสิ่งที่คุณต้องการจริงๆ
TL : DR : จากการวิจัยสั้น ๆ ปรากฏว่ามีความเป็นไปได้ที่จะ จำกัด คำสั่งไปยังจำนวนคอร์เฉพาะอย่างไรก็ตามในทุกกรณีคุณต้องใช้คำสั่งที่บังคับใช้ข้อ จำกัด จริง ๆ
ลีนุกซ์มีcgroups
การใช้บ่อยครั้งอย่างแม่นยำเพื่อจุดประสงค์ในการ จำกัด ทรัพยากรที่มีอยู่สำหรับกระบวนการ. จากการวิจัยสั้น ๆ คุณสามารถค้นหาตัวอย่างในการกำหนดค่าArch Wikiด้วย Matlab (ซอฟต์แวร์ทางวิทยาศาสตร์) ใน/etc/cgconfig.conf
:
group matlab {
perm {
admin {
uid = username;
}
task {
uid = username;
}
}
cpuset {
cpuset.mems="0";
cpuset.cpus="0-5";
}
memory {
memory.limit_in_bytes = 5000000000;
}
}
เพื่อให้การกำหนดค่าดังกล่าวมีผลคุณจะต้องเรียกใช้กระบวนการผ่านcgexec
คำสั่งเช่นจากหน้าวิกิเดียวกัน:
$ cgexec -g memory,cpuset:matlab /opt/MATLAB/2012b/bin/matlab -desktop
คำถามที่เกี่ยวข้องใน Ask Ubuntu และวิธีการ จำกัด กระบวนการกับแกน CPU หนึ่งในลินุกซ์? [ซ้ำ]บนไซต์ Unix & Linux แสดงตัวอย่างของการใช้taskset
เพื่อ จำกัด CPU สำหรับกระบวนการ ในคำถามแรกมันทำได้โดยการแยกกระบวนการทั้งหมดสำหรับผู้ใช้เฉพาะ
$ ps aux | awk '/^housezet/{print $2}' | xargs -l taskset -p 0x00000001
ในคำถามอื่น ๆ กระบวนการเริ่มต้นด้วยtaskset
ตัวเอง:
$ taskset -c 0 mycommand --option # start a command with the given affinity
แม้ว่าจะเป็นไปได้อย่างแน่นอนที่จะ จำกัด กระบวนการ แต่ดูเหมือนว่าไม่ใช่เรื่องง่ายที่จะบรรลุเป้าหมายดังกล่าวสำหรับผู้ใช้บางราย ตัวอย่างในโพสต์ถาม Ubuntu เชื่อมโยงจะต้องสแกนที่สอดคล้องกันสำหรับกระบวนการที่เป็นของผู้ใช้แต่ละคนและใช้taskset
ในแต่ละกระบวนการใหม่ แนวทางที่เหมาะสมกว่านั้นคือการเลือกใช้แอพพลิเคชั่นที่ใช้งาน CPU อย่างมากไม่ว่าจะผ่านcgexec
หรือtaskset
; นอกจากนี้ยังไม่มีเหตุผลที่จะ จำกัด กระบวนการทั้งหมดให้อยู่ในจำนวนที่เฉพาะเจาะจงของ CPUS โดยเฉพาะอย่างยิ่งสำหรับผู้ที่ใช้ประโยชน์จากความขนานและการทำงานพร้อมกันในการดำเนินงานของพวกเขาได้เร็วขึ้น นอกจากนี้คำตอบของ terdonระบุว่าเป็นการสิ้นเปลืองทรัพยากร
การใช้งานผ่านทางเลือกtaskset
หรือcgexec
ต้องมีการติดต่อสื่อสารกับผู้ใช้ของคุณเพื่อให้พวกเขารู้ว่าสิ่งที่ใช้งานพวกเขาสามารถเรียกใช้หรือการสร้างเสื้อคลุมสคริปต์ซึ่งจะเปิดตัวแอพลิเคชันผ่านหรือtasksel
cgexec
นอกจากนี้ให้พิจารณาการตั้งค่าจำนวนกระบวนการที่ผู้ใช้หรือกลุ่มสามารถวางไข่แทนที่จะตั้งค่า จำกัด จำนวนของ CPU นี้สามารถทำได้ผ่านทางไฟล์/etc/security/limits.conf
sched_setaffinity(2)
กล่าวว่าหน้ากากเป็นพี่น้องกันจะถูกรักษาไว้ข้ามexecve(2)
, และfork(2)
ว่าเด็กสืบทอดบน ดังนั้นหากคุณมอบหมายให้เชลล์สำหรับผู้ใช้ (หรือเชลล์กราฟิกของพวกเขาสำหรับเซสชัน X) ทุกอย่างที่พวกเขาเริ่มต้นจากเชลล์นั้นจะเป็นค่าเริ่มต้นให้ใช้มาสก์ที่เกี่ยวข้องกัน