天天看點

當BBR遇到Wi-Fi弱網會怎樣

Wi-Fi是名副其實的弱網,BBR在Wi-Fi環境的表現不盡人意。臨此囧,第一個想到的就是如何去優化,當嘗試了很多優化都沒有好的效果時,不優化反而是最優的。

最好的全局優化就是不優化,現實中80%+的場景都是不需要優化的,為了不到20%的場景進行全局優化得不償失,問題的關鍵不是如何全局優化,而是識别出那不到20%的部分。

Wi-Fi其弱展現在RTT抖動和高丢包率兩方面,接入終端越多就越弱。而包括BBR在内的絕大多數擁塞控制算法均以RTT和丢包作為依據來運作,是以在Wi-Fi這些擁塞控制算法很難正确發揮作用。

思考了一斷時間弱網傳輸優化,寫一點想法。

Wi-Fi是一種共享媒體半雙工網絡,當AP和多個接入終端同時發送或接收時,隻有一個可以成功,這是CSMA/CA的标準規定的。接入多個終端的Wi-Fi網絡,顯然處在擁塞狀态,但該擁塞與有線網絡的排隊擁塞不同。CSMA/CA靠争搶獲得信道,是以Wi-Fi網絡擁塞可稱作争搶擁塞。

具體看下兩種擁塞的不同:

  • 排隊擁塞:隊列在路由器中有序形成,擁塞展現在RTT的增加,隊列擁塞緩解展現在RTT的減少。以RTT的一階導數識别排隊擁塞。
  • 争搶擁塞:無隊列,完全依靠無序争搶和退避。擁塞展現在RTT均差變大,擁塞緩解展現在RTT均差變小。以RTT均差的一階導數識别争搶擁塞。

關于争搶擁塞和排隊擁塞的關系,請參考:

https://blog.csdn.net/dog250/article/details/90340322

https://blog.csdn.net/dog250/article/details/90446782

Wi-Fi的争搶擁塞特征與路由器排隊擁塞特征的差別直接影響了BBR的兩個核心行為。

首先看對BltBW測量的影響。

在有線全雙工網絡中,由于隊列是在帶寬打滿後有序生成的,是以一條流的測量帶寬是單調增加的,一直到開始排隊,帶寬不再增加,這種有序并可預測的測量結果可以直接對帶寬進行正确的預估。

然而在Wi-Fi環境,這個結論将不再成立。當大量終端接入同一個Wi-Fi時,每一個終端發送封包的争搶時延是随機的,這是導緻RTT抖動的核心原因之一,RTT的抖動導緻測量帶寬的抖動。但BBR采用10 rounds的max-filter來維持BltBW,這将對帶寬的預估造成誤判。如果是好運氣導緻資料包快速發出而獲得很高的測量帶寬,以此乘以gain獲得的預估帶寬可能會偏大,導緻更大機率的沖突。

在BBR算法中,測量帶寬表現為 d e l i v e r e d i n t e r v a l \dfrac{delivered}{interval} intervaldelivered​,而interval忽高忽低,且受到同連接配接ACK流沖突的影響(這個後面說),而BBR假設在達到BltBW前RTT是不變的,至少其均差要控制在一個很小的範圍内。BBR的Reach-full邏輯會是以受到影響,在好運氣帶來的大測量帶寬之後,連續3次的壞運氣在多終端接入的Wi-Fi場景是大機率事件,這會導緻BBR提前認為已經達到了BltBW,進而降低了帶寬使用率。

再看對RTprop測量的影響。在Wi-Fi環境,由于RTT的随機抖動,即便是進入ProbeRTT狀态保持4個inflight排空了隊列,也不一定能測得RTprop,因為并未解除Wi-Fi網絡的争搶。PRTprop是在随機的任意時刻均可測得的,這會破壞同步ProbeRTT的公平收斂機制。

BBRv2可能更适合Wi-Fi的場景,在ProbeRTT狀态僅僅對發包數量乘性減,而不是降到4個,這便可以降低沖突而減緩抖動(雖然BBRv2的這個設計初衷并非如此)。

這就是我們所看到的,BBR在Wi-Fi環境無法遵循BltBW和RTprop正交測量的原則。但無論如何,依靠大力出奇迹,BBR依然可以吊打CUBIC。

争搶式CSMA/CA十分直接地展現了統計複用,目前的BBR算法無法在數學上定義這種統計複用,這也就是為什麼那些基于理想馬爾可夫鍊,泊松到達等排隊論理論的魔改版BBR一離開實驗室效果都不好的原因。

BBR在Wi-Fi網絡還有一個有意思的場景,那就是資料封包和ACK封包的沖突與互斥。

當一個BBR流源源不斷從AP運輸資料到無線終端時,該連接配接的ACK流正從反方向流向AP,由于共享媒體,要麼資料通過,要麼ACK通過,這勢必會導緻沖突,且資料流pacing越大,ACK流pacing就會越大,沖突機率越大,這形成了一個尴尬的回報環,阻止資料流pacing進一步增加。

解決這個問題最直接的方法就是減少ACK封包的數量。

在Wi-Fi的标準中,考慮到聚合連續的小包有利于減少沖突,IEEE802.11定義了幀聚合特性,可以把多個小包聚合到一個Wi-Fi幀:

https://inet.omnetpp.org/docs/showcases/wireless/aggregation/doc/index.html

除此之外,TCP層面也可以修改接收端以減少ACK的數量:

https://cs.stanford.edu/~keithw/tack-sigcomm2020.pdf

但這些機制都不盡人意,解決一個問題的同時,引入了更多别的問題,然後引出更多解決這些問題的更多方案,越來越複雜,卻依然逃不出實驗室。這本質上是TCP自帶feedback時鐘的本質特征和Wi-Fi的共享媒體本質特征共同決定的,幾乎無解。

最後一個問題有點出乎意料。和pacing發送會緩解排隊擁塞相反,burst發送會緩解争搶擁塞。

在CSMA/CA限制下,統計意義上所有終端在沖突中的機會是均等的,是以,空閑時隙總是稀疏分布的,如果一個終端搶到了一個空閑時隙,那麼下一個時隙依然空閑的機率很大。用burst方式發送資料可以天然利用附近空閑的時隙,而不是重新進行仲裁。

關于Wi-Fi場景下burst發送的話題,可以參考下面的論文:

https://upcommons.upc.edu/bitstream/handle/2117/172208/main.pdf

來看一個具體場景,這是一個優化版BBR發送端的tcptrace局部:

當BBR遇到Wi-Fi弱網會怎樣

猜猜看接收端發生了什麼?

一個合理但不唯一的解釋就是,接收端是一個Wi-Fi網絡裡的終端:

  • 區域1:終端正常接收資料并回複ACK。
  • 區域2:終端路過一個信号死角,大概有幾百毫秒的靜默,什麼都沒有發生,箭頭所示之處有幾次激進重傳“優化”。
  • 區域3:信号恢複,一開始RTT很大,逐漸減小,這意味着AP上buffer逐漸排空,前期收到的DSACK說明那幾次重傳是沒有必要的,隻是用戶端失聯暫存資料在AP了,恢複之後,資料包從AP往外持續burst,導緻後期丢包增加。
  • 區域4:開始補包重傳,發送端采集到了很高的丢包率,但有效帶寬卻沒有增加。
  • 區域5:激活了BBR LT邏輯,無論怎樣,速度也就那樣了,這大機率是一次由于激進重傳導緻的誤判。

現在談談丢包,其實Wi-Fi很容易因為信号衰減和幹擾造成丢包,這種丢包不是排隊擁塞導緻的,它對類似CUBIC的影響極大,但對于BBR,由于它天然抗随機丢包,看上去影響并不大,但實際上并非如此。

時延的抖動會導緻發送端在計算sRTT,RTO,RACK視窗時存在一定的波動性,天然依靠RACK的BBR在随機丢包後可能會基于RACK的時間視窗激進标記lost,這會造成重傳率的增加,顯然這導緻本已遍地沖突的Wi-Fi網絡雪上加霜。另一方面,正如上面的示例,過多的标記lost可能會讓連接配接誤入LT,影響帶寬使用率。

結論是什麼?

結論就是,當檢測到存在Wi-Fi環境時,不要做任何優化,切換到原生BBR,相信Google的大佬們做的比你優秀,不要試圖在終端路過信号死角的時候激進發送,這會激起連鎖反應。“什麼都不做”很難做到不是嗎?畢竟當檢測到那麼久的靜默時,任何人總希望做點什麼,比如發送一個資料包。

我這裡倒是有一個優化截止點,在sRTT不超過MinRTT的2倍前提下,最後一個包發送完啟動tlp timeout的timer,到期後重傳UNA,後面跟一個1位元組探測,如果再過一個tlp timeout沒有任何回應,就恢複到原生的算法。背後的邏輯是,如果網絡很好,便不會如此靜默,如果真的靜默,激進發送很容易導緻buffer溢出,進而導緻一系列尴尬的連鎖反應。

下面是我在手機上測試Wi-Fi與5G網絡ping同一個intel位址23.33.80.29所獲得的RTT,肉眼就可以看出抖動,就不用mtr了:

  • 5G靜止狀态的ping結果:
    當BBR遇到Wi-Fi弱網會怎樣
    感覺還算穩定。
  • 5G進入上海西中環的一個地下隧道的結果:
    當BBR遇到Wi-Fi弱網會怎樣
    已經抖得沒法看了,且伴随丢包。這可以了解為地下隧道的信号弱導緻。
  • 5G時速60公裡時的結果:
    當BBR遇到Wi-Fi弱網會怎樣
    和靜止時差不多,至少在60公裡時速以内,5G還算穩定。
  • 家庭Wi-Fi單人接入時的結果:
    當BBR遇到Wi-Fi弱網會怎樣
    非常穩定,幾乎就和家庭有線網絡一樣,稍微差一點,但不多。
  • 兩人接入家庭Wi-Fi,老婆在刷劇,AP和接入位置隔承重牆:
    當BBR遇到Wi-Fi弱網會怎樣
    沖突導緻了RTT抖動,隻能這麼了解,另外,有朋友說我的AP該換了,不過這不是我買的,這是電信送的。
  • 早高峰地鐵行駛中的5G測試結果:
    當BBR遇到Wi-Fi弱網會怎樣
    和在高架橋時速60公裡結果差不多,穩當。
  • 早高峰地鐵進站停站5G測試結果:
    當BBR遇到Wi-Fi弱網會怎樣
    沒法看了,站台上接入終端太多,移動性大,可能會造成影響,對4G/5G不了解,不分析。
  • 公司Wi-Fi百人接入時測試結果:
    當BBR遇到Wi-Fi弱網會怎樣
    抖動很厲害,看均差即可。
  • 公司Wi-Fi百人接入時AP下一跳路由器上測試結果:
    當BBR遇到Wi-Fi弱網會怎樣
    與千百人的Wi-Fi同一條路徑,就隔了一個Wi-Fi網絡的子路徑,相當穩定。

上面這一系列測試,隻在确認Wi-Fi所造成的RTT抖動的劇烈程度,依托這些資料來看,BBR很多操作的結論便無法成立。

結果是,BBR在有線可控的網絡中确實是以正交測量BltBW和RTprop來獲得高帶寬使用率進而輕松擊敗CUBIC,然而在Wi-Fi網絡,似乎隻能依靠大力出奇迹來取勝,但也并非每次都能成功,很多時候也會輸得很慘,經常會有人說,怎麼BBR還沒有CUBIC好,Wi-Fi可能就是原因。

Wi-Fi自始至終就沒有宣稱過自己是為性能而生,Wi-Fi隻是一個近場通信的媒介。想想看同軸時期的以太網,是不是和如今的Wi-Fi一樣,再看看現在的以太網,我們期待Wi-Fi在未來某一天,開始追求性能。

更多Wi-Fi性能分析的文章,參考:

http://www.h3c.com/cn/d_201109/724573_97665_0.htm

http://www.h3c.com/cn/d_201006/677615_97665_0.htm

至于LTE算不算弱網,我對此了解不多,不多分析。

我周二的時候發了一則朋友圈吐槽:

WiFi為啥就是不實作真正全雙工,非要兩個方向共享媒體,信道仲裁。這對TCP這種feedback協定很不友好啊,而且對quic也不友好。

答案可能很簡單,就是Wi-Fi簡單成本低,無論在信道品質,通信距離,系統負載能力,功耗上,Wi-Fi和LTE并非瞄準同一個目标而設計的,如果把Wi-Fi修成LTE了,那它還是Wi-Fi嗎?了解下WiMax?

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