• 關于我們

    麒麟動態

    當前位置  >  首頁  >  關于我們  >  麒麟動態  >  正文

    K8s綁核調度優化,銀河麒麟操作系統助力國產芯片性能更佳

    發布時間:2024-02-05    瀏覽次數:4691次    作者:麒麟軟件



    Kubernetes(簡稱K8s)是業界主流的開源容器編排平臺之一。kubelet作為管理K8s中Pod及其相關容器的核心組件,與容器運行時對接。其原生的static policy綁核機制旨在避免線程在不同die之間輪轉,從而減少跨die仿存的性能開銷。由于飛騰S2500 L2緩存設計特殊,在銀河麒麟操作系統下,kubelet原有的綁核機制難以發揮預期效果,影響CPU性能的發揮。麒麟軟件技術團隊對此進行了優化,使K8s的容器在飛騰S2500平臺上性能更佳。














    CPU綁核


    CPU綁核是借助Cgroup cpuset子系統將線程綁定到指定CPU core上執行。合理的CPU綁核避免了內核CPU調度線程帶來的性能開銷。


    本文主要關注L2緩存Miss產生的時間開銷。如圖1所示:


    圖1


    圖中展示了線程在CPU core之間調度的場景。在階段1,線程A和B的數據加載到各自核心的L2緩存。若未進行綁核,在階段2,線程A和B可能交換運行的CPU core,導致L2緩存數據更新,造成cache miss,帶來性能開銷。而進行綁核操作則始終維持在階段1狀態,避免L2緩存數據更新,提升性能。 


    飛騰S2500的硬件特點


    通常CPU core與L2緩存是一對一的關系(見圖1),而S2500每4個CPU core共享一個L2緩存。引發了新的問題:若同一個L2緩存中的4個CPU core綁定不同任務線程,這些線程在運行過程中會爭搶L2緩存,造成性能波動,使得綁核效果無法完全發揮。


    在典型x86 CPU環境下,假設有8個CPU core,兩個任務,每個任務有兩個線程,一種可能的綁核情況如下圖所示,每個core有獨立的L2緩存,因此不同任務的線程不會發生L2緩存搶占,CPU綁核完全發揮效果。


    圖2


    在飛騰S2500服務器中,在與圖2相同的CPU綁核情況下,任務1和任務2仍會出現L2緩存爭搶,觸發L2 Cache Miss,導致某個任務性能波動,綁核的優化效果未能充分發揮。


    圖3


    一種理想的綁核情況如下圖,任務1和任務2的線程各自綁核到共享同一個L2緩存的CPU core上。由于同一個任務的線程用的數據相近,L2緩存完全為該任務服務,減少Cache Miss,降低性能波動。此時能夠達到和圖2相同的綁核效果。


    圖4


    基于飛騰S2500的K8s綁核調度

    優化方案(L2親和性優化)


    原生kubelet代碼中,在綁核過程中默認執行takeByTopologyNUMAPacked()函數。該函數按照CPU層次結構從高到低,先嘗試分配整個NUMA節點或者socket的CPU core,然后嘗試分配整個CPU core中的計算資源(考慮超線程,一個CPU核提供兩個超線程),最后分配剩余的CPU core(超線程)。該分配邏輯未涉及L2層面的分配算法,因此原生k8s會如前文所示,在飛騰S2500上無法完全發揮綁核的效果。


    基于飛騰S2500的L2緩存特殊性,麒麟軟件技術團隊對kubelet綁核調度代碼增加L2親和性優化:


    ? 1)在原生kubelet代碼分配整個NUMA節點或Socket和分配整個CPU core的算力間,插入L2層級分配邏輯;


    ? 2)綁核時優先選擇空閑的L2緩存;


    ? 3)同一任務線程盡可能綁核在共享同一個L2緩存的CPU core上。


    其中,1)繼承了kubelet原生代碼的特性;2)和3)保證了同一任務線程能夠盡可能獨占L2緩存,在綁核時盡可能避免不同任務線程爭搶L2緩存導致的性能波動。


    修改后的takeByTopologyNUMAPacked()函數邏輯如圖5所示:


    圖5


    例如,分配8個CPU core用來綁核。原生kubelet在飛騰S2500平臺上的綁核結果可能如圖6所示:先將NUMA1中空閑的CPU core分配完,再從NUMA2中選擇一個CPU core進行分配。


    圖6


    優化后的kubelet分配結果如圖7所示:待分配的CPU core盡可能獨占L2緩存。


    圖7


    經過測試,優化后的kubelet代碼能夠滿足要求,綁核后提升線程運行效率和穩定性。以4C4G為例,在已有CPU資源被其他Pod占用的情況下部署新Pod,測試Unixbench指標性能對比,如圖8所示:


    圖8


    總結


    由于飛騰 S2500 的L2緩存的特殊性,原生kubelet代碼的綁核功能因多容器線程爭搶L2緩存而導致性能波動,無法發揮良好的性能效果。針對該問題,通過修改kubelet綁核代碼,使容器在綁核時優先選擇同一個L2緩存下空閑的CPU core,避免L2 Cache Miss導致的性能波動,提升容器應用性能表現。

    近年來,隨著網信事業的快速發展,國產軟硬件產品在技術和品質上都取得了顯著的進步,以飛騰、鯤鵬、龍芯、兆芯、海光、申威等為代表的國產CPU性能也得到大幅提升。麒麟操作系統已全面支持國產主流CPU,在系統安全、穩定可靠、好用易用和整體性能等方面具有領先優勢。未來,麒麟軟件將與產業鏈伙伴共同攜手,為我國行業信息化及國家重大工程建設提供安全可信的操作系統支撐。


    通訊員 | 魏玉成

    來    源 | 服務器研發部、產品管理部

    審    核 | 市場與政府事務部


    上一篇: 砥礪奮進譜新篇 龍行龘龘迎新年|麒麟軟件成功舉辦2024年春節云聯歡 下一篇: “春節不打烊”,麒麟軟件為您保駕護航!

    試用

    服務

    動態

    聯系

    公啊灬啊灬啊灬快灬深用力视频