主頁 >  其他 > 如何合理使用 CPU 管理策略,提升容器性能?

如何合理使用 CPU 管理策略,提升容器性能?

2022-02-25 06:20:30 其他

作者:張佐瑋(佑祎)

前言

在云原生時代下,應用作業負載都是以容器的形式部署在宿主機,共享各類物理資源,隨著宿主機硬體性能的增強,單節點的容器部署密度進一步提升,由此帶來的行程間 CPU 爭用,跨 NUMA 訪存等問題也更加嚴重,影響了應用性能表現,如何分配和管理宿主機的 CPU 資源,保障應用可以獲得最優的服務質量,是衡量容器服務技術能力的關鍵因素,

節點側容器 CPU 資源管理

Kubelet 的 CPU 分配策略

Kubernetes 為容器資源管理提供了 request(請求)和 limit(約束)的語意描述,當容器指定了 request 時,調度器會利用該資訊決定 Pod 應該被分配到哪個節點上;當容器指定了 limit 時,Kubelet 會確保容器在運行時不會超用,

CPU 是一種典型的分時復用型資源,內核調度器會將 CPU 分為多個時間片,輪流為各行程分配一定的運行時間,Kubelet 默認的 CPU 管理策略會通過 Linux 內核的 CFS 帶寬控制器(CFS Bandwidth Controller)來控制容器 CPU 資源的使用上限,在多核節點下,行程在運行程序中經常會被遷移到其不同的核心,考慮到有些應用的性能對 CPU 背景關系切換比較敏感,Kubelet 還提供了 static 策略,允許 Guaranteed 型別 Pod 獨占 CPU 核心,

內核 CPU 資源調度

內核 CFS 調度是通過 cfs_period 和 cfs_quota 兩個引數來管理容器 CPU 時間片消耗的,cfs_period 一般為固定值 100 ms,cfs_quota 對應容器的 CPU Limit,例如對于一個 CPU Limit = 2 的容器,其 cfs_quota 會被設定為 200ms,表示該容器在每 100ms 的時間周期內最多使用 200ms 的 CPU 時間片,即 2 個 CPU 核心,當其 CPU 使用量超出預設的 limit 值時,容器中的行程會受內核調度約束而被限流,細心的應用管理員往往會在集群 Pod 監控中的 CPU Throttle Rate 指標觀察到這一特征,

在這里插入圖片描述

容器 CPU 性能問題現狀

讓應用管理員常常感到疑惑的是,為什么容器的資源利用率并不高,但卻頻繁出現應用性能下降的問題?從 CPU 資源的角度來分析,問題通常來自于以下兩方面:一是內核在根據 CPU Limit 限制容器資源消耗時產生的 CPU Throttle 問題;二是受 CPU 拓撲結構的影響,部分應用對行程在 CPU 間的背景關系切換比較敏感,尤其是在發生跨 NUMA 訪問時的情況,

CPU Throttle 問題詳解

受內核調度控制周期(cfs_period)影響,容器的 CPU 利用率往往具有一定的欺騙性,下圖展示了某容器一段時間的 CPU 使用情況(單位為0.01核),可以看到在 1s 級別的粒度下(圖中紫色折線),容器的 CPU 用量較為穩定,平均在 2.5 核左右,根據經驗,管理員會將 CPU Limit設定為 4 核,本以為這已經保留了充足的彈性空間,然而若我們將觀察粒度放大到 100ms 級別(圖中綠色折線),容器的 CPU 用量呈現出了嚴重的毛刺現象,峰值達到 4 核以上,此時容器會產生頻繁的 CPU Throttle,進而導致應用性能下降、RT 抖動,但我們從常用的 CPU 利用率指標中竟然完全無法發現!

在這里插入圖片描述

毛刺產生的原因通常是由于應用突發性的 CPU 資源需求(如代碼邏輯熱點、流量突增等),下面我們用一個具體的例子來描述 CPU Throttle 導致應用性能下降的程序,圖中展示了一個CPU Limit = 2 的 Web 服務類容器,在收到請求后(req)各執行緒(Thread)的 CPU 資源分配情況,假設每個請求的處理時間均為 60 ms,可以看到,即使容器在最近整體的 CPU 利用率較低,由于在 100 ms~200 ms 區間內連續處理了4 個請求,將該內核調度周期內的時間片預算(200ms)全部消耗,Thread 2 需要等待下一個周期才能繼續將 req 2 處理完成,該請求的回應時延(RT)就會變長,這種情況在應用負載上升時將更容易發生,導致其 RT 的長尾情況將會變得更為嚴重,

在這里插入圖片描述

為了避免 CPU Throttle 的問題,我們只能將容器的 CPU Limit 值調大,然而,若想徹底解決 CPU Throttle,通常需要將 CPU Limit 調大兩三倍,有時甚至五到十倍,問題才會得到明顯緩解,而為了降低 CPU Limit 超賣過多的風險,還需降低容器的部署密度,進而導致整體資源成本上升,

CPU 拓撲結構的影響

在 NUMA 架構下,節點中的 CPU 和記憶體會被切分成了兩部分甚至更多(例如圖中 Socket0,Socket1),CPU 被允許以不同的速度訪問記憶體的不同部分,當 CPU 跨 Socket 訪問另一端記憶體時,其訪存時延相對更高,盲目地在節點為容器分配物理資源可能會降低延遲敏感應用的性能,因此我們需要避免將 CPU 分散系結到多個 Socket 上,提升記憶體訪問時的本地性,如下圖所示,同樣是為兩個容器分配 CPU、記憶體資源,顯然場景B中的分配策略更為合理,

在這里插入圖片描述

Kubelet 提供的 CPU 管理策略 “static policy”、以及拓撲管理策略 “single-numa-node”,會將容器與 CPU 系結,可以提升應用負載與 CPU Cache,以及 NUMA 之間的親和性,但這是否一定能夠解決所有因 CPU 帶來的性能問題呢,我們可以看下面的例子,

某 CPU Limit = 2 的容器,其應用在 100ms 時間點收到了 4 個請求需要處理,在 Kubelet 提供的 static 模式下,容器會被固定在 CPU0 和 CPU1 兩個核心,各執行緒只能排隊運行,而在 Default 模式下,容器獲得了更多的 CPU 彈性,收到請求后各執行緒可以立即處理,可以看出,綁核策略并不是“銀彈”,Default 模式也有適合自己的應用場景,

在這里插入圖片描述

事實上,CPU 綁核解決的是行程在不同 Core,特別是不同 NUMA 間背景關系切換帶來的性能問題,但解決的同時也損失了資源彈性,在這種情況下執行緒會在各 CPU 排隊運行,雖然 CPU Throttle 指標可能有所降低,但應用自身的性能問題并沒有完全解決,

使用 CPU Burst 機制提升容器性能

往期文章我們介紹了阿里云貢獻的 CPU Burst 內核特性,可以有效解決 CPU Throttle 的問題,當容器真實 CPU 資源使用小于 cfs_quota 時,內核會將多余的 CPU 時間“存入”到 cfs_burst 中;當容器有突發的 CPU 資源需求,需要使用超出 cfs_quota 的資源時,內核的 CFS 帶寬控制器(CFS Bandwidth Controller,簡稱 BWC) 會允許其消費其之前存到 cfs_burst 的時間片,

在這里插入圖片描述

CPU Burst 機制可以有效解決延遲敏感性應用的 RT 長尾問題,提升容器性能表現,目前阿里云容器服務 ACK 已經完成了對 CPU Burst 機制的全面支持,對于尚未支持 CPU Burst 策略的內核版本,ACK 也會通過類似的原理,監測容器 CPU Throttle 狀態,并動態調節容器的 CPU Limit,實作與內核 CPU Burst 策略類似的效果,

我們使用 Apache HTTP Server 作為延遲敏感型在線應用,通過模擬請求流量,評估 CPU Burst 能力對回應時間(RT)的提升效果,以下資料分別展示了 CPU Burst 策略開啟前后的表現情況:

在這里插入圖片描述

對比以上資料可得知:

  • 在開啟 CPU Burst 能力后,應用的 RT 指標的 p99 分位值得到了明顯的優化,
  • 對比 CPU Throttled 及利用率指標,可以看到開啟 CPU Burst 能力后,CPU Throttled 情況得到了消除,同時 Pod 整體利用率基本保持不變,

使用拓撲感知調度提升容器性能

雖然 Kubelet 提供了單機的資源管理策略(static policy,single-numa-node),可以部分解決應用性能表現受 CPU 快取、NUMA 親和性影響的問題,但該策略尚有以下不足之處:

  • static policy 只支持 QoS 為 Guaranteed 的 Pod,其他 QoS 型別的 Pod 無法使用
  • 策略對節點內所有 Pod 全部生效,而我們通過前面的分析知道,CPU 綁核并不是”銀彈“
  • 中心調度并不感知節點實際的 CPU 分配情況,無法在集群范圍內選擇到最優組合

阿里云容器服務 ACK 基于 Scheduling framework 實作了拓撲感知調度以及靈活的綁核策略,針對 CPU 敏感型的作業負載可以提供更好的性能,ACK 拓撲感知調度可以適配所有 QoS 型別,并支持在 Pod 維度按需開啟,同時可以在全集群范圍內選擇節點和 CPU 拓撲的最優組合,

通過對 Nginx 服務進行的評測,我們發現在 Intel(104核)、AMD(256核)的物理機上,使用 CPU 拓撲感知調度能夠將應用性能提升 22%~43%,

在這里插入圖片描述

總結

CPU Burst、拓撲感知調度是阿里云容器服務 ACK 提升應用性能的兩大利器,它們解決了不同場景下的 CPU 資源管理,可以共同使用,

CPU Burst 解決了內核 BWC 調度時針對 CPU Limit 的限流問題,可以有效提升延時敏感型任務的性能表現,但 CPU Burst 本質并不是將資源無中生有地變出來,若容器 CPU 利用率已經很高(例如大于50%),CPU Burst 能起到的優化效果將會受限,此時應該通過 HPA 或 VPA 等手段對應用進行擴容,

拓撲感知調度降低了作業負載 CPU 背景關系切換的開銷,特別是在 NUMA 架構下,可以提升 CPU 密集型,訪存密集型應用的服務質量,不過正如前文中提到的,CPU 綁核并不是“銀彈”,實際效果取決于應用型別,此外,若同一節點內大量 Burstable 型別 Pod 同時開啟了拓撲感知調度,CPU 綁核可能會產生重疊,在個別場景下反而會加劇應用間的干擾,因此,拓撲感知調度更適合針對性的開啟,

點擊此處,即可查看阿里云 ACK 支持 CPU Burst 、拓撲感知調度的詳細介紹!

發布云原生技術最新資訊、匯集云原生技術最全內容,定期舉辦云原生活動、直播,阿里產品及用戶最佳實踐發布,與你并肩探索云原生技術點滴,分享你需要的云原生內容,

關注【阿里巴巴云原生】公眾號,獲取更多云原生實時資訊!

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/431996.html

標籤:其他

上一篇:針對 Kubernetes v1.22,阿里云容器服務 ACK 提供了哪些升級和增強能力?

下一篇:「螣龍安科」潮汐平臺2.0:重新定義企業安全鏈條,打造新一代主動安全生態系統

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more