實時內核中,使用chrt設置進程和線程的實時調度屬性

安裝了帶實時補丁的linux內核後,就可以讓指定的進程或者線程擁有實時優先級。有一些系統調用可以在代碼中來精細控制線程和進程的優先級,如果不方便修改代碼,則可以通過chrt命令來達到這個目的。

關於實時優先級和實時調度算法,可以參考linux文檔:http://man7.org/linux/man-pages/man7/sched.7.html。簡而言之,linux中有五種調度策略:

非實時調度:SCHED_OTHER, SCHED_IDLE, SCHED_BATCH

實時調度:SCHED_FIFO, SCHED_RR

 

chrt這個命令只有在打了實時補丁的內核中可以使用,在非實時內核中運行會報類似no permission的錯。

 

1、查看進程的優先級和調度策略(應該顯示的是主線程的優先級和調度策略):

chrt -p [pid]

(這裏的非實時進程優先級爲0,實時進程優先級1~99,數值越大優先級越高)

 

2、查看進程的所有線程的優先級和調度策略:

chrt -a -p [pid]

 

3、查看每種調度策略對應的優先級範圍:

chrt -m

 

4、設置進程的調度策略(可以看到只有主線程變成了實時調度):

chrt -f -p [prio] [pid] // SCHED_FIFO

chrt -r -p [prio] [pid] // SCHED_RR

 

5、如果想把進程的所有線程都變成實時調度(https://stackoverflow.com/questions/13827791/raising-priority-sched-policy-of-all-thread-of-a-process-linux-chrt,該鏈接指出這樣做不會改變chrt之後生成的線程的優先級):

chrt -r -p -a [prio] [pid]

 

6、查看某個進程所有線程的優先級、nice值、調度策略:

ps -Lo pid,tid,pri,ni,policy [pid]

(這裏的優先級和chrt看到的優先級不一樣,這裏數值越大優先級越低)

 

7、直接指定優先級和調度策略來啓動一個進程(可以看到所有線程都變成了RR):

chrt --rr <priority between 1-99> <command> //SCHED_RR

 

其他參考:

https://askubuntu.com/questions/51283/how-to-run-a-program-with-sched-rr-policy-from-command-line

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章