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