เรียกใช้กระบวนการ linux ที่มีความสำคัญต่ำมากใช่ไหม


12

ฉันมีกระบวนการปกติที่ไม่สำคัญ แต่จะใช้พลังงาน CPU มากและฉันมีกระบวนการอื่นที่สำคัญจริง ๆ แต่ใช้เวลาส่วนใหญ่ว่างเปล่า แต่เมื่อได้งานก็ต้องใช้พลังงานในการคำนวณสูง

ฉันพยายามเรียกใช้ด้วยnice -20 ./low_priority_processและnice --20 ./high_priority_processยังคงมีลำดับความสำคัญต่ำกว่าใช้ CPU จำนวนมากเมื่อมีความต้องการกระบวนการที่มีลำดับความสำคัญสูงฉันจะเรียกใช้กระบวนการที่จะให้ผลจริงๆหรือแม้กระทั่งหยุดทำงานอัตโนมัติเมื่อกระบวนการอื่นใช้พลังงาน CPU


คุณจะกำหนดได้อย่างไรว่ากระบวนการที่มีลำดับความสำคัญสูงนั้นเป็นที่ต้องการอย่างแท้จริง
muru

มันจะวางไข่เธรดจำนวนมากหรือกระบวนการกินซีพียูมากกว่า 50% ของความจุของซีพียู
uray

ใช้RRการกำหนดเวลาสำหรับกระบวนการที่มีลำดับความสำคัญสูง
Ramesh

@Ramesh สิ่งที่เป็นไปได้ที่จะสร้างความแตกต่างคืออะไร?
Ken Sharp

คำตอบ:


10

ดูกลุ่มcgมันควรให้สิ่งที่คุณต้องการ - การจองซีพียู (และอื่น ๆ ) ผมขอแนะนำให้อ่านการควบคุมการจัดลำดับความสำคัญของการใช้งานโดยใช้ cgroups

ที่กล่าวว่าให้นำกระบวนการที่ไม่ได้ใช้งานมารวมกันเป็นกลุ่มโดยจัดสรรซีพียู 95% และแอปพลิเคชั่นอื่น ๆ ของคุณลงในอีกชุดหนึ่งด้วยการจัดสรร 5% - คุณจะได้รับพลังงานเกือบทั้งหมดสำหรับงานของคุณเมื่อจำเป็น พลังหิวกระบวนการจะได้รับ 5% มากที่สุดในเวลานั้น เมื่อไฟกระชากการคำนวณหายไปประสิทธิภาพของ CPU ทั้งหมดจะถูกโยนลงในกระบวนการที่เหลืออยู่ ในฐานะที่เป็นประโยชน์ถ้าคุณสร้าง cgroup พิเศษ (กับความต้องการด้านประสิทธิภาพน้อยที่สุด) สำหรับกระบวนการชอบsshdคุณจะสามารถเข้าสู่ระบบในเรื่องสิ่งที่จะพยายามที่จะรับ CPU ทั้งหมดที่มันไม่สามารถ - บางเวลา CPU sshdจะถูกสงวนไว้สำหรับ


1
มีคำสั่งที่ชอบcpulimitหรือniceแก้ไข cgroup ของกระบวนการหรือไม่? เพราะผมถ้า cgroup เป็นสาย API ผมอยู่ในตำแหน่งที่ไม่สามารถคอมไพล์ใด ๆ ของแอปเหล่านั้นไปใช้ cgroup
Uray

ไม่คุณเพียงแค่ติดลำดับชั้นของ cgroup ไว้ที่ใดก็ได้สร้างไดเรกทอรีต่อกลุ่มและเขียน PID ของกระบวนการลงในไฟล์บางไฟล์ ทั้งหมดนี้จะต้องทำในฐานะที่เป็นราก (หรือแม่นยำยิ่งขึ้นด้วยสิทธิ์ที่เหมาะสม) ระบบ init บางระบบ (กล่าวคือsystemdอย่างน้อยในบางกรณี) "ขโมย" ส่วนต่อประสาน cgroups จากผู้ใช้ที่ต้องใช้ส่วนต่อประสานระบบเริ่มต้น (โดยปกติจะเป็นคำสั่งพิเศษ) อ่านคำตอบที่เชื่อมโยงและบทความวิกิพีเดีย จริงๆ. :)
เตอร์

โอ้และยังมีlibcgroupแพ็คเกจซึ่งมาพร้อมกับยูทิลิตี้สำหรับทำงานกับ cgroups รวมถึง daemon ( cgrulesengd) ที่สามารถเรียงลำดับกระบวนการเป็นกลุ่มได้ขึ้นอยู่กับเงื่อนไขบางประการ
เตอร์

7

หากลำดับความสำคัญของกระบวนการ (ค่าที่ดี) ต่ำแล้วมันจะไม่ถูกขัดจังหวะกระบวนการลำดับความสำคัญที่สูงขึ้น เหตุผลที่คุณได้เห็นขั้นตอนการลำดับความสำคัญต่ำยังคงบริโภคเป็นจำนวนมากของ CPU เมื่อกระบวนการลำดับความสำคัญสูงกำลังทำงานเป็นเพราะกระบวนการลำดับความสำคัญสูงไม่ว่ายุ่ง อาจรอ IO ใช้chrt -p -i 0 $PIDเพื่อเรียกใช้กระบวนการที่มีลำดับความสำคัญต่ำกว่าnice 19 -p $PID(สมมติว่าเรากำลังพูดถึง Linux ที่นี่)

chrt -p -i 0 $PID วางกระบวนการลงในตารางเวลาที่ไม่ได้ใช้งาน

http://linux.die.net/man/1/chrt


2
chrt -p -i 0 $ PID
Robert Foss

chrt ยังไม่เพียงพอ สิ่งที่ฉันพยายามทำคือดูวิดีโอในขณะที่เข้ารหัสวิดีโออื่น ๆ ในพื้นหลัง การใช้ chrt ช่วยด้วยวิดีโอ youtube แต่ mkvs คุณภาพสูงยังคงข้าม สิ่งที่ฉันต้องการคือการเล่นวิดีโอของฉันตามปกติ แต่ใช้พลังงาน CPU เล็กน้อยที่เหลือสำหรับการเข้ารหัสใหม่เพราะฉันมีชุดงานจำนวนมากที่ต้องทำ
soger

0

ลองตัวอย่างนี้เพื่อเรียกใช้โปรเซสเป็นโปรเซสที่ต่ำ

หากคุณเป็นงานที่ดีtar xvf asets.zip

ใช้

nice tar xvf assets.zip

หลังจากนั้นออก

ด้านบนเพื่อตรวจสอบกระบวนการคลายซิปด้วย

ps aux | grep "tar"

ลองอะไรที่เฉพาะเจาะจงกับcpulimit

wget -O cpulimit.zip https://github.com/opsengine/cpulimit/archive/master.zip
unzip cpulimit.zip
cd cpulimit-master
make
sudo cp src/cpulimit /usr/bin

cpulimit -l 50 python 0 9999999999> / dev / null &


ใช่-20เป็น "ลำดับความสำคัญต่ำ" และ--20เป็น "ลำดับความสำคัญสูง" ดูที่เส้นประสองครั้งสำหรับniceคำสั่ง และใช่ฉันเข้าใจอย่างสมบูรณ์เกี่ยวกับคุณค่าที่ดี แต่คำถามของฉันคือจะมีวิธีที่จะบอกตารางเวลาอื่น ๆ นอกเหนือจากการใช้ค่าที่ดี
Uray

2
@ user77710 คุณแน่ใจหรือไม่? ทั้งUbuntu manpageหรือPOSIX manpageระบุรูปแบบนี้ การใช้งานทั้ง-n -20, -n 20ฯลฯ
Muru

ใช่สิ่งที่ไวยากรณ์ไม่สำคัญประเด็นของฉันคือการให้คุณค่าที่ดีของที่ต่ำมากและสูงมากสำหรับกระบวนการทั้งสองไม่ได้ให้ผลลัพธ์ของสิ่งที่ฉันต้องการ
uray

2
@ user77710 อะไร "ไวยากรณ์ไม่สำคัญ" หรือไม่ คุณจะมั่นใจได้อย่างไรว่าคุณได้ตั้งค่าความดีแล้ว?
muru

เพราะผมสามารถเห็นคุณค่าที่ดีในกระบวนการhtopหรือtopหรือpsหรืออะไรก็ตาม
Uray

-1

สำหรับอนาคตดาวรุ่งที่นี่เป็นตัวอย่างที่เต็มไปniceด้วยความเครียด

  1. เครื่องทดสอบมี 2 CPU
$ lscpu
Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
CPU(s):              2 
On-line CPU(s) list: 0,1
Thread(s) per core:  2
...
  1. ติดตั้งstress:apt-get install stress
  2. ทำให้ CPU 2 ตัวไม่ว่างด้วยการโทรที่มีลำดับความสำคัญต่ำเพื่อเน้น: nice -20 stress --cpu 2
  3. ตรวจสอบการใช้งาน CPU ด้วยtop:
                                                 v
                                                 v
                                                 v
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                   
15894 ubuntu    39  19    8240     96      0 R  99.7  0.0   0:06.43 stress                                                                                    
15895 ubuntu    39  19    8240     96      0 R  99.7  0.0   0:06.42 stress                                                                                    

นี่แสดงให้เห็นว่าทั้งสองซีพียูมีคุณสมบัติครบถ้วน

  1. เรียกใช้กระบวนการความเครียดของ cpu เดี่ยวที่มีลำดับความสำคัญสูง: nice --20 stress --cpu 1
  2. ตรวจสอบการใช้ cpu อีกครั้งด้วย top
                                                 v
                                                 v
                                                 v
                                                 v
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                   
15928 ubuntu    20   0    8240    100      0 R  99.7  0.0   0:24.02 stress                                                                                    
15894 ubuntu    39  19    8240     96      0 R  51.2  0.0   1:12.46 stress                                                                                    
15895 ubuntu    39  19    8240     96      0 R  48.8  0.0   1:12.35 stress                                                                                    

นี่แสดงให้เห็นว่ากระบวนการความเครียดแบบคอร์เดียวได้รับซีพียูแบบเต็มในขณะที่กระบวนการที่มีลำดับความสำคัญต่ำกว่าทั้งสองใช้ซีพียูที่เหลือ 1 ตัว

  1. ในทางกลับกันการฆ่าการstressเรียกทั้งหมดข้างต้นและเพียงแค่ทริกเกอร์ 3 กระบวนการเดียวstress --cpu 3จะให้ CPU 66% สำหรับแต่ละกระบวนการ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.