博客專欄

        EEPW首頁 > 博客 > 一種動態實現核隔離的方法

        一種動態實現核隔離的方法

        發布人:天翼云開發者 時間:2023-10-30 來源:工程師 發布文章
        本文分享自天翼云開發者社區《一種動態實現核隔離的方法作者:y****n

        https://www.ctyun.cn/developer/article/475762070474821

        一、技術背景

        相關概念:

        核隔離:指定的cpu核心只參與最低限度的OS內核計算; 

        DPDK(Date planedevelopment kit):是一個用來進行包數據處理加速的軟件庫。

        Cpu親和性:進程要在某個給定的CPU上盡量長時間地運行而不被遷移到其他處理器的傾向性。

        背景:

        網元節點上,對cpu消耗比較多的進程可以分為幾個類別:

        1、系統運行相關進程(通過systemd啟動和管理的進程以及內核線程)

        2、網元相關進程(比如dpos、gobgpd進程)。

        然而在現網中發現,由于系統運行相關進程與網元相關進程在同內核下運行時,會概率性的搶占pmd線程的cpu,從而導致dpdk丟包,影響網元性能。一般使用的隔離系統進程方法如修改grub文件、tuned調優方式都需要重啟才能生效,對于已經部署到現網的網元而言,這些方式會對用戶業務造成極大的影響。

        因此,需要尋求一種核隔離方法,使得系統進程和網元進程互相隔離,互不影響,以解決網元設備在系統進程搶占業務進程cpu內核時可能出現的網絡延時變高,丟包等問題,提高網絡通信的性能和可靠性。并且對于現網上運行的網元節點能夠做到無感知。

        二、方案設計及實現

        本方案主要是隔離systemd啟動和管理的進程的cpu核,限制其運行在網元進程的預留核上。

        1、確定cpu預留核分配策略

        根據系統規格的不同,確定不同的cpu內核分配策略。如1Numa8Cores的系統,可將系統進程分配到0-2核上;或者2Numa96Cores的系統。可將系統進程分配到numa0的前3個cpu核以及numa1的后3個cpu核上,其余的內核為網元進程所占用。分配策略需按照服務器規格以及實際需求進行設計。

        2、設置systemd進程親和性

        通過修改/etc/systemd/system.conf文件中的CPUAffinity中的值,將其改為第一步中的預留核數,如0-2。

        通過systemd 

        3、設置systemd子進程親和性

        對于systemd啟動和創建的進程主要分為幾類:

        1、正在運行的systemd子進程

        2、后續由systemd創建或者重啟的子進程

        對于后續需要由systemd創建的進程或者重啟的進程,其cpu親和性會自動與systemd保持一致,因此只需要考慮正在運行的systemd子進程的核隔離。對此,采用taskset -cp cpus pid的方式進行設置。taskset是linux操作系統中的一個命令,它可以對進程進行CPU親和性設置,即讓進程在指定的CPU核心或者CPU核心集合上運行。

        通過cgroup和taskset兩種方式的結合,可以實現在現網運行過程中,動態的對系統相關的進程(尤其是systemd啟動和管理的進程)進行核隔離的目的。

        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        關鍵詞: 運維 服務器

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 玉环县| 逊克县| 林芝县| 汶上县| 武夷山市| 威海市| 石家庄市| 施秉县| 资阳市| 怀来县| 河源市| 陇西县| 油尖旺区| 舟山市| 登封市| 綦江县| 高台县| 阿坝| 巩留县| 吉木乃县| 斗六市| 武定县| 天柱县| 鱼台县| 宁波市| 准格尔旗| 多伦县| 松潘县| 广丰县| 鄂伦春自治旗| 罗田县| 黔东| 荆门市| 青河县| 灌南县| 天水市| 台州市| 兖州市| 雷波县| 永寿县| 财经|