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