秒懂確定性網(wǎng)絡(luò)之玩轉(zhuǎn)隊列(下)
上一節(jié)介紹了隊列的演進(秒懂確定性網(wǎng)絡(luò)之玩轉(zhuǎn)隊列(中)),本節(jié)分析隊列的確定性增強,從令牌桶機制講起,詳解基于信用的整形(CBS)、時間感知整形(TAS)、循環(huán)排隊轉(zhuǎn)發(fā)(CQF)、幀搶占(FP)四種機制。本文不僅介紹這些機制“是什么”,更力求分析清楚“為什么這樣設(shè)計這個機制”、和“怎么樣使用該機制”。
隊列的確定性增強
隊列調(diào)度分為入隊、調(diào)度、出隊三個過程,隊列的確定性增強主要作用于出隊。即調(diào)度依然可以選擇嚴(yán)格優(yōu)先級調(diào)度,在流量出隊列進行鏈路傳輸時加以限制,因此也可以叫“整形”。確定性增強并不能“隨心所欲”,而是只針對特定的場景有效,且需要對流量盡量已知。因此當(dāng)我們了解一個新的調(diào)度機制時,最重要的切入點是流量的特征(流分布、流速率、包大小、包數(shù)量、周期/非周期)和流量的需求(帶寬、時延、抖動、丟包率)。
令牌桶
令牌桶就是在交換機的出端口放一個“桶”,然后往桶里以一定的速率放令牌,令牌(Token)是一種單位為字節(jié)的虛擬數(shù)據(jù)包。
舉個例子,假設(shè)有紅綠兩條流經(jīng)過同一個10G大小的端口,如果綠流的大小直接是10Gbps,紅流就沒了傳輸空間,導(dǎo)致其大量丟包;為了使他倆和睦相處,必須給他們定規(guī)矩,即速率限制、或者叫帶寬分配。假設(shè)綠流被分配的帶寬是8Gbps(即1GBps),那么只需要每隔1納秒往令牌桶里放1個令牌(理論情況),或者每隔1毫秒往令牌桶里放10^6個令牌(考慮設(shè)備處理能力),拿到令牌的數(shù)據(jù)包被允許發(fā)送,沒拿到的直接丟棄或者存儲等有令牌時再發(fā)送,就能在帶寬層面保證流量調(diào)度的確定性。
令牌桶只能做到秒級的時延保障粒度,即最壞情況下的時延是1s。對于網(wǎng)頁類互聯(lián)網(wǎng)流量,幾百毫秒的延遲并不影響用戶使用,因此傳統(tǒng)的互聯(lián)網(wǎng)服務(wù)質(zhì)量保障主要追求路由優(yōu)化和帶寬分配,盡量選擇輕載不擁塞的路徑、并為流量分配盡量富余的帶寬,即可降低丟包和重傳。
基于信用的整形
在保證帶寬的基礎(chǔ)上,能不能進一步降低時延,甚至保證最壞時延有界?比如音視頻流量,其具有持續(xù)發(fā)送、體積大的特點,又要求時延抖動不能太大,以避免語音中斷和畫面卡頓。為解決音視頻流量的傳輸服務(wù)質(zhì)量保障問題,基于信用的整形(Credit Based Shaper, CBS)被提出。
CBS在出端口的隊列放一個整形器,整形器包含一個信用計算組件。
該整形器遵循如下五條規(guī)則:
1)如果隊列里沒有數(shù)據(jù)包,則將隊列的信用置為0。
2)如果隊列的信用非負(fù),則隊列里的數(shù)據(jù)包允許被傳輸,否則不允許傳輸。
3)當(dāng)隊列里有至少一個數(shù)據(jù)包處于等待,則隊列的信用以idleSlope的速率增加,idleSlope是空閑速率,單位是bps。
4)當(dāng)隊列里的包被傳輸時,隊列的信用以sendSlope的速率減少,sendSlope是發(fā)送速率,單位也是bps。
5)一般情況下,發(fā)送速率等于空閑速率減去鏈路帶寬,比如空閑速率是200Mbps,帶寬1Gbps,則發(fā)送速率為-800Mbps。
為什么要設(shè)計這些規(guī)則?因為CBS的核心思想是流量互相“謙讓”。令牌桶直接為每條流分配一定數(shù)值的令牌,當(dāng)紅綠兩條同等優(yōu)先級的流到達(dá)時,傳輸?shù)南群蠛驼加玫膫鬏敃r間是不確定的。而CBS初始的信用是0,流量必須要“等一等”信用值才會增加,增加后才能傳輸,而傳輸導(dǎo)致信用逐漸下降,因此一條流傳一小會后信用為負(fù)停止傳輸,又輪到另一條流傳輸。
以下圖為例,音視頻流f1在入隊時有黃色干擾流正在傳輸,f1等待傳輸且信用值不斷增加;T0時刻干擾流傳輸完,f1開始傳輸且不斷消耗信用,當(dāng)綠色、藍(lán)色兩個包傳輸后T1時刻信用為負(fù),第三個粉色的包無法傳輸,只能存儲等待,直到T2時刻信用恢復(fù)到0,粉色的包被允許傳輸。最終的結(jié)果是綠、藍(lán)、粉三個數(shù)據(jù)包不再是連續(xù)傳輸,而是間隔傳輸。下圖需注意的是橫軸是時間線,圖中數(shù)據(jù)包的寬度不是數(shù)據(jù)包的大小;在隊列深度中,寬度代表的是數(shù)據(jù)包的到達(dá)時間和傳輸開始時間,在當(dāng)前傳輸?shù)臄?shù)據(jù)中,寬度代表的是傳輸開始時間和傳輸完成時間。
CBS的關(guān)鍵問題是如何配置idleSlope空閑速率這個參數(shù),idleSlope是我們想保留的帶寬,idleSlope越大,流量越容易發(fā)送,該參數(shù)需要通過一系列的約束求解得到。CBS典型使用方法是在優(yōu)先級隊列6(Q6)和優(yōu)先級隊列5(Q5)后面放置信用整形器,并將Q6的流量設(shè)置為A類流量,傳輸?shù)某掷m(xù)時間(一跳時延)為125us,將Q5的流量設(shè)置為B類流量,一跳時延為250us。通過確定的一跳時延大小可以倒推得到空閑速率的配置參數(shù)值。
時間感知整形
在工業(yè)網(wǎng)絡(luò)中還有一類控制命令流量對時延抖動要求極高,比如通過主機械臂操作從機械臂的控制命令流量,其每間隔1毫秒發(fā)送一個100字節(jié)大小的數(shù)據(jù)包,且要求端到端時延小于1毫秒。對于這種周期性的時間敏感的小流,CBS無能為力,因此時間感知整形(Time-Aware Shpaer, TAS)被提出。
TAS在每個出隊列的后面放置一個“門”,當(dāng)門處于打開(open,o)狀態(tài)時,數(shù)據(jù)包被允許傳輸,當(dāng)門處于關(guān)閉(close,c)狀態(tài)時,數(shù)據(jù)包不允許傳輸。門在什么時候打開、什么時候關(guān)閉受一個門控列表驅(qū)動。此外,TAS的前提是所有的終端和網(wǎng)絡(luò)設(shè)備需要采用802.1AS實現(xiàn)納秒級全網(wǎng)時鐘同步,即保證所有出端口的門控列表時間是同步的,且鏈路時延可以忽略不計。
TAS的關(guān)鍵問題是如何為控制類流量分配時隙,從而生成全局的門控列表。以下圖為例,紅流有兩個1500字節(jié)的數(shù)據(jù)包,綠流有三個1500字節(jié)的數(shù)據(jù)包,假設(shè)端口帶寬為1Gbps,則紅流傳輸所需預(yù)留的時隙為24us,綠流傳輸所需預(yù)留的時隙為36us,在無等待調(diào)度模型下,將這兩個時隙逐跳完全排開(即時隙不重疊),就能生成如圖所示的門控列表,即在T0時刻Q7門打開、Q6門關(guān)閉,在T1時刻Q7門關(guān)閉、Q6門打開。
循環(huán)排隊轉(zhuǎn)發(fā)
TAS能夠?qū)崿F(xiàn)微秒級的逐跳逐包的細(xì)粒度調(diào)度,但其需要逐跳的逐條目的配置門控列表,導(dǎo)致配置十分復(fù)雜,且單臺設(shè)備的門控條目數(shù)一般不超過1024條,在海量流量場景下存在可擴展性的問題,因此循環(huán)排隊轉(zhuǎn)發(fā)(Cyclic Queuing and Forwarding, CQF)被提出。
循環(huán)排隊轉(zhuǎn)發(fā)在入隊和出隊處各放置一個門(標(biāo)記為Rx-gate和Tx-gate),當(dāng)門打開時包進行入隊或傳輸,當(dāng)門關(guān)閉時禁止入隊或傳輸。循環(huán)排隊轉(zhuǎn)發(fā)機制將出端口的傳輸時間分為一系列相等的時間間隔,每個時間間隔稱為一個周期T。
CQF要求:
1)全網(wǎng)時鐘同步,
2)鏈路時延可忽略不計,
3)周期T要至少大于一跳時延(即處理時延、排隊時延、傳輸時延、鏈路時延之和)。然后通過奇偶兩個隊列交替執(zhí)行入隊和出隊操作,CQF可以確保在一個周期內(nèi)從上游節(jié)點發(fā)送數(shù)據(jù)包,并在同一周期內(nèi)在下游節(jié)點接收到數(shù)據(jù)包,且在下一個周期將數(shù)據(jù)包發(fā)送出去。因此,端到端延遲僅取決于周期大小T和路徑跳數(shù)H,其中最大延遲界限為(H +1)T,最小延遲界限為(H-1)T,端到端抖動最大為2T。
比如假設(shè)鏈路帶寬為1Gbps,CQF最大隊列深度為10個數(shù)據(jù)包,則按MTU大小的數(shù)據(jù)包計算得出一跳的排隊和傳輸時延最大為120us,再加上5us的處理時延,可以將周期T的大小設(shè)為125us。那么如下圖所示,在T0偶周期時刻,偶隊列Q6發(fā)送、奇隊列Q7接收,因此Tx-gate中Q6打開、Q7關(guān)閉, Rx-gate中Q6關(guān)閉、Q7打開;在T1奇周期時刻,奇隊列Q7發(fā)送、偶隊列Q6接收,因此Tx-gate中Q7打開、Q6關(guān)閉, Rx-gate中Q7關(guān)閉、Q6打開。
CQF通過限制最大隊列長度,將一跳的時隙設(shè)定為固定周期值T,奇偶兩個隊列交替執(zhí)行,相當(dāng)于只有一條門控條目,從而簡化了TAS復(fù)雜的門控條目配置。CQF的關(guān)鍵問題是如何確定周期T的大小、以及計算流的發(fā)送開始時間。如果周期T太小,則隊列太短,會導(dǎo)致大量不可調(diào)度的情況;如果周期T太大,又會導(dǎo)致端到端最壞時延變大,部分低時延的流量無法被調(diào)度,且浪費片上緩存資源。
幀搶占
時間感知整形中還有一個細(xì)節(jié)問題是需要設(shè)置保護帶寬。當(dāng)時間敏感流(優(yōu)先級為7)和盡力而為流(優(yōu)先級為0)共傳,如果時間敏感流進入隊列時盡力而為流已經(jīng)開始傳輸,那么時間敏感流必須等待至少一個盡力而為數(shù)據(jù)包的傳輸時間(在1Gbps帶寬下傳輸1500字節(jié)大小的包為12us),導(dǎo)致其時隙無法對齊,即無法按照既定的門控列表進行傳輸。因此,在時間敏感流到達(dá)之前,所有的門應(yīng)該關(guān)閉一個MTU大小包傳輸?shù)臅r間,以形成保護帶寬。
然而,不是所有的時間敏感流到達(dá)前都有盡力而為流在傳輸,也不是所有盡力而為流的包大小都是MTU大小,事實上,互聯(lián)網(wǎng)流量的平均包大小在256字節(jié)左右,因此保護帶寬在密集門控切換情況下會造成大量的帶寬浪費。為減少帶寬浪費,幀搶占(Frame Preemption, FP)被提出。
幀搶占將MAC分為eMAC和pMAC,時間敏感流(高速幀)走eMAC,盡力而為流(低速幀)走pMAC,當(dāng)?shù)退賻瑐鬏敃r若有高速幀到達(dá),首先會判斷低速幀是否能被分片,如果能則將低速幀分片,然后高速幀執(zhí)行搶占傳輸,最后低速幀進行分片重組。因為以太網(wǎng)幀有最小64字節(jié)的發(fā)送限制,所以必須保證低速幀切片后兩個切片(包括校驗和)均不小于64字節(jié)。因此當(dāng)?shù)退賻臄?shù)據(jù)長度小于124字節(jié)時,該低速幀將不能被分片。
此外,幀搶占可以減少高速幀的排隊阻塞時間,從而有效降低高速幀的時延,但是以增加低速幀時延為代價。低速幀切片時機存在不確定性,會導(dǎo)致高速幀被阻塞的時間存在波動,從而引入一定的時延抖動。
總結(jié)
本文分析了令牌桶、基于信用的整形(CBS)、時間感知整形(TAS)、循環(huán)排隊轉(zhuǎn)發(fā)(CQF)、幀搶占(FP)五種機制。五種機制既可以單獨使用,也可以部分融合使用,比如時間感知整形融合基于信用的整形,時間感知整形融合幀搶占。機制使用的前提條件和機制的適用場景,是值得關(guān)注的重點;令牌桶被廣泛應(yīng)用于互聯(lián)網(wǎng),后四種機制當(dāng)前主要應(yīng)用于車載以太網(wǎng)、工廠內(nèi)網(wǎng)、航空航天裝備系統(tǒng)等局域網(wǎng)場景;在調(diào)度時延保障粒度方面,五種機制逐漸遞進,粒度越來越細(xì)。為通俗易懂,
本文對相關(guān)細(xì)節(jié)有所簡化,更多機制的配置參數(shù)和技術(shù)實現(xiàn)可以參考相關(guān)標(biāo)準(zhǔn)協(xié)議和產(chǎn)品文檔。