วิธีการรันโปรแกรมด้วยซีพียูแกนเดียว?


28

ฉันพยายามเรียกใช้สคริปต์จำนวนมากที่เกี่ยวข้องกับเซิร์ฟเวอร์เกมใน Terminator ปัญหาเดียวก็คือเมื่อฉันทำเช่นนี้ Terminator ตรวจจับแกน CPU ของฉันและพีซีล่าช้า มีวิธีใดบ้างในการเริ่มต้นใช้งาน แต่หลอกให้คิดว่าฉันมีซีพียู 1 คอร์?


2
สวัสดีดูเหมือนว่าคุณอาจกำลังทุกข์ทรมานจากปัญหา xy ที่นี่บางครั้งก็คุ้มค่าที่จะมองย้อนกลับไปที่สิ่งที่คุณต้องการที่จะประสบความสำเร็จและไม่ใช่วิธีแก้ปัญหาที่คุณพยายามทำตามที่ดูเหมือนว่าสิ่งที่คุณต้องการคือการเรียกใช้โปรแกรม พีซีไม่ใช่เพื่อรันบางสิ่งบนหนึ่งคอร์ ไม่น้อยเลยนี่เป็นคำถามที่ดีมาก +1
Vality

คำตอบ:


44

ไม่ใช่terminatorว่ากำลัง "กระจาย" กับ CPU ทั้งหมดของกระบวนการที่กำหนด Linux เอง (เคอร์เนล) กำลังทำสิ่งนี้ ภารกิจ (กระบวนการ) ถูกกำหนดเวลาให้พร้อมใช้งานเพื่อให้ทำงานบน CPU ทั้งหมดตามค่าเริ่มต้น หากใช้เธรดจะสามารถใช้ CPU มากกว่าหนึ่งตัวในแต่ละครั้ง

เพื่อ จำกัด การกระบวนการที่จะ CPU tasksetที่เฉพาะเจาะจงที่คุณใช้คำสั่ง

taskset --cpu-list 1,2 my_command 

คำสั่งนี้บังคับให้ my_command รันบน CPUs # 1 หรือ # 2

หากต้องการเรียนรู้เพิ่มเติมพิมพ์man tasksetหรือค้นหา "linux CPU affinity" (กดแรกที่นี่ )


2
โดยวิธีการที่คุณสามารถลองเพียง renice กระบวนการ "ไม่ดี" ลดลำดับความสำคัญของพวกเขา
Matteo Italia

@MatteoItalia ฉันพบว่า Ubuntu 13.10 และ 14.04 ไม่สนใจระดับดีโดยค่าเริ่มต้น คุณจะต้องเพิ่มkernel.sched_autogroup_enabled = 0เพื่อ/etc/sysctl.confที่จะทำให้การทำงานของมัน อย่างไรก็ตามฉันยังพบว่า 13.10 เคอร์เนลมักจะตื่นตระหนกในระหว่างการบูตหากปิดการใช้งานกลุ่มอัตโนมัติ
kasperd

สิ่งที่เกี่ยวกับกระบวนการลูกของกระบวนการผู้ปกครอง? พวกเขาสืบทอดความเกี่ยวข้องหลัก / cpu ของกระบวนการพาเรนต์หรือไม่
yildizabdullah

5

แม้ว่าคำตอบอื่นให้คำตอบตามตัวอักษรไปแล้ว แต่ฉันก็อยากจะสำรวจความเป็นไปได้ว่านี่ไม่ใช่วิธีที่ถูกต้อง แต่คุณควรเรียกใช้สคริปต์ที่คุณไม่ต้องการทำให้คอมพิวเตอร์ช้าลง (เช่นสคริปต์ที่ไม่โต้ตอบ) โดยใช้niceคำสั่ง

ในการทำเช่นนี้เพียงนำหน้าคำสั่งที่คุณต้องการเรียกใช้ด้วย nice ตัวอย่างเช่น: nice command_to_run สิ่งนี้จะทำให้โปรแกรมถูกยกเลิกการจัดลำดับความสำคัญด้านล่างงานอื่น ๆ และจะไม่ทำให้เครื่องของคุณช้าลง ฉันมักจะใช้เทคนิคนี้เมื่อทำการคอมไพล์แบบยาวซึ่งจะทำให้พีซีของฉันช้าลงในการรวบรวมข้อมูลนี่เป็นข้อดีของการอนุญาตให้โปรแกรมใช้แกนประมวลผลทั้งหมดเมื่อเครื่องไม่ว่าง แต่จะหยุดใช้อย่างรวดเร็วเมื่อคุณเรียกใช้บางสิ่ง อื่น.


ถ้าฉันใช้คำสั่งเช่น "nice open terminator" จะยุติการทำงานโดยใช้คอร์ CPU ทั้งหมดโดยไม่คำนึงถึง?
user245115

โอ้แล้วถ้าฉันขยับเม้าส์แล้วไม่มีอะไรเปิดมันจะใช้ซีพียูทั้งหมดหรือเปล่า? และใช้เวลานานแค่ไหนหลังจากที่ฉันหยุดเลื่อนเมาส์เพื่อใช้ประโยชน์จาก CPU ทั้งหมด และฉันสามารถใช้กับ tasket ได้หรือไม่? (ใช่ฉันเป็นโนเบลตัวจริงกับ Linux)
user245115

@ user245115 หากคุณใช้ยูทิลิตีที่ดีอาจเป็นไปได้ว่าเทอร์มินัลจะใช้ CPU หลายคอร์ แต่จะหยุดใช้คอร์เหล่านั้นทันทีหากโปรแกรมอื่น (ไม่ทำงานด้วย nice) ต้องการใช้มันดังนั้นคุณจะไม่ประสบกับการชะลอตัว ใช้พวกเขาหากพวกเขาเป็นอิสระอย่างสมบูรณ์และไม่ได้ใช้ สิ่งนี้ไม่ควรได้รับผลกระทบจากการใช้เมาส์หรือการโต้ตอบอื่น ๆ กับโปรแกรม
Vality

@ user245115 มันควรจะเป็นไปได้ที่จะใช้กับ tasket เพียงแค่เขียนtaskset nice open terminatorให้ใช้ทั้งสอง อย่างไรก็ตามนั่นจะเกินความจำเป็นเนื่องจากคุณจะใช้สองโปรแกรมที่แตกต่างกันเพื่อให้บรรลุผลของการลดการใช้ทรัพยากรของโปรแกรม
Vality

@ user245115 ช่วงเวลาที่คุณดำเนินการใด ๆ (เช่นการเลื่อนเมาส์) เทอร์มินัลจะได้รับเวลา CPU น้อยลงนี่เป็นทันทีอย่างมีประสิทธิภาพและทันทีที่คุณหยุดกิจกรรมอื่น ๆ จะใช้อีกครั้ง (เช่นทันทีที่มีประสิทธิภาพ)
Vality
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.