硬件定義軟件?還是軟件定義硬件?這是個宏大的命題。本文篇幅有限,也自認能力有限,很難完整而準確的把握。只為拋磚引玉,期望能有更多的朋友一起探討。
從軟件到硬件,從硬件到軟件;硬件定義并驅動軟件,軟件定義并驅動硬件;軟硬件系統(tǒng)的發(fā)展,是個螺旋上升,不斷深化的過程。
未來,隨著設計規(guī)模逐步擴大,各種處理引擎及其生態(tài)持續(xù)豐富,軟件和硬件,更像是相互博弈相互協(xié)同的共生系統(tǒng),這應該算是“軟硬件融合”吧!
1 軟件和硬件
1.1 軟件和硬件的定義
指令是軟件和硬件的媒介,指令的復雜度決定了系統(tǒng)的軟硬件解耦程度。
按照單位計算(指令)的復雜度,處理器平臺大致分為CPU、協(xié)處理器、GPU、FPGA和ASIC。從左往右,單位計算越來越復雜,靈活性越來越低。
任務在CPU運行,則定義為軟件運行;任務在協(xié)處理器、GPU、FPGA或ASIC運行,則定義為硬件加速運行。
1.2 “硬件定義軟件”和“軟件定義硬件”的定義
軟件定義是當前非常熱門的話題,比如軟件定義網絡、軟件定義數據中心、軟件定義汽車等等。軟件定義的范疇非常大,不僅僅涉及到底層的軟硬件技術,也涉及到系統(tǒng)的運行管理、監(jiān)控、更新等,甚至還涉及到商業(yè)上的一些考量。
系統(tǒng)是由軟件和硬件組成。當我們說軟件定義XX的時候,其實說的是軟件定義XX系統(tǒng)。本文篇幅有限,從最底層的軟件和硬件相關的技術以及兩者之間的相互關系和影響來闡述系統(tǒng)中軟件定義和硬件定義。
“硬件定義軟件”定義為:
當一個系統(tǒng)的主要業(yè)務邏輯是在硬件中實現,協(xié)同的軟件是為輔助。
相關的軟件是依賴于硬件提供的接口構建。
對應的,“軟件定義硬件”定義為:
當一個系統(tǒng)的主要業(yè)務邏輯是在軟件中實現;系統(tǒng)中沒有硬件引擎,或者硬件引擎是軟件可編程的;硬件引擎按照軟件編程的邏輯執(zhí)行操作。
相關的硬件依賴于軟件提供的接口構建。
1.3 CPU,軟件和硬件解耦
CPU是最靈活的,原因在于運行于CPU指令都是最基本粒度的加減乘除外加一些訪存及控制類指令,就像積木塊一樣,我們可以隨意組合出我們想要的各種形態(tài)的功能。
很多人會認為,CPU可以自動的執(zhí)行非常復雜的計算機程序,這是CPU最大的價值所在。其實不然,CPU最大的價值在于提供并規(guī)范了標準化的指令集,使得軟件和硬件從此解耦:
硬件工程師不需要關心場景,只關注于通過各種“無所不用其極”的方式,快速的提升CPU的性能。
而軟件工程師,則完全不用考慮硬件的細節(jié),只關注于程序本身。然后有了高級編程語言/編譯器、操作系統(tǒng)以及各種系統(tǒng)框架/庫的支持,構建起一個龐大的軟件生態(tài)超級帝國。
在桌面和服務器領域,X86是最流行的處理器架構。而在手機等移動端,ARM則占據絕對的統(tǒng)治地位。開源RISC-v符合未來技術和商業(yè)發(fā)展的趨勢,其在MCU領域已經占據重要地位,并且在向桌面和服務器領域發(fā)起沖鋒。
軟件的龐大生態(tài),是構建在特定的CPU架構之上的。但是,我們一般來說,CPU作為指令足夠細粒度,計算足夠通用的計算平臺,其是軟件和硬件解耦的:
一方面,特定架構下,每種CPU架構“基本”保證了向前兼容,這樣可以認為,在特定架構,軟件硬件完全解耦各自發(fā)展。
另一方面,(理想狀態(tài)下,)OS、編譯器等越來越成熟之后,能夠保證,同樣的高級語言程序,在不同的CPU架構平臺,其運行行為是一致吧。這樣就可以脫離具體的CPU架構憑條,構建完全無差別的軟件生態(tài)。
從長期發(fā)展的角度,RISC-v應該會是未來更好的選擇:
開放性。RISC-v最大的特點是其指令集開源,這樣任何廠家就可以根據自己情況設計自己的RISC-v CPU,然后大家共建一套開放的生態(tài),共生共榮。
標準化。標準化是最關鍵的價值。所有的架構(x86/ARM/RISC-v)都可以認為是標準的,但因為RISC-v的開放性,其標準化未來的價值就會非常大。上面說過,“理想”情況下,我們可以把程序無縫的從一個平臺遷移到其他平臺,但實際上,許多商業(yè)的軟件,我們并不能拿到源碼。而且,許多時候,一些細節(jié)問題,都可能導致平臺遷移失敗。這種遷移對用戶來說是非常大的挑戰(zhàn)和風險。當標準的RISC-v足夠流行之后,基于RISC-v構建的整個生態(tài)會迸發(fā)強大的生命力。
其他。如RISC-v沒有歷史包袱,指令集更高效;更靈活的擴展能力(確保不碎片化);等等。
1.4 CPU的軟硬件定義
CPU和軟件程序的交互接口是指令集,是最細粒度的加減乘除等指令,像積木塊一樣,隨意組合出任意想要的各種程序。
CPU到底是軟件定義還是硬件定義,從不同的角度有不同的看法:
軟件和硬件并行發(fā)展。CPU,通過ISA,“完美”實現了軟件和硬件的標準化解耦。因此,可以認為,在這個時候,不存在硬件定義軟件或軟件定義硬件,軟件和硬件各自并行不悖的快速發(fā)展。
硬件定義軟件?;贑PU構建的龐大軟件生態(tài),這可以算作是“硬件定義軟件”:先有CPU硬件,再有編譯器,再有OS、應用等。
軟件定義系統(tǒng)。但是,站在軟件的角度,所有的系統(tǒng)實現均可以通過編程實現,根本不需要考慮運行的CPU平臺的“差一些”,因此又可以看做基于CPU運行的系統(tǒng)是“軟件定義”的。
2 硬件定義軟件
2.1 系統(tǒng)從軟件逐步到硬件
一個系統(tǒng),必然經過前期快速迭代,后期逐漸穩(wěn)定的過程。因此,系統(tǒng)運行的處理器平臺選擇也必然有如下的一些規(guī)律:
CPU通用軟件平臺:當一個新的應用出現的時候,最早出現的一般是軟件實現。一來實現所需要的代價較少,可以快速實現想法;二來CPU所提供的靈活性,不考慮性能的情況下,使之幾乎可以處理任何場景的任務。
協(xié)處理器擴展指令加速平臺:隨著技術的演進,對性能提出了一些要求。這個時候,可以針對一些比較消耗CPU資源的程序進行一定的編程和編譯優(yōu)化。
GPU向量及并行加速平臺:更進一步的,技術廣泛應用,并且我們能從算法中尋找到更多的并行性。這個時候,我們就可以找一些專用的處理器,如GPU、DSP、NPU等,來處理。通過特定的并行優(yōu)化以及支持向量(SIMD)、多指令并行(MIMD/VLIW)等復雜指令編譯優(yōu)化的方式,深度的優(yōu)化性能。
FPGA硬件可編程加速平臺:隨著技術越來越成熟,應用的規(guī)模越來越大。也越來越消耗資源。這個時候,我們值得花費更多的精力,提煉出復雜度非常高的算法(或者可以當作一個非常復雜的“指令”)然后通過硬件邏輯實現。再通過FPGA硬件可編程的方式快速落地。
ASIC定制加速平臺:再進一步的,技術更加成熟穩(wěn)定,應用規(guī)模足夠龐大,這個時候就非常有必要為此場景定制開發(fā)ASIC,來達到最優(yōu)的性能、最低的成本、最小的功耗。
當需要面向一個新領域開發(fā)的時候,要快速實現,或者應用的場景不夠確定,需要硬件平臺有足夠多的適應性,這些情況使用CPU比較合適。當需要極致的效率,并且成本敏感、功耗敏感,而且規(guī)模足夠龐大,那么選擇定制開發(fā)ASIC會更合適一些。如果折中的,需要有一定的靈活性,又要保證一定的性能加速,并且應用有足夠的并行度,這個時候GPU則更合適一些。
從軟件到硬件的一個經典的例子就是比特幣,其激烈而快速的完成了從CPU到ASIC的過渡。比特幣使用的技術區(qū)塊鏈核心算法是SHA-256,它在各個平臺上的性能對比如下:
CPU:最開始的時候,大家使用CPU挖礦,一臺高端個人電腦,處理速度大概20MH/s(H/s, Hash per second);
GPU:后來有人用GPU加速挖礦,SHA-256可以繼續(xù)拆分成普通的算術邏輯運算,而GPU具有超級多的算術邏輯運算單元,一個高端顯卡的處理速度可以達到200MH/s;
FPGA:再后來出現了定制SHA-256算法硬件邏輯的FPGA加速卡來挖礦,精心設計的定制電路的FPGA,可以使運算速度達到1GH/s;
ASIC:而比特大陸公司2015年發(fā)布的ASIC礦機芯片BM1385,其性能達到單顆芯片算力可達32.5GH/s。
上述CPU、GPU、FPGA性能數據來自于《區(qū)塊鏈:技術驅動金融》,數據為2013年前后的性能數據。
2.2 硬件架構決定了軟件設計
2.2.1 ASIC的硬件定義
SOC是CPU、GPU、各種加速處理引擎(ASIC)以及接口模塊(ASIC)的集成。
智能手機使用電池供電,同時又要提供足夠強大的性能。如此苛刻的應用條件,使得智能手機處理器通常都選用集成度非常高的SOC。上圖是高通手機SOC處理器驍龍810芯片,可以看到此芯片主要包括:
通用CPU:ARM Cortex-A57和Cortex-A53,CPU主要用于運行Android等智能手機操作系統(tǒng)以及APP程序;
特定場景處理器:Adreno 430 GPU、Hexagon DSP、ISP、多媒體處理器等,GPU主要用于3D游戲等場景,DSP主要用于傳感器算法處理;
特定功能子系統(tǒng):支持4G LTE的通信基帶處理、GPS/北斗等的定位模塊等;
安全處理模塊;
其他一些外圍模塊。
于是,手機系統(tǒng)就形成了如下表格的分層:
應用層 | 應用程序 |
系統(tǒng)層 | 操作系統(tǒng)Android/iOS等 |
驅動層 | Driver和HAL |
硬件層 | 通用CPU;GPU、DSP、ISP等處理引擎;4G、GPS等子系統(tǒng);WiFi、USB、藍牙等連接模塊;安全模塊;其他。 |
2.2.2 GPU的硬件定義
GPU由數以千計的CUDA核組成,要想對數以千計的CPU內核進行編程,把這么多核的計算性能發(fā)揮出來,是非常大的挑戰(zhàn)。
GPU編程有一個最重要的約束是在同一個并行線程組里運行的是相同的程序,也稱之為“齊頭并進”。即使如此,GPU的編程難度依然相當的大。
于是,為了提升GPU編程易用性和快捷性的CUDA編程框架應運而生了。
2006年NVIDIA推出了CUDA,這是一個通用的并行計算平臺和編程模型,利用NVIDIA GPU中的并行計算引擎,以一種比CPU更高效的方式解決許多復雜的計算問題。CUDA提供了開發(fā)者使用C++作為高級編程語言的軟件環(huán)境。也支持其他語言、應用程序編程接口或基于指令的方法,如FORTRAN、DirectCompute、OpenACC。
CUDA是NVIDIA成功的關鍵,它極大的降低了用戶基于GPU并行編程的門檻,在此基礎上,還針對不同場景構建了功能強大的開發(fā)庫和中間件,逐步建立了GPU+CUDA的強大生態(tài)。
2.3 總結
2.3.1 系統(tǒng)業(yè)務邏輯的實現形式,決定了軟硬件定義
三類典型的平臺:
CPU,因為是完全細粒度的指令,可以非常靈活的組織出來想要的程序。
ASIC,ASIC是把系統(tǒng)的業(yè)務邏輯固化到硬件中。優(yōu)勢在于,完全定制ASIC實現了最精簡的晶體管資源占用,實現最極致的性能。當一個系統(tǒng)功能非常固定,并且未來也不會有非常頻繁的更新的情況下,ASIC是幾乎最優(yōu)的選擇。
GPU,則介于CPU和ASIC之間,具有一定性能的同時,具有一定的靈活性。
根據系統(tǒng)業(yè)務邏輯的具體實現:
CPU是一個完全靈活無約束的可編程平臺,系統(tǒng)運行于CPU,則說系統(tǒng)是完全軟件定義的。也既是說,可以通過軟件編程的方式,完全自由的定義自己需要的系統(tǒng)業(yè)務邏輯。
系統(tǒng)運行于ASIC,則說系統(tǒng)是完全硬件定義的。也即是說,ASIC的整個系統(tǒng)邏輯都是硬件寫死的,軟件只是一些簡單的初始化配置和運行控制。
GPU,則是介于軟件定義和硬件定義之間。
2.3.2 軟件依賴于硬件平臺而存在
ASIC實現的是整個SOC大系統(tǒng)中的一個子系統(tǒng),整個子系統(tǒng)的業(yè)務邏輯基本上是在ASIC模塊硬件中完成(有時候需要控制面軟件來控制ASIC模塊的運行),因此,其性能相對CPU和GPU較高。
當我們設計一個ASIC硬件模塊或加速器的時候,需要提供相應的驅動,如果是要接入OS等標準接口,還需要有一層HAL層負責把不同接口映射到OS的標準接口。應用程序根據ASIC硬件提供的功能接口使用硬件。
GPU平臺,硬件的GPGPU提供接口給CUDA,CUDA再提供接口給應用。每一代具體的GPU,給上層提供的是不同的訪問接口, CUDA框架有特定的驅動和HAL屏蔽不同GPU的實現細節(jié);并且CUDA為了向前兼容和維護生態(tài),最終映射到標準的庫。這些標準的庫,提供了標準的接口給上層的CUDA應用程序。
即使CUDA映射成標準的庫API接口,CUDA程序依然是要依賴于CUDA提供的接口來設計應用軟件。
總結一下,軟件依賴于硬件平臺存在,體現在兩個方面:
軟件只能根據硬件提供的功能來完成系統(tǒng)實現,系統(tǒng)的業(yè)務邏輯是在硬件實現;
軟件依賴硬件提供的接口訪問硬件,硬件提供什么樣的接口,軟件就使用什么樣的接口,主動權在硬件。
3 軟件定義硬件
3.1 系統(tǒng)又開始從硬件逐步到軟件
上一節(jié)我們講到,系統(tǒng)從起始發(fā)展,到逐步穩(wěn)定,系統(tǒng)的運行平臺逐步從CPU演進到ASIC。那么,ASIC是不是所有系統(tǒng)最終的運行平臺?
答案是否定的。原因主要如下:
軟件更新換代很快。新的熱點技術層出不窮,已有的技術領域的更新迭代速度仍在快速增加。硬件的迭代周期過長,無法跟上軟件迭代的節(jié)奏。
定制的ASIC設計,把所有功能都在硬件實現。在復雜的云計算、自動駕駛等場景,芯片公司對用戶的場景理解可能不夠深入,會導致設計偏差。另一方面,也會限制用戶自身的主觀能動性,讓用戶有想法也很難在ASIC平臺去實現自己想要的功能。
ASIC因為功能固定,為了適配更多場景,確保芯片的大量出貨,勢必需要實現功能超集。例如,某ASIC芯片支持10個功能,但實際用戶場景,都是只需要2-3種功能。這樣,ASIC實現實際上也是低效的。并且,這些功能因為緊耦合的緣故,系統(tǒng)復雜度反而更高。
這樣,在許多場景,我們根據實際的場景需求,除ASIC,也開始選擇DSA、FPGA、GPU甚至CPU等處理引擎。
3.2 軟件定義網絡
最典型的一個案例就是SDN(Software Defined Network)的發(fā)展。經過幾十年的發(fā)展,網絡芯片已經演進到了完全ASIC的實現,這意味著基于ASIC芯片的網絡設備其功能是確定的,用戶只能根據廠家實現的確定功能來使用網絡設備。
然而,隨著云計算、4G/5G移動通信等的發(fā)展,新的網絡協(xié)議和網絡功能層出不窮,純ASIC實現的網絡系統(tǒng)遇到了挑戰(zhàn)。
如上圖所示,IETF(Internet Engineering Task Force,互聯網工程任務組)的RFC(Request for Comments,請求意見稿,即網絡協(xié)議)數量一直在爆炸式的增長,應用于各種新型網絡場景的新協(xié)議層出不窮。但是,傳統(tǒng)的網絡處理芯片都是封閉的、特定的設計,用于特定協(xié)議處理。想要增加新的協(xié)議非常困難,并且對新協(xié)議的支持受到不同供應商的約束。定制的網絡處理芯片,對新協(xié)議的支持不足以及缺乏有效的靈活性,這使得要想在網絡系統(tǒng)增加新的功能非常困難,限制了客戶的網絡創(chuàng)新能力。
客戶希望能夠快速便捷的對網絡進行配置和管理;客戶希望能夠快速的進行網絡協(xié)議創(chuàng)新。這樣,ASIC的功能固定越來越成為網絡創(chuàng)新的約束。于是,SDN開始了兩個方面的創(chuàng)新:
第一步,網絡控制面和數據面分離,控制面可編程。把網絡控制面從數據面分離處理,形成了控制面可編程的Openflow協(xié)議。
第二步,進一步的,網絡數據面也可以編程,用戶可以定義自己的協(xié)議。形成了數據面可編程的P4語言和P4交換機相繼出現。
3.2.1 運行于CPU的軟件虛擬交換機
OVS(Open Virtual Switch)是Apache 2許可下的開源的軟件交換機。OVS的目標是實現一個生產環(huán)境的交換機平臺,支持標準管理界面,并為程序擴展和控制開放轉發(fā)功能。OVS非常適合在VM環(huán)境中用作虛擬交換機,除了向虛擬網絡層公開標準控制和可見性接口之外,它還旨在支持跨多個物理服務器的分發(fā)。OVS支持多種基于Linux的虛擬化平臺,包括Xen、KVM等。
最新的OVS版本支持以下功能:
NIC綁定在上行交換機上,可以支持LACP也可以不支持;
通過NetFlow,sFlow(R)和鏡像來增強可視性;
QoS(服務質量)配置以及策略;
Geneve, GRE, VxLAN, STT和LISP隧道;
802.1ag連接故障管理;
OpenFlow 1.0以及眾多擴展;
支持C和Python的事務配置數據庫;
基于Linux內核的高性能轉發(fā)模塊。
如圖,OVS答題可以分為三層:
管理層,即:ovs-dpctl、ovs-vsctl、ovs-ofctl、ovsdb-tool。
業(yè)務邏輯層,即:vswitchd、ovsdb。
數據處理層,即:datapath。
3.2.2 數據面可編程的網絡交換機DSA
上圖為PISA(Protocol Independent Switch Architecture,協(xié)議無關的交換架構)架構交換機的流水線,PISA是一種支持P4數據面可編程包處理的流水線引擎架構,通過可編程的解析器、多階段的可編程的匹配動作以及可編程的逆解析器組成的流水線,來實現數據面的編程。這樣可以通過編寫P4程序,下載到處理器流水線,可以非常方便的支持新協(xié)議的處理。
當實現了完全可編程的流水線之后,在P4工具鏈的支持下,就可以通過P4編程的方式來實現自定義的流水線,來達到對自定義協(xié)議的支持。
如圖所示,P4定義的Parser程序會被映射到可編程的解析器,數據、包頭定義、表以及控制流會被映射到多個匹配動作階段。圖 6.25中把L2處理、IPv4處理、IPv6處理以及訪問控制處理分別映射到不同的匹配動作處理單元進行串行或并行的處理,來實現完整的支持各種協(xié)議的網絡包處理。
3.3 軟件定義接口:Virtio
Virtio旨在提供一套高效的、良好維護的通用的Linux驅動,實現虛擬機應用和不同Hypervisor實現的模擬設備之間標準化的接口。Virtio作為類虛擬化的I/O設備接口,廣泛應用于云計算虛擬化場景,某種程度上,Virtio已經成為事實上的I/O設備的接口標準。
因為軟件定義了標準化的Virtio接口,因此,如上圖所示,在SmartNIC和DPU中,offload虛擬化和Workload的最關鍵部分就是要把Virtio硬件化。
如上圖所示,站在虛擬化角度,把Virtio卸載,可以看做是從軟件到硬件。但是,如果從硬件接口的角度,從一個完全硬件定義的接口(例如NV自定義的SR-IOV接口)過渡到軟件定義的接口(Virtio接口),則可以算是從硬件到軟件。
擴展閱讀:DPU和CPU互聯的接口之爭:Virtio還是SR-IOV?(NVIDIA白皮書)
3.4 可跨平臺的軟件定義:Intel oneAPI
英特爾oneAPI是一個開放、可訪問且基于標準的編程系統(tǒng),支持開發(fā)人員跨多種硬件架構參與和創(chuàng)新,包括 CPU、GPU、FPGA、AI 加速器等。這些處理引擎具有非常不同的屬性,因此用于各種不同的處理——oneAPI試圖通過將它們統(tǒng)一在同一個模型下來簡化這些操作。
即使在今天,開發(fā)人員面臨的一個持續(xù)問題是我們日益數字化的世界提供的編程環(huán)境的數量。不同的編程環(huán)境使代碼重用等節(jié)省時間的策略失效,并成為軟件開發(fā)人員的真正障礙。作為其軟件優(yōu)先戰(zhàn)略的一部分,英特爾在 2019 年的超級計算活動中推出了oneAPI。該模型標志著英特爾的雄心是擁有統(tǒng)一的編程框架作為限制專有編程平臺的解決方案。oneAPI 使開發(fā)人員能夠在不厭倦使用不同語言、工具、庫和不同硬件的情況下工作。
Intel oneAPI可以實現:設計一套應用,根據需要,非常方便的把程序映射到CPU、GPU、FPGA或者AI-DSA/其他DSA等不同的處理器平臺。
3.5 擴展:軟件定義“一切”
軟件定義是一個非常宏大并且非常熱點的話題,除了軟件定義網絡之外,還有很多軟件定義的熱點領域:
軟件定義存儲,是一種能將存儲軟件與硬件分隔開的存儲架構。不同于傳統(tǒng)的網絡附加存儲(NAS)或存儲區(qū)域網絡(SAN)系統(tǒng),SDS一般都在行業(yè)標準系統(tǒng)上執(zhí)行,從而消除了軟件對于專有硬件的依賴性。
軟件定義數據中心,把數據中心基礎設施通過抽象化、資源池化以及自動化來實現基礎設施即服務(IAAS)。軟件定義的基礎設施可讓IT管理員使用軟件定義的模板和API輕松配置和管理物理基礎設施,以定義基礎設施配置和生命周期運維,并實現自動化。
軟件定義無線電,是一種無線電廣播通信技術,它基于軟件定義的無線通信協(xié)議而非通過硬連線實現。頻帶、空中接口協(xié)議和功能可通過軟件下載和更新來升級,而不用完全更換硬件。
軟件定義汽車,通過軟件實現新的車載體驗和功能,并通過無線 (OTA) 提供更新和服務。從而使得汽車從高度機電一體化的機械終端,逐步轉變?yōu)橐粋€智能化、可拓展、可持續(xù)迭代升級的移動電子終端。
軟件定義存儲和軟件定義無線電還主要是技術的范疇,而軟件定義數據中心和軟件定義汽車,則是把軟件定義的思路和理念更加深化和拓展,應用于更廣闊的領域。
4 軟硬件相互定義
4.1 軟件定義也存在一些挑戰(zhàn)
4.1.1基于CPU的摩爾定律失效
軟件定義XX,最本質的做法還是把整個系統(tǒng)重新從硬件實現變成偏軟件的實現。隨著這勢必對CPU的性能提出了更高的要求。
然而,如上圖所示,隨著CPU的性能提升逐漸停滯,已經無法滿足數字經濟時代對算力持續(xù)提升的要求。
因此,還是要再輪回,“硬件”加速。
4.1.2 DSA只解決了部分問題
支持P4的網絡數據面可編程引擎,屬于DSA的范疇,專門用于網絡包處理的加速,性能跟ASIC相當,但其具有非常好的軟件可編程能力。
標準的P4程序,有P4前端編譯器把P4程序編譯成一個中間態(tài)的程序(類似Java編譯器)。然后特定硬件實現的后端編譯器負責把中間態(tài)的程序映射到具體的硬件實現(有點像Java虛擬機,但P4是靜態(tài))。
P4 DSA引擎預先配置好P4程序之后,P4-DSA就成了執(zhí)行特定協(xié)議處理的網絡包處理引擎。然后需要和已有的網絡程序進行適配,實現網絡任務的數據面offload。
P4的整個系統(tǒng)棧跟之前CPU、GPU、ASIC最大的不同在于先定義了標準的P4,然后各廠家根據標準的P4去實現各自不同的P4處理引擎。
CPU雖然現在有三大架構(x86、ARM和RISC-v),但就具體的架構而言,其定義的ISA是非常明確的。特別是在RISC-v生態(tài)下,大家遵循一致的ISA,已有的程序可以非常方便的在不同Vendor的RISC-v CPU上運行。
但是在DSA領域,目前還看不到這一點。
可以說,當前所有的DSA,包括P4 DSA,都還沒有實現接口的軟件定義,接口依然是硬件定義的,可以說是不完全的軟件定義XX。
4.2 更理想的跨平臺框架
我們把oneAPI模型框架再增強一下,如上圖所示。這樣,跨平臺,不僅僅是在CPU、GPU、FPGA和DSA的跨平臺,更在于是不同Vendor的不同處理器的跨平臺。
4.3 接口的軟硬件互相定義
不管是軟件定義硬件還是硬件定義軟件,接口(這里接口是泛指,ISA是接口,IO設備的數據訪問接口也是接口,GPU等加速器呈現的訪問接口也是接口)都是非常關鍵的角色,因為是通過接口給對方呈現自己的功能和如何訪問。
我們來總結一下軟硬件之間的接口類型:
第一類,定義好硬件,軟件依賴于硬件而定義。通常都是這樣,CPU、GPU、ASIC等等,都是這種接口定義。
第二類,軟件定義的情況下,現有軟件,硬件設計要進行適配。比如,Virtio的硬化,比如要兼容OVS的TC-Flower/RTE-flow接口等。
第三類,軟件定義和硬件定義各自的接口,然后中間通過轉換層適配。比如,通過HAL層把硬件驅動適配到OS;例如高級語言程序通過編譯器生產特定處理器架構的Binary程序。
第四類,軟件定義,并且跨越軟硬件的接口也是軟件定義的,但是在硬件里有一層轉換層。比如,前面提到的Virtio接口,在很多解決方案里的具體實現是在硬件側的嵌入式軟件里,這樣,軟件模擬的Virtio成為性能的瓶頸。
第五類,軟件定義,并且跨越軟硬件的接口也是軟件定義的,硬件直接實現的軟件定義接口。原生支持軟件定義接口。硬件不僅僅要實現自己的編程范式,還需要把編程范式映射到標準接口的能力。
4.4 總結
“硬件定義軟件”是傳統(tǒng)的思路。新的技術發(fā)展很快,已有的技術仍在快速迭代;而硬件系統(tǒng)越來越復雜,更新迭代也越來越慢。系統(tǒng)如果是硬件為主,軟件依賴于硬件。則勢必限制技術的快速發(fā)展。
“軟件定義硬件”代表了一種趨勢:要從系統(tǒng)層次,主動的來定義個體的硬件。但“軟件定義硬件”的描述更多的強調系統(tǒng),容易忽略個體的特點。站在系統(tǒng)層面,可以“站得高,看得遠”,代表了宏觀的、整體的思考,能夠更好的資源統(tǒng)籌,更好的定義系統(tǒng)功能。而站在個體的層面,個體是本源,代表了事物本質的特征。事物受客觀規(guī)律的約束,具有特定的發(fā)展規(guī)律。并且,個體具有差異化,如何更好的體現這些差異化優(yōu)勢,是系統(tǒng)持續(xù)不斷創(chuàng)新的本源驅動。
“軟件和硬件相互定義”,可以更好的協(xié)同系統(tǒng)和個體的關系,既能夠實現軟件定義的宏觀統(tǒng)籌,又能夠兼顧硬件個體的特點和優(yōu)勢,把兩者有機的結合起來,實現軟硬件更加協(xié)同的更優(yōu)的系統(tǒng)。
審核編輯:劉清
-
處理器
+關注
關注
68文章
19286瀏覽量
229837 -
cpu
+關注
關注
68文章
10863瀏覽量
211760 -
編譯器
+關注
關注
1文章
1634瀏覽量
49130
原文標題:硬件定義軟件?還是,軟件定義硬件?
文章出處:【微信號:阿寶1990,微信公眾號:阿寶1990】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論