in-flight 要維持在 bdp 附近嗎

試圖在 bbr 和 aimd 之間保持公平是徒勞的,因為它們沒有共識。bbr 認為 in-flight 超過 bdp 是擁塞,而 aimd 認為 buffer 溢出才擁塞,兼顧彼此,就是 bbr3,aimd 不會往左,bbr 就往右。

vegas 同理,vegas 流認為超過 bdp 的報文量大于 β 就擁塞,而 β 并沒多大,這讓 vegas 更難與 aimd 共存。

但 vegas 還有更有趣的事,每條 vegas 流都試圖維持 buffer 中的報文量的下界 α,α 是個很小的數。但 N * α > buffer_size 可與 α > diff 同時成立,buffer 已溢出,vegas 卻還試圖 cwnd++。 bbr 也存在該問題,雖然 bbr 為單流設置了 in-flight 上界 2 * bdp,但 N * 2 * bdp > buffer_size 和 cwnd < 2 * bdp 亦可同時滿足。

無論 bbr 還是 vegas 均采用 rack 丟包探測,值得一提的事,rack 早在 1994 年 vegas 論文中就被提出,只是 linux 沒有實現,讓人誤認為 rack 是晚近才由 google 提出。

我一向抱怨 bbr 狀態機太稀碎,但它也沒大錯,雖然 probe 會擠占 buffer,但 probertt 后 Σbw_i == C && queue_len == 0,卻也兌現了承諾,但值得注意,probertt 是同步的,眾流在同時進入 probebw 后僅維持自己的 bwi,卻釋放了所有 buffer,除非 N * 4 - bdp > buffer_size,請注意,如果 vegas 的 β 取 3,N 巨大且總 bdp 不太大時,bbr 更易爆 buffer。

說這個的目的是,雖然 bbr 和 vegas 均承諾把 in-flight 維持在 bdp or bdp 附近,但它們在 N 很大時卻沒有兌現能力,相反 aimd 就不同,即使 N 很大,md 行為卻同步將 in-flight 降到遠小于 bdp 處,而 bbr/vegas 沒有這類自適應的 decrease 行為。

問題的核心在于,bbr/vegas 測得的 bdp 中的 b 更全局,它們依靠 “越小的流加速比越大” 來公平收斂,而加速比必須在 buffer 中獲得(簡單等式:buffer 占比 = 帶寬占比),反之,aimd 的天然公平性意味著對每條流而言,bdp 中的 b 都是自己的,因為異步流從概率上講,buffer_size 為 B,一條流在 in-flight 為 B 會丟包 md,N 條流就是 B / N 會丟包 md,自適應性在于除以 N,與 bbr/vegas 的 α * N 和 4 * N 相比如何。

這就是我那個 E_best 余量或 pid 逼近 E_best 試圖解決的問題,為了始終在 buffer 中保存一定的報文(借鑒于 vegas)以自適應資源騰挪,又不至于 N * 余量 > buffer_size,那么該余量一定要攜帶負反饋縮放,N 雖對單流不可見,但可用 minrtt / rtt 間接感知:

  • 對所有流共同作用而言,minrtt / rtt 越小,buffer 被占越多,潛在流數增多,余量必須收縮;
  • 對共存流相互作用而言,bw 越大,侵占傾向越大,越需要為它流騰挪 buffer,余量必須收縮;

minrtt / rtt 實則就是 cwnd 縮放比例,這很容易理解。設瓶頸帶寬為 C,當擁塞臨界點到達時,Σcwndi/rtti = C,而擁塞控制的目標是將 in-flight 總量收縮到 bdp,即 C * minrtt,因此目標狀態應該是 Σcwndi/minrtti = C,而共享 buffer 中 rtt 想等,從 Σcwndi/rtti = C 到 Σcwndi/minrtti = C,需要乘以一個系數 β = 1 / (minrtt/rtt) = rtt / minrtt。

既然 cwnd 如此縮放 in-flight 到 bdp,那任何比較系數都應該如此縮放,包括 vegas 系數,bbr probertt in-flight = 4,以及 E_best in-flight 余量。

如下可對 vegas 的 α,β 行為負反饋縮放。設 g(x) 為與 minrtt / rtt 正相關的參數增益函數,值域在 (0, 1),vegas 則變為 g * α < diff < g * β。同理,對 bbr probertt 狀態的 in–flight = 4 亦可做 in–flight = g * 4 來縮放。然而在這種情況下,更細粒度的 cwnd 控量就是必須,當 N 很大,g 接近 0,cwnd 粒度需要切割到等同量級,cwnd += 1 顯得過大,cwnd += 0.08 可能更合適。

最后,這篇短文不牽扯 dcn,不要在 dcn 部署基于時延的算法:

  • dcn 時延小,測量精度不足以過濾抖動(g 家 swift 緣由);
  • dcn buffer 小,N 太大更易爆 buffer;
  • dcn 短流多,負反饋難以生效。

浙江溫州皮鞋濕,下雨進水不會胖。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/43640.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/43640.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/43640.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

自定義@AnonymousAccess注解

一.目的&#xff1a; 自定義AnonymousAccess注解&#xff0c;可以直接在controller上添加該注解使請求繞過權限驗證進行匿名訪問&#xff0c;便于快速調用調試以及部分不需要進行安全驗證的接口。而不是每次都需要去SecurityConfig文件中進行修改。 二.流程&#xff1a; 三.實…

通用后臺管理(二)——項目搭建

目錄 前言 一、安裝vue-cli依賴 1、使用yarn下載vue-cli 2、使用npm下載 3、檢查一下是否下載成功 二、創建項目 1、創建項目&#xff0c;my-app是項目名稱 2、 這里選擇vue 2&#xff0c;藍色表示選中的。 3、啟動項目 三、下載項目依賴 四、配置項目 1、修改esli…

VS2019_新建窗體應用文件SOP

文章目錄 1. 打開VS2. 創建新項目3. 選擇Windows窗體應用4. 起名&#xff0c;選位置&#xff0c;框架版本選擇4.5及之后&#xff0c;這里選的4.85. 新建完成 1. 打開VS 2. 創建新項目 3. 選擇Windows窗體應用 注意要選.NET的 4. 起名&#xff0c;選位置&#xff0c;框架版本…

ps aux命令詳解

ps aux 是在 Unix 和 Linux 系統中常用的命令&#xff0c;用于顯示當前系統上運行的所有進程的信息。它結合了多個選項來提供詳細的進程列表。以下是這個命令的詳細解釋&#xff1a; 解釋 ps aux 命令 ps&#xff1a;這是顯示當前系統進程的基本命令。a&#xff1a;顯示與終端…

原來Kimi不是不作為,而是在準備大招!

月之暗面Kimi 作為一款我每天都在使用的AI智能助手&#xff0c;是真正的幫助我解決了不少工作及日常創作的一些事情。 它的表現能力也是毋庸置疑&#xff0c;不論是業內還是普通人&#xff0c;10個人當中可能就有9個人在使用Kimi。 而昨天&#xff08;7月8日&#xff09;Kimi…

Civil3D 2025:工程設計的智慧之友

初識Civil3D 2025 當我第一次打開Civil3D 2025時&#xff0c;仿佛置身于湘西的山水之間&#xff0c;那種熟悉而又新奇的感覺撲面而來。Civil3D 2025不僅僅是一款軟件&#xff0c;它更像是一位老友&#xff0c;帶著溫暖和智慧&#xff0c;陪伴我走過每一個設計的日夜。 功能豐…

侯捷C++面向對象高級編程(上)-9-擴展補充:類模板、函數模板及其他

1.static 2.把 ctors 放在 private 區 3.cout 4.class template、類模板 5.function template、函數模板 6.namespace

DDR3 SO-DIMM 內存條硬件總結(二)

上一節我們大概了解了下DDR3的大概使用情況&#xff0c;下來我們再順藤摸瓜再深入學習下ddr3的使用&#xff0c;我們從下面這張內存條開始&#xff1a; 我們看到第二行2GB 1RX8 PC3-10600S-9-11-B2 具體含義上一節已經講過了&#xff0c;我們深挖下1R*8&#xff0c;他的含義是…

資料分析筆記整理

提升技巧多做題、少動筆、多分析 資料分析認識 國考一般20題(24~28分鐘) 統計材料的類型包括單純的文字、表格、圖形以及由這些元素組成的復合類型材料 文字性材料:(30~60秒) 多段落型文字材料(時間、關鍵詞、結構) 孤立段落文字材料(時間、關鍵詞、標點[。;]) 表…

Java語言程序設計——篇二(2)

Java語言基礎 運算符與表達式運算符1、算術運算符2、關系運算符3、邏輯運算符&#xff08; &&、||、 !、&、| 、^&#xff09;4、位運算符&#xff08; >>、<<、>>>、&、|、^、~&#xff09;5、賦值運算符6、條件運算符7、字符串運算符8、…

數字化時代下,財務共享數據分析建設之路

隨著人工智能、云計算、大數據、區塊鏈等技術&#xff0c;以及衍生出的各種產品的大發展&#xff0c;使得數字化發展的速度再一次加快&#xff0c;也讓數字經濟和數字化轉型得到了更多人的關注和認可。 在傳統經濟增長逐漸放緩&#xff0c;市場競爭愈發激烈的局面下&#xff0…

GOJS去除水印

GOJS gojs 去除水印 **查找go.js庫搜索下面這段文本 String.fromCharCode(a.charCodeAt(g)^b[(b[c]b[d])%256]) 加入這段文本 if(f.indexOf(GoJS 2.1 evaluation)>-1|| f.indexOf(© 1998-2021 Northwoods Software)>-1|| f.indexOf(Not for distribution or produ…

splice方法的使用#Vue3

splice方法的使用 splice(index,len,item)是vue中對數組進行操作的方法之一&#xff0c;可以用來刪除&#xff0c;更新&#xff0c;和增加數組內容 參數: index:數組下標 len&#xff1a;為1或0 item:更新或增加的內容 使用方法&#xff1a; 刪除&#xff0c;當參數形式為spli…

Linux內核網絡性能問題的追蹤(工具篇)

在現代計算環境中&#xff0c;網絡性能對于系統的整體性能至關重要。網絡瓶頸不僅會影響數據傳輸速度&#xff0c;還會影響應用程序的響應時間&#xff0c;最終影響用戶體驗。為了有效地解決網絡性能問題&#xff0c;了解和使用各種追蹤工具至關重要。另外一方面&#xff0c;造…

MySQL批量插入數據的幾種方式

最近在項目中遇到了批量插入數據的一些問題&#xff0c;一般圖省事都是利用mybatis或mybatis-plus的saveBatch方法&#xff0c;但這次因為數據過多&#xff0c;出現了一系列的問題&#xff0c;只能手動處理&#xff0c;接下來分享下對于數據量比較大的批量插入&#xff0c;可能…

python的魔法方法

python類中的self是什么&#xff1f; 對象的方法都會有一個self參數&#xff0c;類比于c&#xff0c;self就相當于c的this指針。 由一個類可以生成無數個對象&#xff0c;當一個對象的方法被調用時&#xff0c;對象會講自身的引用作為第一個參數傳給該方法&#xff0c;那么pyt…

CTF-PWN-kernel-棧溢出(retuser rop pt_regs ret2dir)

文章目錄 參考qwb2018 core檢查逆向調試打包上傳測試腳本retuserkernel ropinit_credcommit_creds( prepare_kernel_cred(0) )開啟KPTI利用swapgs_restore_regs_and_return_to_usermode開啟KPTI利用SIGSEGVrop設置CR3寄存器再按照沒有KPTI返回 kernel rop ret2userpt_regs 構造…

2024年浙江省高考分數一分一段數據可視化

下圖根據 2024 年浙江高考一分一段表繪制&#xff0c;可以看到&#xff0c;競爭最激烈的分數區間在620分到480分之間。 不過&#xff0c;浙江是考兩次取最大&#xff0c;不是很有代表性。看看湖北的數據&#xff0c;580分到400分的區段都很卷。另外&#xff0c;從這個圖也可以…

RTOS系統 -- FreeRTOS之任務調度

FreeRTOS中的任務調度 背景介紹 FreeRTOS是一種輕量級的實時操作系統&#xff0c;被廣泛應用于嵌入式系統中。它提供了多任務管理功能&#xff0c;包括任務創建、任務調度和任務切換。FreeRTOS的調度器根據任務的優先級和狀態自動調度任務&#xff0c;確保系統資源的有效利用…

獨立站優勢及吸引力分析

隨著全球化貿易的不斷深入&#xff0c;越來越多的廠商開始尋求更廣闊的市場和更高效的銷售渠道。獨立站作為企業自有的電商網站&#xff0c;正逐漸成為海外貿易的新寵。本文將分析獨立站的優勢及其對廠商的吸引力&#xff0c;鼓勵廠商以建立獨立站的方式出海。 一、獨立站的定義…