精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

字節跳動在令牌桶限速器優化上的實踐

OSC開源社區 ? 來源:字節跳動SYS Tech ? 2023-03-31 10:05 ? 次閱讀

限速器(rate limiter)是一個非常基礎的網絡包處理功能,被廣泛應用于各類網元設備,在流量調度、網絡安全等領域發揮著重要作用。常見的限速器的實現方式基于令牌桶(token bucket),盡管令牌桶的原理已經被人熟知,在具體實踐中,我們也發現了一些挑戰和共性問題。本文總結了近兩年字節跳動系統與技術工程團隊(簡稱 STE 團隊)在限速器優化方面的一些探索,將一些經驗和教訓總結出來,以饗讀者。

令牌桶限速器的基本原理

相信每個寫網絡包處理的工程師都寫過基本的令牌桶限速器。令牌桶是一個形象的描述,既可以想象有一個桶可以容納一定量的令牌(token),每放行一個數據包便消耗一定量的令牌,數據包的放行與否取決于令牌桶中的令牌個數。

d5e11bea-cf06-11ed-bfe3-dac502259ad0.png

圖1 令牌桶圖示

pYYBAGQmQGGAQK8VAAN3J_hRskU606.jpg

在具體實踐中,令牌桶具有實現簡單、效率高等特點,在很多場景下,提到限速器,基本是令牌桶的代名詞。

存在的問題

在具體工程時間中,我們遇到了以下三個問題:

1. 精度問題

實際工程實踐中,時間計量單位其實是受限于系統,比如時間戳可能是以微秒(us)為單位,而每次計算的時間差可能只有 1~2us。那么一個 PPS=300K 的限速器,可能一次計算,所產生的令牌是 0.3 個,容易被整數運算忽略。最終的結果則是,實際限制為 300K/s,最后效果是只有 250Kpps 流量放行。精度過低,效果不理想。

這種解決方式也比較簡單,可以讓一個數據包消耗的令牌量不是 1個,而是 1000個。這樣,即使 1us,令牌桶產生的令牌數是 300個,而非 0.3個,這樣便保證了精度。但此時又引入了新的問題,因為令牌數擴大了 1000 倍,此時需要考慮令牌桶的深度是否會溢出 32bit。一旦溢出,則會出現其他詭異的問題。

2. 級聯補償問題

d607fe0e-cf06-11ed-bfe3-dac502259ad0.png 圖2 限速器級聯補償

我們在實踐中發現,多個限速器級聯的時候,需要補償令牌。比如對于限速器 A,這個包是放行,消耗了 A 的令牌。對于限速器 B,這個包是丟棄,因為 B 沒令牌了。此時包被丟了。那么此時 A 的令牌就白白消耗了,即消耗了 token,然后包還是丟了。如果想達到一個準確的限速效果,限速器A的令牌應該被補償。如圖 2 所示那樣。

級聯補償使得多個限速器互相耦合,在代碼編寫上也比較麻煩。我們在實際中發現,如果限速器 A 和限速器 B 的限速值接近,并且都有丟包,那么缺乏級聯補償會對精度有嚴重影響。但如果限速值差的很遠,則對精度的影響沒有那么大。

3. TCP對丟包敏感問題

令牌桶是沒有緩存的,一旦速率超過限定值,則會出現丟包。而 TCP 協議則對丟包非常敏感,一旦出現丟包,TCP 的對速率的調整比較激進。令牌桶這一特性使得他在應用于 TCP 這種流量時,經常會導致限制 100Mbps,實際上最多只能跑到 80Mbps,因為不斷的丟包導致 TCP 不斷地降低發送窗口。

在 vSwitch 的使用時,BPS (Bits Per Second)限速對 TCP 的損耗尤其大,這是因為,一般虛擬網卡都開啟了 TSO(TCP Segmentation Offload)優化,開啟 TSO 情況下,主機向外發送的 TCP 包都很大,一個包有可能是 64K 字節,在這么大的情況下,隨便丟若干個包,就對 TCP 的速率影響非常明顯了。

第一次改進:端口借貸反壓限速器

我們在實踐中發現,級聯補償反饋問題雖然存在但不是非常突出,原因是一般級聯的限速器的限速值差距很大,比如單網卡的速率和整機速率,一般差距較大,不容易出現精度問題。最嚴重的問題是 TCP 丟包敏感導致的限速帶寬達不到,影響用戶體驗。由圖3所示,隨著 TCP RTT 的增加,實際可以達到的帶寬會明顯下降。

d61d629e-cf06-11ed-bfe3-dac502259ad0.png

圖3 流量通過1Gbps限速器之后,實際獲得速率

反壓(backpressure),就是針對 TCP 對丟包敏感這一問題進行的改進。我們在第一次設計的時候,其實針對的是一個特定的場景。既虛機的虛擬網卡進行限速。而且我們的限速器正好是每個網卡有一個特定的限速器。

每個虛擬網卡都有若干隊列,vSwitch 會持續的輪詢這些隊列拿到數據包發出。這些隊列本質上其實就是包的緩存區。反壓,其實就是停止或者延緩對這些隊列的輪詢發包,讓數據包在隊列上堆積,而達到將壓力反饋到 Guest Kernel 的目的,這樣 Guest Kernel 的 TCP 棧就會感知到擁塞,調整發送的節奏。

d633ddf8-cf06-11ed-bfe3-dac502259ad0.png

圖4 反壓限速器

當時我們設計反壓限速器的時候,有一個限制影響了最后的實現:

虛機的虛擬網卡沒有提供 Peek 功能,即 vSwitch 只是 Peek 數據包,而非真正將數據包從隊列中拿出。這一個限制導致了我們利用了“借貸”的思想。既設置一個開始輪詢的準許時間點,如果當前時間超過了準許時間點,那么將隊列中的數據包一股腦全部發出,不考慮令牌是否足夠,如果令牌足夠則沒有問題,但是當令牌不夠了,那么就考慮向未來借貸一筆令牌,反向計算出一個未來的時間戳,那么在這個時間戳之前,vSwitch 停止輪詢虛擬網卡。

借貸方法的提出,一開始只是為了性能考慮,避免好不容易將數據包從虛機隊列拷貝出來,卻發現令牌不夠又只能丟棄。既然不想丟棄,索性就向未來借貸一筆令牌都發出去。

如今回過頭來看這個設計,和 Peek 相比,其實有好有壞:

1)每次借貸的令牌量,不可控。這會導致公平性問題。大象流會不斷的獲取借貸資格,而小流則會趨向于餓死,在限速器競爭中,如果一方取得了優勢,優勢方容易持續獲得優勢。

2)簡單的時間戳比較,開銷比 peek 低。如果能夠 peek 數據包,就不會有借貸的機制,也就沒有停止輪詢的可能,而是每次都會去虛擬隊列里查看,反而開銷有點大。

3)反過來,有 peek 功能的話,也可以先看看隊列里積壓的數據包,可以等待隊列積累了一定量數據包之后,計算將下一次 Batch 個數據包發出的時間戳,在此之前都停止輪詢。這對增加 batch 提升性能反而有好處。

反壓限速器因為反壓的是虛機的網卡隊列,只能對虛機往外發數據包有限制,而無法限制虛機的收方向的流量。這是因為我們無法反壓物理網卡的數據包,物理網卡的數據包可能發往不同的虛擬網卡,每個網卡的限速值是不一樣的,我們無法計算出一個確切的時間點,在這個時間點之前可以不用輪詢數據包。況且,物理網卡隊列滿了之后,只會丟包,而虛機網卡隊列滿了之后,可以反壓 TCP 協議棧,兩者效果是不一樣的。

因此在入向流量的限制上,我們只是延續了準許時間戳的思想。如果當前時間超過準許時間,就放行所有數據包,如果沒有,則丟棄所有數據包。

第二次改進:Carousel限速器

Carousel 限速器是 Google 在 SIGCOMM 17' 上的論文提出的一種限速器算法[2],實際上想法也很簡單,即給每個數據包計算一個發出的時間戳,如果當前時間戳小于發出時間戳,則緩存在一個時間輪里,即不是丟包,而是將數據包延遲發送。

d649ad22-cf06-11ed-bfe3-dac502259ad0.png

圖5 Carousel限速器

我們基于這個算法基本原理,在 OVS-DPDK 實現了一個類似限速器,這中間有很多細節決定了算法的參數,比如一次輪詢的時間粒度是 1us 還是 10us ?實際使用的限速器的速率區間在什么范圍?是 300Kpps 還是 3Mpps?這些都直接決定了算法的參數設置,諸多細節就不展開說明了。

Carousel 最大的一個好處是引入了緩存。時間輪的本質就是一個緩存,這個對 TCP 流量有明顯的好處,同時,時間輪也解決了虛機入向流量的無法反壓的問題,使得所有的流量都能統一在一個時間輪下。第三個好處,可能有點意想不到,就是它一定程度的消除了級聯補償的必要性,因為數據包不在丟包,而是延遲發送。在沒有丟包的情況下,不需要級聯補償。

下圖是在限速 10Gbps 下,通過 iperf 工具,測試 100s 情況下,虛機出入向,在使用老的反壓限速器和新的 Carousel 限速器的對比效果。

橫軸是時間(s),豎軸是吞吐(Gbps),即每秒 iperf 報告出的當前的吞吐性能。可以看到入向流量增加了 500Mbps。更靠近 10Gbps。

d65b60a8-cf06-11ed-bfe3-dac502259ad0.png

出向吞吐性能,可以看出 Carousel 限速器更加穩定:

d671e850-cf06-11ed-bfe3-dac502259ad0.png

這些改進的源頭,都來自于緩存對 TCP 流量的平滑作用。

未來的改進和小結

1. 進一步改進

基于借貸機制的反壓限速,當限速值較大時,因借貸超發的數據包對整個限速抖動影響是有限的。比如限速 1G,在某個時刻超發幾個包,對限速的抖動影響是比較小的。但是如果限速值很小,比如小到 5Mbps,那么超發幾個數據包的影響就會比較大。此時,通過時間戳控制虛機端口的輪詢,會帶來 ON-OFF 效應,既在虛機看來,出向流量的路徑上,好像有一個閘門,一會打開,一會關閉。

但這只是在虛機發送端視角看到的情況,接收端因為有時間輪的調節,速率會比較穩定。為在發送端帶來比較穩定的體驗,需要將反壓的效果更加細化,既降低超發的幾率。

此外,基于端口粒度的限速可以通過控制端口的輪詢來實現,但是對于粒度小于端口的限速,則不好實現反壓。為了實現更細粒度的反壓,Google 在論文 PicNIC[3] 中,在Carousel 之上,利用 virtio 支持 OOO completion (亂序完成) 的特點,實現了更細粒度的反壓,這些都為進一步優化限速器提供了思路。

2. 主動限速(基于ECN或者修改TCP window選項)

我們可以在 vSwitch 中對 TCP 的 Window 窗口進行跟蹤修改,協商一個小窗口進行的方式,獲得更平穩的 TCP 吞吐。同時ECN標記也可以在 vSwitch 中進行感知,通過直接或者間接的方式反饋到虛機內部,或者影響 vSwitch 的輪詢頻率。

3. 鎖機制改進

以上所有的限速器改進均是針對網絡方面,系統方面由于多核存在,而限速器的粒度經常跨越線程,如何設計一個無鎖的限速器也是一個值得探索的方向。

4. 小結

從限速器的改進歷史中可以看出,當前的算法已經越來越和實際場景相關。算法不再只是一個獨立的組件,而越來越和實際的運行系統和產品特性緊密耦合。







審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • PPS
    PPS
    +關注

    關注

    0

    文章

    27

    瀏覽量

    10538
  • RTT
    RTT
    +關注

    關注

    0

    文章

    65

    瀏覽量

    17089
  • 虛擬機
    +關注

    關注

    1

    文章

    908

    瀏覽量

    28109
  • TCP通信
    +關注

    關注

    0

    文章

    146

    瀏覽量

    4217

原文標題:字節跳動在限速器優化上的實踐探索

文章出處:【微信號:OSC開源社區,微信公眾號:OSC開源社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    字節跳動最新回應:正在探索AI芯片領域

    3月16日消息,字節跳動正在自研云端AI芯片和Arm服務芯片。對此,字節跳動方面向媒體回應稱,是
    的頭像 發表于 03-16 14:53 ?5208次閱讀

    一種基于多令牌的數據風暴抑制單元

    一種基于多令牌的數據風暴抑制單元_馬徐瀚
    發表于 01-07 20:49 ?0次下載

    字節跳動全面屏電子設備專利曝光 有望應用于字節跳動旗下堅果手機

    2月28日消息,天眼查專利數據顯示,字節跳動旗下北京字節跳動網絡技術有限公司近日新增多個專利授權,其中包括“一種全面屏電子設備”的專利。
    的頭像 發表于 02-28 14:30 ?3026次閱讀
    <b class='flag-5'>字節</b><b class='flag-5'>跳動</b>全面屏電子設備專利曝光 有望應用于<b class='flag-5'>字節</b><b class='flag-5'>跳動</b>旗下堅果手機

    字節跳動否認微軟求購TikTok全球業務_微軟和字節跳動正探索初步提案

    此前微軟公司一份聲明中確認,正就收購TikTok美國與字節跳動開展談判,并不晚于9月15日完成。根據微軟的聲明,微軟和字節跳動正在探索一項
    的頭像 發表于 08-07 09:22 ?2632次閱讀

    字節跳動正考慮推動抖音業務單獨香港上市

    投資界10月26日消息,媒體爆料,字節跳動正考慮推動抖音業務單獨香港上市。知情人士稱,高盛等多家投行曾與字節跳動溝通承銷事宜。 對此,
    的頭像 發表于 10-26 17:30 ?2175次閱讀

    字節跳動的芯片棋局

    從此前市場中公開的消息來看,字節跳動正在積極組建AI芯片團隊,目前已經各大招聘平臺上有不少芯片相關職位。而從知情人士處的消息中顯示,則是明確了字節
    的頭像 發表于 05-17 14:02 ?3656次閱讀

    字節跳動 收購元宇宙公司

    元宇宙可以理解為超越現實的虛擬宇宙,近日字節跳動公司CEO張一鳴將投入15億美元收購VR軟硬件研發制造商“Pico”,這一投資標志著字節跳動
    的頭像 發表于 11-08 15:54 ?3730次閱讀

    字節跳動基于Iceberg的海量特征存儲實踐

    字節跳動基于Iceberg的海量特征存儲實踐
    的頭像 發表于 12-01 09:37 ?939次閱讀

    字節跳動旗下火山引擎自研的視頻編解碼芯片已出片

    跳動自研芯片將為字節跳動大規模視頻推薦服務專用場景定制硬件優化,如視頻編解碼、云端推理加速等,以期提升性能,降低成本。這款字節
    的頭像 發表于 08-23 18:56 ?2136次閱讀

    字節跳動旗下PICO近半員工離職 但字節跳動表示會長期投入XR

    字節跳動旗下PICO近半員工離職 但字節跳動表示會長期投入XR 有媒體報道字節跳動旗下PICO
    的頭像 發表于 10-24 17:38 ?1693次閱讀

    字節跳動「突襲」交換機!

    因為字節跳動自研交換機,早在2019年,就開始悄悄布局了。
    的頭像 發表于 02-26 15:34 ?1345次閱讀
    <b class='flag-5'>字節</b><b class='flag-5'>跳動</b>「突襲」交換機!

    字節跳動否認AI手機研發項目

    近日,有市場傳聞稱字節跳動已在兩個月前秘密啟動了AI手機研發項目,引發業界廣泛關注。然而,字節跳動相關人士迅速對此作出回應,表示這些消息并不屬實。
    的頭像 發表于 06-12 15:54 ?564次閱讀

    字節跳動回應要進軍手機市場

    近日,關于字節跳動秘密啟動AI手機研發項目的傳聞引起了廣泛關注。然而,字節跳動相關人士12日對此進行了澄清,表示這一消息并不屬實。
    的頭像 發表于 06-13 11:48 ?718次閱讀

    字節跳動否認與臺積電合作AI芯片

    近日,關于字節跳動計劃與臺積電攜手開發AI芯片的報道引發關注。對此,字節跳動迅速作出回應,明確表示該報道不實。字節方面透露,公司確實在芯片領
    的頭像 發表于 09-19 16:04 ?230次閱讀

    字節跳動計劃在歐洲設立AI研發中心

    字節跳動正積極布局歐洲市場,計劃在該地區設立AI研發中心。據知情人士透露,字節跳動已開始歐洲尋找LLM(Large Language Mo
    的頭像 發表于 10-28 11:04 ?526次閱讀