自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

干掉討厭的 CPU 限流,讓容器跑得更快

商務(wù)辦公
在 K8S 容器調(diào)度中,容器的 CPU 資源上限是由 CPU limits 參數(shù)指定。設(shè)置 CPU 資源上限可以限制個別容器消耗過多的 CPU 運行時間,并確保其他容器拿到足夠的 CPU 資源。

 [[415960]]

本文轉(zhuǎn)載自微信公眾號「云巔論劍」,作者常懷鑫 。轉(zhuǎn)載本文請聯(lián)系云巔論劍公眾號。

讓人討厭的 CPU 限流影響容器運行,有時人們不得不犧牲容器部署密度來避免 CPU 限流出現(xiàn)。本文介紹的 CPU Burst 技術(shù)可以幫助您既能保證容器運行服務(wù)質(zhì)量,又不降低容器部署密度。文章分為上下兩篇,該文為上篇,下篇將剖析使用 CPU Burst 和其他避免限流手段的區(qū)別,以及如何配置 CPU Burst 功能以達到最佳效果。

在 K8S 容器調(diào)度中,容器的 CPU 資源上限是由 CPU limits 參數(shù)指定。設(shè)置 CPU 資源上限可以限制個別容器消耗過多的 CPU 運行時間,并確保其他容器拿到足夠的 CPU 資源。CPU limits 限制在 Linux 內(nèi)核中是用 CPU Bandwidth Controller 實現(xiàn)的,它通過 CPU限流限制 cgroup 的資源消耗。所以當(dāng)一個容器中的進程使用了超過 CPU limits 的資源的時候,這些進程就會被 CPU 限流,他們使用的 CPU 時間就會受到限制,進程中一些關(guān)鍵的延遲指標就會變差。

面對這種情況,我們應(yīng)該怎么辦呢?一般情況下,我們會結(jié)合這個容器日常峰值的 CPU 利用率并乘以一個相對安全的系數(shù)來設(shè)置這個容器的 CPU limits ,這樣我們既可以避免容器因為限流而導(dǎo)致的服務(wù)質(zhì)量變差,同時也可以兼顧 CPU 資源的利用。舉個簡單的例子,我們有一個容器,他日常峰值的 CPU 使用率在 250% 左右,那么我們就把容器 CPU limits 設(shè)置到 400% 來保證容器服務(wù)質(zhì)量,此時容器的 CPU 利用率是 62.5%(250%/400%)。

然而生活真的那么美好么?顯然不是!CPU 限流的出現(xiàn)比預(yù)期頻繁了很多。怎么辦?似乎看上去我們只能繼續(xù)調(diào)大 CPU limits 來解決這個問題。很多時候,當(dāng)容器的 CPU limits 被放大 5~10 倍的時候,這個容器的服務(wù)質(zhì)量才得到了比較好的保障,相應(yīng)的這時容器的總 CPU 利用率只有 10%~20%。所以為了應(yīng)對可能的容器 CPU 使用高峰,容器的部署密度必須大大降低。

歷史上人們在 CPU Bandwidth Controller 中修復(fù)了一些 BUG 導(dǎo)致的 CPU 限流問題,我們發(fā)現(xiàn)當(dāng)前非預(yù)期限流是由于100ms級別CPU突發(fā)使用引起,并且提出 CPU Burst 技術(shù)允許一定的 CPU 突發(fā)使用,避免平均 CPU 利用率低于限制時的 CPU 限流。在云計算場景中,CPU Burst 技術(shù)的價值有:

  1. 不提高 CPU 配置的前提下改善 CPU 資源服務(wù)質(zhì)量;
  2. 允許資源所有者不犧牲資源服務(wù)質(zhì)量降低CPU資源配置,提升CPU資源利用率;
  3. 降低資源成本(TCO, Total Cost of Ownership)。

你看到的CPU利用率不是全部真相

秒級 CPU 利用率不能反映 Bandwidth Controller 工作的 100ms 級別 CPU 使用情況,是導(dǎo)致非預(yù)期 CPU 限流出現(xiàn)的原因。

Bandwidth Controller 適用于 CFS 任務(wù),用 period 和 quota 管理 cgroup 的 CPU 時間消耗。若 cgroup 的 period 是 100ms quota 是 50ms,cgroup 的進程每 100ms 周期內(nèi)最多使用 50ms CPU 時間。當(dāng) 100ms 周期的 CPU 使用超過 50ms 時進程會被限流,cgroup 的 CPU 使用被限制到 50% 。

CPU 利用率是一段時間內(nèi) CPU 使用的平均,以較粗的粒度統(tǒng)計 CPU 的使用需求,CPU 利用率趨向穩(wěn)定;當(dāng)觀察的粒度變細,CPU 使用的突發(fā)特征更明顯。以 1s 粒度和 100ms 粒度同時觀測容器負載運行,當(dāng)觀測粒度是 1s 時 CPU 利用率的秒級平均在 250% 左右,而在 Bandwidth Controller 工作的 100ms 級別觀測 CPU 利用率的峰值已經(jīng)突破 400% 。

根據(jù)秒級觀察到的 CPU 利用率 250% 設(shè)置容器 quota 和 period 分別為 400ms 和 100ms ,容器進程的細粒度突發(fā)被 Bandwidth Controller 限流,容器進程的 CPU 使用受到影響。

如何改善

我們用 CPU Burst 技術(shù)來滿足這種細粒度 CPU 突發(fā)需求,在傳統(tǒng)的 CPU Bandwidth Controller quota 和 period 基礎(chǔ)上引入 burst 的概念。當(dāng)容器的 CPU 使用低于 quota 時,可用于突發(fā)的 burst 資源累積下來;當(dāng)容器的 CPU 使用超過 quota,允許使用累積的 burst 資源。最終達到的效果是將容器更長時間的平均 CPU 消耗限制在 quota 范圍內(nèi),允許短時間內(nèi)的 CPU 使用超過其 quota。

如果用 Bandwidth Controller 算法來管理休假,假期管理的周期(period)是一年,一年里假期的額度是 quota ,有了 CPU Burst 技術(shù)之后今年修不完的假期可以放到以后來休了。

使用 CPU Burst 之后

在容器場景中使用 CPU Burst 之后,測試容器的服務(wù)質(zhì)量顯著提升。觀察到 RT 均值下降 68%(從 30+ms 下降到 9.6ms );99% RT 下降 94.5%(從 500+ms 下降到 27.37ms )。

如果容器運行負載是延遲敏感類型,又有配置 quota 引起的 CPU 限流,不妨試試使用 CPU Burst 技術(shù)對延遲進行優(yōu)化。CPU Burst 修改已合入 Linux 5.14,Alibaba Cloud Linux 也已經(jīng)支持 CPU Burst 技術(shù)。

關(guān)于作者

常懷鑫(一齋),阿里云內(nèi)核組工程師,擅長CPU調(diào)度領(lǐng)域。

 

責(zé)任編輯:武曉燕 來源: 云巔論劍
相關(guān)推薦

2022-05-05 09:31:58

JOIN數(shù)據(jù)庫

2012-06-13 01:53:23

Java代碼

2009-06-23 18:00:11

微軟Windows 7瘦身

2011-07-06 10:27:32

ADSL

2011-07-06 10:48:12

ADSL

2020-10-18 07:21:34

CPU代碼執(zhí)行效率

2019-09-16 12:00:03

constC編程語言

2011-07-06 10:48:42

ADSL

2012-05-17 14:37:33

SAPHANA邁凱輪

2022-03-21 15:31:52

人工智能機器人機器學(xué)習(xí)

2014-08-28 09:35:32

Node.js前端開發(fā)

2009-11-16 08:54:42

Windows 7系統(tǒng)加速

2009-12-08 18:34:49

Windows 7 w

2012-09-06 09:36:17

谷歌NatiShalom數(shù)據(jù)處理

2020-06-05 09:52:43

IT部門高管首席信息官

2022-12-15 19:27:33

多線程代碼性能

2010-10-12 13:57:43

GoogleWebP

2015-06-25 10:06:31

PHP 7GCC PGO

2015-06-23 15:17:57

PHPGCCPGO

2017-10-11 13:42:40

DIY裝機電腦
點贊
收藏

51CTO技術(shù)棧公眾號