一、調(diào)度策略
調(diào)度進(jìn)程
單個(gè) CPU一次只能執(zhí)行一個(gè)進(jìn)程,雖然 Linux 系統(tǒng)通過(guò)使用多任務(wù)同時(shí)處理多個(gè)進(jìn)程,但當(dāng)多個(gè)進(jìn)程同時(shí)運(yùn)行在一個(gè)CPU 上時(shí),它通過(guò)交錯(cuò)執(zhí)行這些進(jìn)程。
內(nèi)核使用進(jìn)程調(diào)度器來(lái)決定在某一時(shí)間點(diǎn)上哪個(gè)進(jìn)程在運(yùn)行。調(diào)度器必須平衡幾個(gè)選項(xiàng):
快速?zèng)Q定下一個(gè)該運(yùn)行的進(jìn)程
進(jìn)程可以公平的活動(dòng) CPU 時(shí)間,但高優(yōu)先級(jí)的進(jìn)程會(huì)活動(dòng)更多的運(yùn)行時(shí)間并且可以搶占低優(yōu)先級(jí)的進(jìn)程。
響應(yīng)有力的交互式應(yīng)用程序
在各種工作負(fù)載下可預(yù)測(cè)和可擴(kuò)展
進(jìn)程優(yōu)先級(jí)
在 Linux 中,調(diào)度器根據(jù)分配給每個(gè)線程或進(jìn)程的調(diào)度策略和優(yōu)先級(jí)來(lái)控制執(zhí)行順序。
這些調(diào)度策略分為:實(shí)時(shí)策略和非實(shí)時(shí)策略。
調(diào)度策略
RHEL提供六種調(diào)度策略,分為實(shí)時(shí)調(diào)度策略和非實(shí)時(shí)調(diào)度策略。
1、實(shí)時(shí)
SCHED FIFO:不帶時(shí)間分片的先進(jìn)先出策略。擁有該策略的進(jìn)程會(huì)一直運(yùn)行,直到被I/O 阻塞或是更改優(yōu)先級(jí)的進(jìn)程搶占。
SCHED RR:該策略使用時(shí)間片循環(huán)調(diào)度算法,具體同樣優(yōu)先級(jí)的任務(wù)輪詢執(zhí)行,直到耗盡預(yù)定的時(shí)間片。
2、非實(shí)時(shí)
SCHED_NORMAL(OTHER):linux 系統(tǒng)中大多數(shù)進(jìn)程使用的默認(rèn)策略。
SCHED BATCH:適合批量處理的進(jìn)程。
SCHED IDLE:該策略有利于運(yùn)行低優(yōu)先級(jí)應(yīng)用程序,
CFS 調(diào)度
從 2.6.23 版本的內(nèi)核開(kāi)始,CFS 就成為默認(rèn)的調(diào)度程序。CFS 使用紅黑樹(shù)來(lái)管理可運(yùn)行的進(jìn)程。它是基于虛擬時(shí)間(virtualtime)。
擁有虛擬時(shí)間最長(zhǎng),等待時(shí)間最長(zhǎng)的進(jìn)程將獲得使用 CPU。該進(jìn)程在執(zhí)行期間,虛擬時(shí)間將開(kāi)始減少。
DEADLINE 調(diào)度
在 RHEL8 中,引入了一個(gè)新的調(diào)度策略 SCHED DEADLINE。該調(diào)度主要應(yīng)用在實(shí)時(shí)系統(tǒng)中,保證實(shí)時(shí)任務(wù)的有效調(diào)度。
Deadline 調(diào)度使用三個(gè)參數(shù):周期、期限和運(yùn)行時(shí)間(最壞情況的運(yùn)行時(shí)間)
周期:如果一個(gè)視頻處理任務(wù)必須每秒處理60幀,新的幀每隔 16ms(毫秒)會(huì)到來(lái),則周期為 16ms。
期限:指任務(wù)需要交付結(jié)果的最長(zhǎng)時(shí)間,必須在這個(gè)期限結(jié)束前完成任務(wù)。
運(yùn)行時(shí)間:表示處理一個(gè)任務(wù)的最長(zhǎng)時(shí)間。
注意:單位都為 ns。
上面的例子表示:該任務(wù)將在每 16.6ms內(nèi)確保得到 5ms的CPU 時(shí)間來(lái)運(yùn)行,并且5ms 的 CPU 運(yùn)行時(shí)間都可以在 10ms 期限內(nèi)保證可用。
使用命令行方式更改調(diào)度選項(xiàng)
管理員可以使用 chrt 命令查看某個(gè)進(jìn)程(-p)的策略和優(yōu)先級(jí)。同時(shí)當(dāng)使用 chrt 開(kāi)啟一個(gè)新程序時(shí),需要制定策略和優(yōu)先級(jí),如果未指定策略,默認(rèn)是 SCHED RR.
策略選項(xiàng):
-b 指定為 SCHED BATCH -f 指定為 SCHED FIFO -i 指定為 SCHED IDLE -o 指定為 SCHED NORMAL(OTHER) -r 指定為 SCHED RR -d 指定為 SCHED DEADLINE
例如為某個(gè)新進(jìn)程指定策略和優(yōu)先級(jí):
使用 systemd 的方式更改調(diào)度選項(xiàng)
在服務(wù)啟動(dòng)時(shí)指定調(diào)度策略和優(yōu)先級(jí),需要在[Service]段落中指定:
CPUSchedulingPolicy:設(shè)置服務(wù)的CPU 調(diào)度策略。other,batch,idle,fifo,rr。(當(dāng)前不支持 deadline 策略)
CPUSchedulingPriority:設(shè)置優(yōu)先級(jí),對(duì)于實(shí)時(shí)調(diào)度策略,范圍是1(最低)-99(最高)
完成后,需要重啟 systemctl daemon-reload,然后再重啟服務(wù)
二、CPU親和性
Pinning 進(jìn)程
默認(rèn)情況下,調(diào)度策略可以將進(jìn)程放置在任何一個(gè)CPU上去執(zhí)行,但為了增加效率,可以將某個(gè)進(jìn)程與哪些 CPU 進(jìn)行綁定,提供了緩存命中率,提供了整體性能。
基于 systemd 的服務(wù)提供了一種方便的方式,可以在服務(wù)單元中的[Service]段落中使用CPUAffinity,設(shè)置,該參數(shù)接受一個(gè)以空格為分隔符的 CPU 索引列表,例如 0 代表第-個(gè)CPU,1代表第二個(gè)CPU。
使用 tuna 命令查看CPU 綁定 yum install tuna 選頂: -t -P (大寫(xiě))查看特定線程的信息,例如調(diào)度策略,優(yōu)先級(jí),CPU綁定等
使用 cgroup 管理 CPU 親和性
在 NUMA 架構(gòu)中,一個(gè) NUMA 節(jié)點(diǎn)上包含了連接在該節(jié)點(diǎn)上的 CPU,內(nèi)存等硬件設(shè)備。由此也引出了 CPU 親和性的概念。即CPU 訪問(wèn)同一個(gè)節(jié)點(diǎn)中的內(nèi)存速度最快效率最高。利用 lscpu 命令查看 CPU 處于哪個(gè) NUMA 節(jié)點(diǎn)中。
NUMA
NUMA,非一致性內(nèi)存訪問(wèn)。將不同的CPU核心劃分到不同的 node 節(jié)點(diǎn)。每個(gè) node都有自己的內(nèi)存控制器,允許不同 node 中的 CPU 只訪問(wèn)屬于同一個(gè) node 的內(nèi)存區(qū)域。
而不同的 node 節(jié)點(diǎn)通過(guò) QPI進(jìn)行通信,如圖:
利用 cpuset cgroup 控制器可以將程序綁定到特定的核心上。cuset 目錄已經(jīng)被掛載到了/sys/fs/cgroup 目錄下。管理員可以手工對(duì)該目錄下的文件進(jìn)行讀寫(xiě)(修改)。
cpuset.cpus:指定 cgroup 中任務(wù)可以訪問(wèn)的CPU 數(shù)?!?”代表連續(xù)的 CPU 數(shù)。
Cpuset.mems:指定 cgroup 中的任務(wù)可以訪問(wèn)的 NUMA 內(nèi)存節(jié)點(diǎn)。
鏈接:https://www.cnblogs.com/OpenSourceSite/p/18567209
-
cpu
+關(guān)注
關(guān)注
68文章
10908瀏覽量
213088 -
Linux
+關(guān)注
關(guān)注
87文章
11350瀏覽量
210466
原文標(biāo)題:Linux之CPU調(diào)度策略和CPU親和性
文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
嵌入式Linux系統(tǒng)CPU控制常見(jiàn)辦法測(cè)試
Linux內(nèi)核進(jìn)程管理與調(diào)度:策略優(yōu)化與實(shí)踐分析
![<b class='flag-5'>Linux</b>內(nèi)核進(jìn)程管理與<b class='flag-5'>調(diào)度</b>:<b class='flag-5'>策略</b>優(yōu)化與實(shí)踐分析](https://file1.elecfans.com/web2/M00/82/8B/wKgaomRYU8uARetaAAAaY9wHsB8889.jpg)
【Nanopi2試用體驗(yàn)】高級(jí)(十):進(jìn)程綁定CPU核心
Linux系統(tǒng)調(diào)度簡(jiǎn)介
干貨分享:基于嵌入式Linux中進(jìn)程調(diào)度實(shí)現(xiàn)方法
基于GPU/CPU的流程序多粒度劃分與調(diào)度
一種靈活高效的虛擬CPU調(diào)度算法
linux CPU是這樣動(dòng)態(tài)調(diào)頻
![<b class='flag-5'>linux</b> <b class='flag-5'>CPU</b>是這樣動(dòng)態(tài)調(diào)頻](https://file.elecfans.com/web1/M00/8F/7B/pIYBAFy9iMyAYoh6AACQnCIBNls198.png)
評(píng)論