คุณค่าความดีของ (-) หมายถึงอะไร


19

ตามหน้า man และ wikipedia; niceช่วงจาก -20 ถึง 20

แต่เมื่อฉันเรียกใช้คำสั่งต่อไปนี้ฉันพบว่าบางกระบวนการมีค่าที่ไม่ใช่ตัวเลขเช่น (-) ดูคอลัมน์ที่หกจากด้านซ้ายด้วยชื่อ 'NI'

ความอ่อนโยนของ (-) บ่งบอกอะไร?

 ps axl 
 F   UID   PID  PPID PRI  NI    VSZ   RSS WCHAN  STAT TTY        TIME COMMAND
4     0     1     0  20   0  19356  1548 poll_s Ss   ?          0:00 /sbin/init
1     0     2     0  20   0      0     0 kthrea S    ?          0:00 [kthreadd]
1     0     3     2 -100  -      0     0 migrat S    ?          0:03 [migration/0]
1     0     4     2  20   0      0     0 ksofti S    ?          0:51 [ksoftirqd/0]
1     0     5     2 -100  -      0     0 cpu_st S    ?          0:00 [migration/0]
5     0     6     2 -100  -      0     0 watchd S    ?          0:09 [watchdog/0]
1     0     7     2 -100  -      0     0 migrat S    ?          0:08 [migration/1]
1     0     8     2 -100  -      0     0 cpu_st S    ?          0:00 [migration/1]
1     0     9     2  20   0      0     0 ksofti S    ?          1:03 [ksoftirqd/1]
5     0    10     2 -100  -      0     0 watchd S    ?          0:09 [watchdog/1]
1     0    11     2 -100  -      0     0 migrat S    ?          0:05 [migration/2]

ฉันได้ตรวจสอบ 3 เซิร์ฟเวอร์ที่ทำงาน: Ubuntu 12.04 และ CentOs 6.5 และ Mac OsX 10.9 เฉพาะเครื่อง Ubuntu และ CentO เท่านั้นที่มีค่าความคมชัดไม่ใช่ตัวเลข


FYI: กระบวนการทั้งหมดที่มีชื่ออยู่ในความ[brackets]เป็นจริงkthreads (เคอร์เนลเธรด)
Jonathon Reinhart

คำตอบ:


18

ความอ่อนโยนของ (-) บ่งบอกอะไร?

สังเกตเห็นว่ามีคะแนนPRIเท่ากับ -100; สิ่งนี้บ่งชี้ว่ากระบวนการถูกกำหนดเวลาเป็นกระบวนการเรียลไทม์ กระบวนการเรียลไทม์ไม่ได้ใช้คะแนนดีและมักจะมีลำดับความสำคัญสูงกว่าปกติ แต่ก็ยังคงแตกต่างกันไปตามความเคารพซึ่งกันและกัน

คุณสามารถดูรายละเอียดต่อกระบวนการด้วยchrtคำสั่ง (เช่นchrt -p 3) หนึ่งใน -100 รายการของคุณมีแนวโน้มที่จะรายงาน "ลำดับความสำคัญของการตั้งเวลาปัจจุบัน" 99 - ซึ่งแตกต่างจากniceที่นี่ค่าสูงมีความสำคัญสูงกว่าซึ่งอาจเป็นที่ที่ด้านบนสร้าง-100หมายเลขจาก กระบวนการที่ไม่ใช่เรียลไทม์จะแสดงเป็น "ลำดับความสำคัญการตั้งเวลาปัจจุบัน" ของ 0 ในการchrtไม่คำนึงถึงค่าที่ดีและอยู่ภายใต้ลินุกซ์ "นโยบายการตั้งเวลาปัจจุบัน" SCHED_OTHERของ

เฉพาะเครื่อง Ubuntu และ CentO เท่านั้นที่มีค่าความคมชัดไม่ใช่ตัวเลข

บางรุ่นtopดูเหมือนจะรายงานกระบวนการเรียลไทม์ที่มีrtอยู่ภายใต้ปรีดีแล้ว0ภายใต้NI


คำตอบที่ยอดเยี่ยม ผมรู้ว่ามันมีอะไรบางอย่างจะทำอย่างไรกับ-100แต่ไม่สามารถคิดออก :)
ราเมษ

6

@ คำตอบของ Goldlilock สั่งให้ฉันทำวิจัยในเส้นทางที่ถูกต้อง นี่คือรายละเอียดการวิจัยของฉัน

อัลกอริทึมการจัดตารางเวลาสำหรับกระบวนการ

Linux รองรับนโยบายกำหนดเวลา 3 รายการ SCHED_FIFO, และSCHED_RR เป็นนโยบายตัวกำหนดตารางเวลาการแชร์เวลาสากลที่เป็นค่าเริ่มต้นที่ใช้โดยกระบวนการส่วนใหญ่ และมีไว้สำหรับแอปพลิเคชันที่มีความสำคัญต่อเวลาซึ่งต้องการการควบคุมที่แม่นยำในการเลือกกระบวนการที่สามารถรันได้สำหรับการดำเนินการSCHED_OTHERSCHED_OTHERSCHED_FIFOSCHED_RR

มีการจัดลำดับความสำคัญ

เพื่อเลือกกระบวนการที่จะเรียกใช้ตัวกำหนดตารางเวลา Linux ต้องพิจารณาลำดับความสำคัญของแต่ละกระบวนการ จริงๆแล้วมีความสำคัญสองประเภท

คงความสำคัญคุ้มค่าได้รับมอบหมายให้แต่ละขั้นตอนและการกำหนดเวลาขึ้นอยู่กับความสำคัญนี้คง กระบวนการที่กำหนดเวลาด้วยSCHED_OTHERมีลำดับความสำคัญคงที่ 0; กระบวนการที่กำหนดไว้ภายใต้SCHED_FIFOหรือSCHED_RRสามารถมีลำดับความสำคัญคงที่ในช่วง1ถึง99(99 เป็นค่าสูงสุด)

sys_sched_get_priority_max( )ผลตอบแทนประจำลำดับความสำคัญที่คงที่ของกระบวนการก็จะส่งกลับ0สำหรับกระบวนการที่ไม่ใช่เรียลไทม์

ลำดับความสำคัญแบบไดนามิกใช้สำหรับแอปพลิเคชันที่ไม่ใช่เวลาจริง

กระบวนการเรียลไทม์ทั้งหมดมีความสำคัญสูงกว่ากระบวนการปกติ Linux ใช้การจัดลำดับความสำคัญตามเวลาจริงตาม POSIX กราฟด้านล่างอาจให้ภาพรวมว่ากระบวนการถูกกำหนดเวลาด้วยลำดับความสำคัญของพวกเขาอย่างไร

HIGH PRIORITY – - – - – > – - – - – > – - – - – > – - – - – > – - – – LEAST PRIORITY
……..real time priority (static priority)…….| …. nice value (dynamic priority) …..
99 ……………………….. 50 ……………………… 1 | -20 …….. -10 …….. 0 …….. 10 ……. 19

ตอนนี้เราสามารถออกคำสั่งด้านล่างเพื่อตรวจสอบลำดับความสำคัญตามเวลาจริงของกระบวนการ ที่นี่ฉันกำลังใช้จ้องจับผิดเพราะมีค่าที่ดีแสดงว่า -

ps -e -o class,rtprio,pri,nice,cmd | grep watchdog

นี่คือเอาต์พุตของคำสั่งด้านบน ในขณะที่เราสามารถเห็นลำดับความสำคัญเรียลไทม์คือ 99 ซึ่งเป็นลำดับความสำคัญสูงสุดที่เป็นไปได้

FF      99 139   - [watchdog/0]
FF      99 139   - [watchdog/1]
TS       -  21   0 grep watchdog

ดังนั้นตามความเข้าใจของฉันลำดับความสำคัญแบบเรียลไทม์สามารถใช้ค่าสูงสุด 99 และดังนั้นจึงไม่สามารถมีค่าที่ดีกว่า นั่นคือเหตุผลที่เราได้รับผลลัพธ์ที่ดีเช่น - สำหรับสุนัขเฝ้าบ้านและกระบวนการระบบอื่น ๆ

อ้างอิง

http://oreilly.com/catalog/linuxkernel/chapter/ch10.html http://atipaday.wordpress.com/2008/08/19/atad-21-linux-process-priority-range/range

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