畢竟本專欄叫做「硬科技」,如果不談點硬體相關的議題,就實在太過對不起各位科科的求知慾了。「OpenFlow南向協定交換器」和「P4語言Smart NIC」就是本期的主題。
前情提要:在了解Smart NIC和DPU前科科需要知道的軟體定義網路(上)
科科們已經了解到OpenFlow是SDN控制器與交換器之間的互動協定,具體定義了交換器在資料轉發面(Data Plane)的功能,並規範封包的種類和格式,目前最新的實用化版本是1.5.1。
支援OpenFlow的交換晶片,在邏輯上主要由2部份組成:端口(Port)和流表(Flow Table),所謂的Flow意指「在同一段時間內,經過同一段網路,並具有相同屬性(如相同的TCP port)的訊息」,每個流表項目(Flow Entry)對應網路中傳輸的一條流,也是OpenFlow中最核心的元素,可謂以簡馭繁。
乍看之下,OpenFlow交換晶片看似無所不能,反正所有的網路傳輸都變成一條一條的流,轉發行為如此的簡單,沒有任何狀態機,一切都是Match(匹配)→Action(行動),想怎麼動就怎麼動,通通和網路協定沒有相依性,足以應對未來的技術發展。但如此巨大的彈性,卻是需要付出高昂的代價。依據OpenFlow標準,一張流表可以使用任意的字段組合去作查表。這代表了這張流表需要使用「內容查找記憶體(CAM,Content-Addressable Memory)」實作,事情就大條了。
不同於我們認知的隨機存取記憶體(RAM,Randon Access Memory),CAM會搜索全部的記憶體,以判斷某筆資料是否儲存在其中。如果找到了這個資料位元組,CAM將回覆由1個或者多個位址組成的列表,這些地址中都存儲著這筆資料。也只有3個輸入的TCAM(Ternary CAM)才能隨意的掩蓋掉任何想掩蓋的查找字段,電路複雜度和發熱量自然扶搖直上,相當於傳統DRAM的5倍到6倍,讓所有有志於OpenFlow交換晶片的廠商通通都抱著頭燒。
更何況,OpenFlow還有「多級流表」的概念,每個層級的流表都有自己的編輯動作並彼此互動,晶片廠商真的硬幹下去,徹頭徹尾的完整支援OpenFlow,打造出「從頭到尾和任何網路協定通通無關的交換晶片」,固然得到了最高的靈活可編程能力,卻犧牲掉了簡單性,創造貴到不行的巨無霸。我們也都知道,在處理器的世界,一直有條不變的真理:超大 + 超貴 + 超熱 = 超生,網路晶片亦同。
俗語說的好,博觀而約取,厚積而薄發,網路交換晶片廠商就乾脆退而求其次,基於實際的應用需求和現有的晶片架構,定義不同的應用框架與轉發模型。因為絕大多數的應用場景,像上期提到Google的B4資料中心廣域網路,追求的是SDN架構的管理便利性,並不需要終極的可編程靈活性,所以各家廠商在此都各顯神通,透過SRAM或更便宜的DRAM,或著NPU或FPGA之類的手段,實作高容量但功能受限的OpenFlow流表,並在兼顧傳統功能的基礎上,適度的補強功能,以適應SDN的要求。
像Google自行研發的OpenFlow交換機,就不是採用標準的OpenFlow流表,但界面上仍遵循OpenFlow的規範,這有力的證明1件事:要引進SDN和OpenFlow,並不需要專用的晶片。SDN的重點是「應用」,不是完整支援OpenFlow。這背後的意義,值得各位科科深思,無論從開發產品到人生面對的一切問題,都是一樣的道理。
接著就是這票Smart NIC和DPU的重頭戲:P4(Programming Protocol-independent Packet Processors)封包處理器描述語言。
問題來了,我們不是已經有OpenFlow了嗎?但OpenFlow僅限於「控制與轉發分離」,並未定義對資料和封包的處理方式。與OpenFlow互補的P4語言,可用來程式化路由器、交換器和網路卡的行為,以軟體的方式,引進新的功能與協定,而不是需要等待嶄新的硬體。P4語言的執行引擎,也成為高度可編程化的Smart NIC,比一般ASIC的NIC更加「聰明」的地方。
行為至此,想必各位科科的臉上彷彿掛著劫後餘生倖存者的表情,並附贈著跳動的眼皮和顫抖的嘴角,但從技術到商業,其實SDN是個大到足以寫書的主題,各位看到的只是冰山的一角。沒關係,大丈夫,等到日後硬科技開始介紹各大廠商的Smart NIC和NVIDIA的DPU後,你們就會知道這東西的威力在哪裡了。也許吧?科科。
1 則回應