0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

關(guān)于提升 CPU 資源隔離的混部技術(shù)細(xì)節(jié)

openEuler ? 來源:openEuler ? 作者:openEuler ? 2022-09-22 10:04 ? 次閱讀

「概述」

在數(shù)據(jù)中心服務(wù)器或者各種云集群(后續(xù)簡(jiǎn)稱集群)的生產(chǎn)環(huán)境上,部署著很多日常的在線(LC, Latency-critical service)服務(wù)。這類服務(wù)具有一定的負(fù)載不確定性,集群需要將服務(wù)器的平均利用率保持在較低的水平,使得當(dāng)突發(fā)流量帶來請(qǐng)求洪峰時(shí),仍有充足資源用于計(jì)算與響應(yīng),從而避免了請(qǐng)求堆積造成的服務(wù)癱瘓,保證用戶能夠擁有良好的體驗(yàn)。但是這樣做造成了大批的空閑資源浪費(fèi),提高了維護(hù)成本。在這種條件下想要提高資源利用率,一種直接的方式是在線服務(wù)負(fù)載較低時(shí),部署另一種任務(wù),提高資源的利用效率。這類應(yīng)用不要求有極高的響應(yīng)速度,但是將耗費(fèi)較大的計(jì)算資源,我們稱之為離線任務(wù)(BE, Best-effort batch)。因此各大云服務(wù)廠商引入在線離線混合部署方案來提升服務(wù)器的資源利用率,以降低云的運(yùn)營(yíng)成本。但事物的發(fā)展是具有兩面性的,混合部署也不例外,提升資源利用率的同時(shí)也會(huì)帶來資源隔離的問題。

本文詳細(xì)介紹并分享關(guān)于提升 CPU 資源隔離的混部技術(shù)細(xì)節(jié):

-「CPU 搶占」:當(dāng)一臺(tái)服務(wù)上同時(shí)存在在線服務(wù)、離線服務(wù),如果不對(duì)離線服務(wù)加以限制,離線服務(wù)將會(huì)盡可能多的占用資源,從而增加在線任務(wù)的相應(yīng)時(shí)延。所以本方案在同一個(gè)核上的在線(LC)服務(wù)能夠搶占?jí)褐齐x線(BE)服務(wù),最終保證在線服務(wù)的 QoS.

-「SMT 隔離控制」:同一個(gè)物理 CPU 的超線程共享核心的硬件資源,如 Cache 和計(jì)算單元。當(dāng)在線任務(wù)和離線任務(wù)同時(shí)運(yùn)行在一對(duì)超線程上時(shí),會(huì)因?yàn)橛布Y源爭(zhēng)搶出現(xiàn)相互干擾的情況。此時(shí)需要驅(qū)離離線任務(wù),該 HT 核進(jìn)入 idle。

在混部場(chǎng)景 CPU 在離線調(diào)度的實(shí)現(xiàn)中,存在在線作業(yè)時(shí),我們會(huì)對(duì)離線任務(wù)進(jìn)行 throttle,以確保在線任務(wù)的 CPU 資源供應(yīng)。當(dāng)開啟 HT 后,我們會(huì)驅(qū)離同時(shí)運(yùn)行在同一個(gè)物理核且運(yùn)行在不同邏輯核的離線任務(wù)。本方案的設(shè)計(jì)目標(biāo)是保證在線業(yè)務(wù)服務(wù)質(zhì)量前提下實(shí)現(xiàn)資源利用率最大化提升。因此本方案的設(shè)計(jì)是圍繞如何提升 CPU 資源利用率和保障在線業(yè)務(wù)的響應(yīng)速度展開。主要包括以下兩個(gè)子特性的設(shè)計(jì):

特性一、CPU 搶占

「(1)在線任務(wù)搶占時(shí)延保證」

為了保證在線任務(wù)能夠快速搶占離線任務(wù),我們默認(rèn)會(huì)將離線任務(wù)的調(diào)度策略設(shè)置為SCHED_IDLE,而在線任務(wù)調(diào)度策略不做修改(通常情況下在線任務(wù)的調(diào)度策略為SCHED_OTHER),當(dāng)在線任務(wù)搶占離線任務(wù)時(shí),可以快速搶占,不受限于 sched_min_granularity_ns 和sched_wakeup_granularity_ns機(jī)制限制。

「(2)在線任務(wù)絕對(duì)壓制離線任務(wù)」

當(dāng)在線任務(wù)在運(yùn)行時(shí),離線任務(wù)需要停止運(yùn)行,以避免和在線任務(wù)搶占 CPU 資源,因此在線任務(wù)需要盡可能地壓制離線任務(wù),通過引入 throttle 機(jī)制對(duì)離線任務(wù)進(jìn)行限制, 在一個(gè) CPU 上同時(shí)存在在線和離線任務(wù)的場(chǎng)景下,將離線組對(duì)應(yīng)的cfs_rq 添加到一個(gè)全局 percpu 鏈表throttle_list,從而將 CPU 資源完全讓給在線任務(wù)。具體流程如下:

39d807a6-39b8-11ed-9e49-dac502259ad0.png

圖 1 離線任務(wù) throttle

特性二、SMT 隔離控制

由于同一個(gè)物理 CPU 上的超線程共享核心的硬件資源,比如 Cache 和計(jì)算單元。當(dāng)在線任務(wù)和離線任務(wù)同時(shí)運(yùn)行在一對(duì)超線程上時(shí),相互之間會(huì)因?yàn)橛布Y源爭(zhēng)搶,而出現(xiàn)相互干擾的情況。而 CFS 在設(shè)計(jì)時(shí)完全沒有考慮這個(gè)問題。其結(jié)果是,在混部場(chǎng)景中,在線業(yè)務(wù)的性能受損。實(shí)際測(cè)試使用 CPU 密集型 benchmark,因超線程導(dǎo)致的性能干擾可達(dá) 40%+。雖然 Linux 5.14 版本已經(jīng)合入了 Core Scheduing,但該特性本身是為了解決利用 SMT 側(cè)信道攻擊的,避免互相不被信任的兩個(gè)進(jìn)程工作在一個(gè)核的不同 SMT 上。其有幾點(diǎn)缺陷是我們不用該特性做 SMT 驅(qū)離的理由,首先其設(shè)計(jì)和實(shí)現(xiàn)過重,開銷較大(比如 core 級(jí)別的 rq lock)。其次其并不支持組調(diào)度功能,是以進(jìn)程為粒度進(jìn)行隔離,而我們的需求是希望對(duì)在線任務(wù)和離線任務(wù)進(jìn)行隔離。為了盡可能減輕這種競(jìng)爭(zhēng)的影響,我們讓一個(gè)核執(zhí)行在線任務(wù)的時(shí)候,它對(duì)應(yīng)的 MT 上不再運(yùn)行離線任務(wù);或者當(dāng)一個(gè)核上有離線任務(wù)運(yùn)行的時(shí)候,在線任務(wù)調(diào)度到了其對(duì)應(yīng)的 HT 上時(shí),會(huì)由該在線任務(wù)發(fā)送 IPI 將離線任務(wù)驅(qū)趕走。保證在線任務(wù)運(yùn)行時(shí)不被干擾。如下圖所示:

3a123282-39b8-11ed-9e49-dac502259ad0.png

圖 2 SMT 隔離控制方案設(shè)計(jì)

方案需要重點(diǎn)解決的問題

(1)離線任務(wù) kill boost

當(dāng)在線任務(wù) 100% 運(yùn)行時(shí),kill 一個(gè)離線任務(wù),此時(shí)離線任務(wù)需要得到運(yùn)行以釋放一些系統(tǒng)資源,但是因?yàn)楫?dāng)前方案在線任務(wù)會(huì)對(duì)離線任務(wù)產(chǎn)生絕對(duì)壓制,為此引入 kill boost 解決此問題;

離線任務(wù)所在 group 為離線 group,root group 為在線任務(wù),當(dāng)對(duì)一個(gè)離線任務(wù)進(jìn)行 kill 時(shí),將對(duì)應(yīng)的離線任務(wù)移入到 root group, 從而使離線任務(wù)變?yōu)樵诰€任務(wù),能夠得到機(jī)會(huì)運(yùn)行從而釋放資源。

(2)優(yōu)先級(jí)反轉(zhuǎn)

如果在線任務(wù)和離線任務(wù)之間有共享資源(比如內(nèi)核中的一些公共數(shù)據(jù)),當(dāng)離線任務(wù)因訪問共享資源而拿到鎖(抽象一下,不一定是鎖)后,如果被“絕對(duì)壓制”,一直無法運(yùn)行,當(dāng)在線任務(wù)也需要訪問該共享資源,而等待相應(yīng)的鎖時(shí),優(yōu)先級(jí)反轉(zhuǎn)出現(xiàn),導(dǎo)致死鎖(長(zhǎng)時(shí)間阻塞也可能)。優(yōu)先級(jí)反轉(zhuǎn)是調(diào)度模型中需要考慮的一個(gè)經(jīng)典問題。

目前該方案主要分為兩個(gè)模塊,優(yōu)先級(jí)反轉(zhuǎn)檢測(cè)和優(yōu)先級(jí)反轉(zhuǎn)處理:

「優(yōu)先級(jí)反轉(zhuǎn)檢測(cè)」:出現(xiàn)優(yōu)先級(jí)反轉(zhuǎn)的前提的是,在線任務(wù)長(zhǎng)時(shí)間 100%占用 CPU,導(dǎo)致離線任務(wù)被壓制無法釋放資源導(dǎo)致,基于這一特點(diǎn),我們可以通過檢測(cè)離線任務(wù)是否長(zhǎng)時(shí)間沒有得到運(yùn)行來判斷是否可能存在優(yōu)先級(jí)反轉(zhuǎn)流程。

「優(yōu)先級(jí)反轉(zhuǎn)處理」:當(dāng)檢測(cè)到優(yōu)先級(jí)反轉(zhuǎn)時(shí),對(duì)應(yīng) CPU 上的離線任務(wù)不再被在線任務(wù)壓制, 可以正常運(yùn)行,在返回用戶態(tài)之前會(huì)進(jìn)入睡眠流程,其中每次睡眠時(shí)間可以根據(jù)參數(shù)進(jìn)行設(shè)置。當(dāng) CPU 處理完隊(duì)列中的所有任務(wù)時(shí),就會(huì)進(jìn)入 idle, 此時(shí)代表當(dāng)前 CPU 恢復(fù)正常情況。代表優(yōu)先級(jí)反轉(zhuǎn)問題已經(jīng)解決,進(jìn)入正常的在離線混跑邏輯。

任務(wù)管理

容器混部場(chǎng)景中,在離線任務(wù)是以 Cgroup 組的形式進(jìn)行配置的,所以我們提供了 Cgroup 接口進(jìn)行任務(wù)管理。對(duì)應(yīng)路徑為:

/sys/fs/cgroup/cpu/xxx/cpu.qos_level

其中,cpu.qos_level文件代表當(dāng)前 group 里任務(wù)的在離線屬性,默認(rèn)值為 0,代表該任務(wù)為在線任務(wù)組; 若值為-1 則代表為離線任務(wù)組

于是,如果想要對(duì)任務(wù)進(jìn)行管理,可以在工作節(jié)點(diǎn)上創(chuàng)建離線任務(wù)組,將離線任務(wù)的 pid 寫入到該組的 task 中,再設(shè)置對(duì)應(yīng)的cpu.qos_level文件:

# echo  > /sys/fs/cgroup/cpu/xxx/tasks# echo -1 > /sys/fs/cgroup/cpu/xxx/cpu.qos_level

通過混部引擎 rubik 進(jìn)行管理

在容器混合部署場(chǎng)景下,混部引擎 rubik 可以自動(dòng)感知用戶配置的業(yè)務(wù)優(yōu)先級(jí)并配置其 CPU 優(yōu)先級(jí)屬性,rubik 具體的介紹和使用詳見《openEuler 資源利用率提升之道 03:rubik 混部引擎簡(jiǎn)介》。

針對(duì)本文提到的 CPU 優(yōu)先級(jí)的配置,用戶只需要在部署業(yè)務(wù) pod 時(shí),在 yaml 內(nèi)添加volcano.sh/preemptable的 annotation 標(biāo)識(shí)業(yè)務(wù)屬性,rubik 就會(huì)自動(dòng)設(shè)置 pod 對(duì)應(yīng) cgroup 組的 cpu.qos_level 值。例如,如下為一個(gè) nginx 在線業(yè)務(wù) pod 的 yaml 文件:

# cat nginx-online.yamlapiVersion: v1kind: Podmetadata:  name: nginx-online  annotations:    volcano.sh/preemptable: "false"   # volcano.sh/preemptable為true代表業(yè)務(wù)為離線業(yè)務(wù),false代表業(yè)務(wù)為在線業(yè)務(wù),默認(rèn)為falsespec:  containers:  - name: nginx    image: nginx    resources:      limits:        memory: "200Mi"        cpu: "1"      requests:        memory: "200Mi"        cpu: "1"

執(zhí)行kubectl apply -f nginx-online.yaml部署 nginx 業(yè)務(wù)后,進(jìn)入nginx-onlinePod 對(duì)應(yīng)的 cgroup 路徑下,查看cpu.qos_level是否已設(shè)置(在線業(yè)務(wù)為 0,離線業(yè)務(wù)為-1):

# cat /sys/fs/cgroup/cpu/kubepods/pod59f1cdfa-a0ad-4208-9e95-efbef3519c00/cpu.qos_level0

「總結(jié)」

本文介紹的“CPU 在離線搶占”和“SMT 隔離控制”在在離線混部場(chǎng)景對(duì) CPU 資源進(jìn)行管控,已經(jīng)有比較好的效果了,但還有一些不夠完美的地方,如 LLC/MBA 動(dòng)態(tài)調(diào)整軟件策略不夠精細(xì),要達(dá)到較好的效果依賴硬件優(yōu)先級(jí)算法,我們可以期待新的鯤鵬服務(wù)器。同時(shí)在公有云場(chǎng)景對(duì)鄰居干擾的消減也是很重要的,openEuler 在這方法也做了一些探索,“潮汐 affinity”技術(shù)取得了不俗的效果,也會(huì)在后續(xù)的文章中與大家見面。下一期將會(huì)分享資源利用率內(nèi)存相關(guān)的技術(shù)。

審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10813

    瀏覽量

    210883
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    8979

    瀏覽量

    85101
  • 硬件
    +關(guān)注

    關(guān)注

    11

    文章

    3224

    瀏覽量

    66071

原文標(biāo)題:openEuler 資源利用率提升之道 04:CPU 搶占和 SMT 隔離控制

文章出處:【微信號(hào):openEulercommunity,微信公眾號(hào):openEuler】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    應(yīng)用Bluetooth Smart技術(shù)的全套智能騎行設(shè)備的技術(shù)細(xì)節(jié)和應(yīng)用場(chǎng)景,不看肯定后悔

    應(yīng)用Bluetooth Smart技術(shù)的全套智能騎行設(shè)備的技術(shù)細(xì)節(jié)和應(yīng)用場(chǎng)景,不看肯定后悔
    發(fā)表于 05-21 06:47

    openEuler 資源利用率提升之道 01:概論

    ;gt;40%)。相關(guān)技術(shù)資源超賣、資源分級(jí)隔離、反饋控制L3: 「泛型」 :混合部署業(yè)務(wù)
    發(fā)表于 07-06 09:54

    openEuler資源利用率提升之道02:典型應(yīng)用下的效果

    有效利用 Web Serving 空閑時(shí)的 CPU 資源,實(shí)現(xiàn)資源利用率的提升,但如果只是簡(jiǎn)單地混合部署,CPU 密集的離線業(yè)務(wù)必然會(huì)對(duì)在線
    發(fā)表于 08-10 11:12

    openEuler 資源利用率提升之道 03:rubik 引擎簡(jiǎn)介

    /cpu.qos_level0展望在離線混合部署作為提升數(shù)據(jù)中心資源利用率的重要手段,得到學(xué)術(shù)界和工業(yè)界的關(guān)注,成為了研究的熱點(diǎn)領(lǐng)域,但目前也面臨著諸多技術(shù)挑戰(zhàn),尚有許多亟待解決的問題
    發(fā)表于 09-01 11:00

    openEuler 資源利用率提升之道 04:CPU 搶占和 SMT 隔離控制

    隔離的問題。本文詳細(xì)介紹并分享關(guān)于提升 CPU 資源隔離
    發(fā)表于 09-22 16:50

    愛奇藝:基于龍蜥與 Koordinator 在離線的實(shí)踐解析

    服務(wù)質(zhì)量,愛奇藝引入了龍蜥操作系統(tǒng)(Anolis OS)。Group Identity 功能和 CPU Burst 功能對(duì)當(dāng)前的效果起到了很大的提升作用。Anolis OS 通過配
    發(fā)表于 12-22 15:56

    MIT公布“盲動(dòng)”機(jī)器人技術(shù)細(xì)節(jié)

    7月7日美國(guó)麻省理工學(xué)院近日發(fā)布公報(bào)稱,該校研究人員最新公布了一種“盲動(dòng)”機(jī)器人的技術(shù)細(xì)節(jié)。這種機(jī)器人不需要借助視覺系統(tǒng),可在崎嶇地形中穿行跳躍,有望在危險(xiǎn)工作環(huán)境中得到廣泛應(yīng)用。
    的頭像 發(fā)表于 07-11 15:49 ?3046次閱讀

    意法半導(dǎo)體公布ST54J系統(tǒng)芯片(SoC)的技術(shù)細(xì)節(jié)

    意法半導(dǎo)體日前公布了其集成NFC(近場(chǎng)通信)控制器、安全單元和eSIM的高集成度移動(dòng)安全解決方案ST54J系統(tǒng)芯片(SoC)的技術(shù)細(xì)節(jié)。
    的頭像 發(fā)表于 10-10 11:01 ?6710次閱讀

    要想電流測(cè)得準(zhǔn),一定不能忽視的技術(shù)細(xì)節(jié)(第二講)

    要想電流測(cè)得準(zhǔn),一定不能忽視的技術(shù)細(xì)節(jié)(第二講)
    的頭像 發(fā)表于 07-02 11:40 ?2763次閱讀

    小米手表e-SIM技術(shù)細(xì)節(jié)揭露,明天發(fā)布

    11月4日消息,小米生態(tài)鏈總經(jīng)理屈恒揭秘了小米手表e-SIM技術(shù)細(xì)節(jié)。
    的頭像 發(fā)表于 11-04 15:31 ?4606次閱讀

    高通全新旗艦芯片驍龍888技術(shù)細(xì)節(jié)揭曉

    高通正式揭曉全新芯片Snapdragon 888(S888)技術(shù)細(xì)節(jié),預(yù)計(jì)替Android旗艦手機(jī)帶來哪些改變呢?外媒整理五大重點(diǎn),不僅是性能、手游表現(xiàn)提升,就連拍照都能藉由S888有更好的效果。
    的頭像 發(fā)表于 12-03 12:01 ?1936次閱讀

    CPU共享資源隔離的利器MPAM特性介紹

    x86 RDT[2]技術(shù)后的另一個(gè)針對(duì) CPU 訪存系統(tǒng)資源隔離的全新特性倍受關(guān)注,相比其他架構(gòu)的類似特性,Arm64 架構(gòu)下的 MPAM 特性采用全新的確定性流控方式,控制手段更加
    的頭像 發(fā)表于 04-20 11:23 ?1.5w次閱讀
    <b class='flag-5'>CPU</b>共享<b class='flag-5'>資源</b><b class='flag-5'>隔離</b>的利器MPAM特性介紹

    一文解析鴻蒙系統(tǒng)誕生背景、技術(shù)細(xì)節(jié)生態(tài)圈

    從鴻蒙系統(tǒng)的產(chǎn)生背景、開源技術(shù)細(xì)節(jié)和產(chǎn)業(yè)鏈生態(tài)圈全面解析鴻蒙系統(tǒng)。 華為6月2日正式發(fā)布的鴻蒙系統(tǒng)無疑占據(jù)了最近熱點(diǎn)話題的C位,雖然不全是贊美的聲音,但這種努力打破美國(guó)壟斷,挑戰(zhàn)谷歌、蘋果在移動(dòng)
    的頭像 發(fā)表于 06-11 16:14 ?6024次閱讀

    數(shù)據(jù)中心的集群資源利用分析綜述

    數(shù)據(jù)中心的集群資源利用分析綜述
    發(fā)表于 06-24 11:47 ?16次下載

    深入解析Zephyr RTOS的技術(shù)細(xì)節(jié)

    ,Zephyr OS在嵌入式開發(fā)中的知名度逐漸增加,新的微控制器和開發(fā)板都支持Zephyr。本文將深入討論Zephyr RTOS的技術(shù)細(xì)節(jié)
    的頭像 發(fā)表于 10-22 16:47 ?236次閱讀
    深入解析Zephyr RTOS的<b class='flag-5'>技術(shù)細(xì)節(jié)</b>