聊聊SR的圖靈完備性
本文轉(zhuǎn)載自微信公眾號「zartbot」,作者扎波特的網(wǎng)線鉗。轉(zhuǎn)載本文請聯(lián)系zartbot公眾號。
昨天在公司看到一張PPT,上面寫著兩行大字:
SR for Anything, Network as a Computer
不用打聽寫這個(gè)ppt的人是誰,也不評價(jià)對錯(cuò)惹是非,下面只想給網(wǎng)絡(luò)工程師技術(shù)扶貧一下可計(jì)算性和圖靈完備的知識,留給各位自己判斷.
圖靈機(jī)
圖靈機(jī)是英國數(shù)學(xué)家阿蘭·圖靈在1936年的文章《On Computable Numbers, with an Application to the Entscheidungsproblem》中提出的抽象計(jì)算模型.
在論文的第三章講述了一個(gè)計(jì)算機(jī)的例子,即一個(gè)機(jī)器包含了一條無限長的紙帶,紙帶被分成一些Square,然后上面有一些二進(jìn)制編碼的symbol。存在一個(gè)事先約定好的指令, 例如R表示機(jī)器將掃描右側(cè)的Square,同理L表示左側(cè),E表示擦除,P表示打印等.計(jì)算即根據(jù)讀寫頭和規(guī)則表決定動作,當(dāng)讀寫頭停機(jī)時(shí),打印輸出的就是計(jì)算結(jié)果:
圖靈完備
圖靈完備是指,當(dāng)你設(shè)計(jì)了一套操作數(shù)據(jù)的規(guī)則后,這套指令集或者語言能夠模擬圖靈機(jī),那么就說這套規(guī)則是圖靈完備的。通常很多編程語言的圖靈完備性影響主要需要考慮分支Branch和循環(huán)loop的問題。當(dāng)然有一些語言故意設(shè)計(jì)成非圖靈完備的,例如很多區(qū)塊鏈的合約執(zhí)行指令不支持分支跳轉(zhuǎn)和循環(huán),主要的目的是它使用的場景和安全性考慮決定的。
SR的圖靈完備
SR本身的編碼上來看,并不是圖靈完備的. 因?yàn)镾R Label只能順序執(zhí)行。當(dāng)然也可以做一些特殊的處理,例如Binding-SID可以看做是一個(gè)特殊的函數(shù)調(diào)用,然后借用MPLS Stack的結(jié)構(gòu),可以實(shí)現(xiàn)函數(shù)入棧. 同時(shí)我們也可以定義一些特殊的Label行為來進(jìn)行Label跳轉(zhuǎn), 但又有另一個(gè)缺陷,處理報(bào)文的時(shí)候,我們并沒有設(shè)計(jì)相應(yīng)的狀態(tài)機(jī)。如果要設(shè)計(jì),又會成為一個(gè)Stateful的forwarding feature,需要相應(yīng)的流表和動態(tài)狀態(tài)更新。
某種意義上來講,MPLS-SR因?yàn)橛袟5慕Y(jié)構(gòu),入棧和彈出標(biāo)簽相對容易。而SRv6則是一個(gè)工程上的災(zāi)難,由于必須保留報(bào)文的源IP地址,一方面有uRPF的缺陷,另一方面維持IP頭并要同時(shí)操作SRH產(chǎn)生了一系列問題,例如交換機(jī)通常沒法同時(shí)處理這么大量的數(shù)據(jù),SRv6標(biāo)簽棧深度受限。
而針對棧結(jié)構(gòu),SRv6的SRH在報(bào)文中間。入棧和出棧對于P4一類的交換機(jī)容易,Deparser上插進(jìn)去或者砍掉就好。但是傳統(tǒng)的CPU架構(gòu)而言,都需要大量的memory move的操作,我還在開玩笑,Intel啥時(shí)候能夠出一個(gè)批量操作I/O的deparser呢,集成在網(wǎng)卡上或者CPU上都行....
在設(shè)計(jì)的時(shí)候,如果能丟棄原有的IPv6頭,根據(jù)SRH的信息重建便是一個(gè)更好的解決方案,這樣標(biāo)簽入棧出棧的處理相對容易很多,uRPF的缺陷也可以避免。所以反過來你就能明白RFC8663 MPLS-SR over UDP的能夠在很多場景被接受的原因。但是很抱歉MPLS-SR的問題來自于標(biāo)簽棧的長度,以及沒有類似于SRv6那樣定義的
P4的圖靈完備
我們來看另一個(gè)問題,P4設(shè)計(jì)之初是完全基于硬件能力的,一旦涉及分支Branch極易帶來流水線的Stall,因此P4早期的MAU并沒有打算支持分支預(yù)測,更多的是采用match不同的表產(chǎn)生新的action來將流量分擔(dān)到另一個(gè)MAU實(shí)現(xiàn)的。Torfino-2增加了一些功能,而為了實(shí)現(xiàn)更加靈活多樣的計(jì)算,Pensando的實(shí)現(xiàn)中直接增加了寄存器/PC/Branch器件.
而NanoPU更是直接把一個(gè)處理器堆到了P4 MAU旁邊。
網(wǎng)絡(luò)是否需要圖靈完備編程
很多人總是喜歡一招鮮打遍天下,但真的有必要什么都做么?前段時(shí)間有個(gè)某云的同學(xué)發(fā)了一個(gè)朋友圈說什么指標(biāo)都要追求世界第一, 我補(bǔ)了一句那么價(jià)格肯定也世界第一。成年人有足夠的支持時(shí)可以輕松的說不需要選擇,都要。但是技術(shù)總是需要取舍的。加法容易減法難,就是這個(gè)道理。
計(jì)算、存儲、網(wǎng)絡(luò)這三者的組合有其內(nèi)在的精妙,存內(nèi)計(jì)算(In Memory Computing)和邊緣計(jì)算提出的算力網(wǎng)絡(luò)都是為了解決馮諾依曼架構(gòu)的缺陷,使得計(jì)算規(guī)模能夠再上一個(gè)臺階。但是另一個(gè)可信計(jì)算的問題又會困擾大家。
架構(gòu)上我并不認(rèn)同網(wǎng)絡(luò)能夠?qū)崿F(xiàn)大量的圖靈完備的計(jì)算,而是可以通過一系列組合為計(jì)算和存儲搭起一個(gè)更好的橋梁。