廣州總校區(qū)切換校區(qū)
復(fù)制成功
微信號(hào):togogoi
添加微信好友, 詳細(xì)了解課程
已復(fù)制成功,如果自動(dòng)跳轉(zhuǎn)微信失敗,請(qǐng)前往微信添加好友
打開微信
圖片

行業(yè)新聞

Red Hat Enterprise Linux 8的9種實(shí)時(shí)進(jìn)程調(diào)度策略

發(fā)布時(shí)間: 2019-12-22

  Red Hat Enterprise Linux 8的9種實(shí)時(shí)進(jìn)程調(diào)度策略

  Red Hat Enterprise Linux 8使用是Linux內(nèi)核版本是Kernel 4.18,其系統(tǒng)進(jìn)程的實(shí)時(shí)調(diào)度策略有9種。在RHEL 8中,查看ps的幫助手冊(cè)即可查到:
  # man ps |grep -A 10 policy
  -    not reported
  TS   SCHED_OTHER
  FF   SCHED_FIFO
  RR   SCHED_RR
  B    SCHED_BATCH
  ISO  SCHED_ISO
  IDL  SCHED_IDLE
  DLN  SCHED_DEADLINE
  ?    unknown value
  實(shí)際上只有7種,not reported、unknown value可能只是開放的策略,允許用戶自定義。查看進(jìn)程時(shí),可能專門指定查看進(jìn)程的調(diào)度策略,如下:
  # ps axo pid,comm,nice,cls --sort=-nice
  Linux的進(jìn)程調(diào)度意味著,它是CPU的重要助手,總是要為CPU挑選出下一個(gè)要執(zhí)行的進(jìn)程。在Linux中,進(jìn)程(process)、線程(thread)和任務(wù)(task)都差不多。根據(jù)POSIX的定義,進(jìn)程相當(dāng)于執(zhí)行一個(gè)程序,特指執(zhí)行程序時(shí)需要的名字空間、內(nèi)存等資源;而線程則是指執(zhí)行一行代碼時(shí)需要的系統(tǒng)資源。即它們關(guān)注的對(duì)象不同。大家都應(yīng)該知道,一個(gè)程序有很多行代碼,幾千行,幾萬行也不稀奇。
  RHEL 8挑選進(jìn)程的標(biāo)準(zhǔn)有兩個(gè)(注2):
  一、調(diào)度策略(scheduling policy)
  二、靜態(tài)調(diào)度優(yōu)先度(static scheduling priority)
  既然有靜態(tài)調(diào)度優(yōu)先度,就有動(dòng)態(tài)調(diào)度優(yōu)先度,也就是NICE值,其取值 范圍為-20~19,共40個(gè)檔次。數(shù)值越大,越往后排??磥?,調(diào)度政策挺重要。那么,各種調(diào)度策略是什么意思呢?
  TS - SCHED_OTHER
  優(yōu)先度為0的進(jìn)程中,按照NICE值排隊(duì),等候被CPU執(zhí)行。應(yīng)用SCHED_OTHER或TS策略的進(jìn)程在執(zhí)行過一次之后,其NICE值就會(huì)增加一次。在這種策略下,進(jìn)程們拼的不是靜態(tài)優(yōu)先度,拼的是動(dòng)態(tài)優(yōu)先度,即NICE值。這是Linux的缺省調(diào)度策略。
  FF - SCHED_FIFO
  正如其名所示,F(xiàn)IFO,F(xiàn)irst In, First Out,先進(jìn)先出。它比較霸道,執(zhí)行完才肯走。在這種策略的指導(dǎo)下,靜態(tài)優(yōu)先度為1-99之間的進(jìn)程會(huì)插隊(duì)到執(zhí)行SCHED_OTHER、SCHED_IDEL、SCHED_BATCH策略的進(jìn)程前面,直到它執(zhí)行完畢或者被更高優(yōu)先組的進(jìn)程插隊(duì)。這種策略沒有時(shí)間片的限制。執(zhí)行這種策略的進(jìn)程是進(jìn)程中的土匪。
  RR - SCHED_RR
  輪巡,在分配到的、可以使用CPU的時(shí)間片里,相同優(yōu)先度(1-99)的進(jìn)程們,你一筷子,我一筷子,輪流吃肉。SCHED_RR,是SCHED_FIFO的改進(jìn)形式。這種機(jī)制,可以視為進(jìn)程土匪中的輪巡。畢竟,在這種策略下,大家還講點(diǎn)規(guī)矩,機(jī)會(huì)均等。你一筷子沒夾著肉,那就等下一輪吧。
  B - SCHED_BATCH
  跟SCHED_OTHER一樣,不使用靜態(tài)優(yōu)先度,使用動(dòng)態(tài)優(yōu)先度。不同的是,它要批量執(zhí)行進(jìn)程。所以,只適合非交互式的進(jìn)程。
  ISO - SCHED_ISO
  這種策略是想向進(jìn)程提供類似于SCHED_OTHER的運(yùn)行時(shí)間片分配機(jī)制。與后者不同的是,SCHED_ISO在較大限度地保證不會(huì)導(dǎo)致其它進(jìn)程“餓死”的情況下,盡可能地延長(zhǎng)進(jìn)程的執(zhí)行時(shí)間。適用于游戲、視頻和視頻捕獲場(chǎng)景下,較大限度地利用硬件資源。這個(gè)策略仍不完善(注8)。
  IDL - SCHED_IDLE
  跟SCHED_OTHER一樣,不使用靜態(tài)優(yōu)先度,而且也不大使用動(dòng)態(tài)優(yōu)先度。進(jìn)程的優(yōu)先度為19或20。執(zhí)行這種策略的進(jìn)程,是進(jìn)程中的謙謙君子。它們總是先人后己,與世無爭(zhēng)。
  DLN - SCHED_DEADLINE
  這是Linux Kernel 3.14之后新增加的調(diào)度機(jī)制。同時(shí)也被認(rèn)為是最好的調(diào)度方案(注3)。誰的死期先到,誰就先上。這是一種急他人之所急的好作風(fēng)。不過,這個(gè)“死期”是Deadline,是執(zhí)行任務(wù)的“最后期限”。所以,這是進(jìn)程中的現(xiàn)實(shí)主義者的約定。
  RHEL 8的產(chǎn)品文檔中,找不到關(guān)于SCHED_ISO的介紹,大概也是因?yàn)檫@種調(diào)度技術(shù)尚未成熟有關(guān)吧。
  參考資料:
  1、https://access.redhat.com/articles/3078
  2、http://man7.org/linux/man-pages/man7/sched.7.html
  3、https://stackoverflow.com/questions/9392415/linux-sched-other-sched-fifo-and-sched-rr-differences
  4、https://lwn.net/Articles/723248/
  5、https://www.kernel.org/doc/html/v5.4/scheduler/sched-rt-group.html
  6、https://www.cs.montana.edu/~chandrima.sarkar/AdvancedOS/CSCI560_Proj_main/
  7、https://linux.die.net/man/2/sched_getscheduler
  8、https://www.mankier.com/8/schedtool

上一篇: RHEL 8 YUM倉(cāng)庫的應(yīng)用序列AppStream

下一篇: AI培訓(xùn)_AI測(cè)試題,你AI來挑戰(zhàn)么?

<
在線咨詢 ×

您好,請(qǐng)問有什么可以幫您?我們將竭誠(chéng)提供最優(yōu)質(zhì)服務(wù)!