在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

網絡處理器的應用場景

電子工程師 ? 來源:xx ? 2019-06-02 10:16 ? 次閱讀

這一篇談下網絡處理器。

曾幾何時,網絡處理器是高性能的代名詞。為數眾多的核心,強大的轉發(fā)能力,定制的總線拓撲,專用的的指令和微結構,許多優(yōu)秀設計思想沿用至今。Tilera,Freescale,Netlogic,Cavium,Marvell各顯神通。但是到了2018年,這些公司卻大多被收購,新聞上也不見了他們的身影,倒是交換芯片時不時冒出一些新秀。

隨著移動互聯網的興起,網絡設備總量實際上是在增加的。那為什么網絡芯片反而沒聲音了呢?究其原因有幾點:

第一, 電信行業(yè)利潤率持續(xù)減少。10年之前,Freescale的65納米雙核處理器,可以賣到40美金。如今同樣性能的28納米芯片,10美金都賣不到。而網絡處理器的量并不大,低端有百萬片已經挺不錯了,高端更是可能只有幾萬片。這使得工程費用無法均攤到可以忽略的地步,和手機的動輒幾億片沒法比。而單價上,和服務器上千美金的售價也沒法比。這就使得網絡處理器陷入一個尷尬境地。

第二, IP模式的興起。利潤的減少導致芯片公司難以維持專用處理器設計團隊。電信行業(yè)的開發(fā)周期普遍很長,而網絡處理器從立項到上量,至少需要5年時間,供貨周期更是長達15年。一個成熟的CPU團隊,需要80人左右,這還不算做指令集和基礎軟件的,全部加上超過100人。這樣的團隊開銷每年應該在2000萬刀。2000萬刀雖然不算一個很大的數字,可如果芯片毛利是40%,凈利可能只有10%,也就是要做到2億美金的銷售額才能維持。這還只是CPU團隊,其余的支出都沒包含。通常網絡芯片公司銷售額也就是5億美金,在利潤不夠維持處理器研發(fā)團隊后,只能使用通用的IP核,或者對原有CPU設計不做改動。另外,還要擔心其他高利潤公司來挖人。以Freescale為例,在使用PowerPC的最后幾年,改了緩存設計后,甚至連驗證的工程師都找不到了。

第三, 指令集的集中化。在五年前,網絡處理器還是MIPS和PowerPC的世界,兩個陣營后各有幾家在支持。當時出現了一個很有趣的現象,做網絡設備的OEM公司會主動告訴芯片公司,以后的世界,是x86和ARM指令集的世界,為了軟件的統(tǒng)一,請改成ARM指令集。在當時,ARM指令集在網絡界似乎只有Marvell一家在使用。而五年之后的現在,PowerPC和MIPS基本退出舞臺,只有一些老產品和家用網關還有它們的身影。

在網絡處理器領域,ARM并無技術和生態(tài)優(yōu)勢:技術上,MIPS大都是單核多線程的,支持自定義的指令集,對一些特定的網絡包處理添加新指令。而PowerPC很早就使用了Cache

Stashing等專用優(yōu)化技術,ARM直到近兩年才支持。即使使用了ARM指令集,Cavium和Netlogic還是自己設計微結構。生態(tài)上,電信產品的應用層軟件,都是OEM自定義的。底層操作系統(tǒng)LinuxVxWorks,對MIPS和PowerPC的支持并不亞于ARM。而中間層的軟件,虛擬機和數據轉發(fā),NFV等,網絡芯片公司之前也并不是依靠ARM來維護的。贏得網絡處理器市場還真是ARM的意外之喜。

第四, OEM公司自研芯片的崛起。思科,華為,中興等公司,早就開始自己做技術含量高的高端芯片,或者量大的低端芯片。對于高端產品,只有使用自研芯片才能搶到第一個上市,對于低端產品,就主要是成本考慮了。

讓我們看看網絡處理器到底能應用在哪些場景:

首先,是終端設備(手機/基站,wifi,光纖/Cable/ADSL等),連接到接入網,然后再匯聚到核心網。就節(jié)點吞吐量而言,大致可以分為幾類:

第一, 在終端,吞吐量在1Gbps級別,可以是手機,可以是光纖,可以是有線電視,也可以是Wifi,此時需要小型家庭路由器,無需專用網絡加速器,對接口有需求,比如ATM,光纖,以太網或者基帶芯片。

第二, 在基站或者邊緣數據中心,吞吐量在1Tbps級別,此時需要邊緣路由器,基站還需要FPGA或者DSP信號處理。

第三, 在電信端,吞吐量遠大于1Tbps,此時需要核心路由器,由專用芯片做轉發(fā)。

以上場景中,低端的只需要1-2核跑所有的數據面和控制面程序就行;對于中端應用,控制面需要單核能力強的處理器,數據面需要能效高,核數眾多的處理器和網絡加速器;高端路由器需要專用asic進行數據面處理,同時使用單核能力強的處理器做控制面。

這其中比較有爭議的是中端的數據面處理。對中斷路由器來說,業(yè)務層的協(xié)議處理,毫無疑問的該使用通用處理器;而一些計算密集的功能,比如模板檢測,加解密,壓縮,交換等,還是用asic做成模塊比較合適;對于隊列管理,保序,優(yōu)先級管理,資源管理等操作,就見仁見智了。從能效和芯片面積上來說,通用處理器做這些事肯定不是最優(yōu)的,但是它設計容錯性高,擴展性好,產品設計周期短,有著專用加速器無法取代的強項。硬件加速器本身會有bug,需要多次流片才能成熟,這非常不利于新產品的推廣,而通用處理器方案就能大大減少這個潛在風險。專用網絡加速器還有個很大的缺點,就是很難理解和使用,OEM如果要充分發(fā)揮其性能,一定需要芯片公司配合,把現有代碼移植,這其中的推廣時間可能需要幾年。不過有時候芯片公司也樂見其成,因為這樣一來,至少能把這一產品在某種程度上和自己捆綁一段時間。

再進一步,有些任務,如路由表的查找,適合用單核性能高的處理器來實現;有些任務,如包的業(yè)務代碼,天然適合多線程,用多個小核處理更好。這就把通用處理器部分也分化成兩塊,大核跑性能需求強的代碼,小核跑能效比需求強的代碼。大小核之間甚至可以運行同一個SMP操作系統(tǒng),實現代碼和數據硬件一致性。事實上,有些網絡處理器的加速器,正是用幾十上百個小CPU堆起來的。

在網絡芯片上,有兩個重要的基本指標,那就是接口線速和轉發(fā)能力。前者代表了接口能做到的數據吞吐量上限,后者代表了處理網絡包的能力。

如上圖,以太網包最小的長度是64字節(jié),這只是數字部分的長度。考慮到PHY層的話,還有8字節(jié)的Preamble和開始標志,外加幀間分隔,總共84字節(jié)。

對于1Gbps的以太網,能夠發(fā)送的以太網包理論上限是1.45Mpps(Million Packet Per Second)。相應的,處理器所能處理的包數只需要1.45Mpps,超出這個數字的能力是無用的。線速一定時,以太網包越大,所需的處理能力越低,所以在衡量處理器能力的時候,需用最小包;而在衡量網絡接口能力的時候,需要用最大包,來使得幀間浪費的字段達到最小比例。

下面是Freescale的LX2160網絡處理器的指標:

我們可以看到,共有24個28Gbps的Serdes口,對應的,2個100G以太網口需要8個Serdes口,而14個25G以太網口需要14個Serdes口,共22×25=550Gbps的吞吐率,最大需要800Mpps的處理能力。分散到16個核,每個核需要50Mpps的轉發(fā)能力,對應到2.2Ghz的處理器,也就是44個時鐘周期處理一個包。事實上,這是不現實的。通常,一個包經過Linux協(xié)議棧,即使什么都不做,也需要1500個時鐘周期,就算使用專業(yè)轉發(fā)軟件,至少也需要80個左右。所以,最小64字節(jié)包只是一個衡量手段,跑業(yè)務的時候肯定需要盡量使用大包。

所以,在定義網絡處理器的規(guī)格時,需要在線速和處理能力上做平衡。

上圖是Freescale的LX2160網絡處理器內部模塊圖。按照之前的線速和處理能力來看,可以分為三塊:

第一, 處理器部分。這里是16個A72核,每兩個放在一個組里,分配1MB二級緩存。在手機上,通常是四個核放在一組,這里為什么是兩個?因為網絡處理主要是針對包的各種處理,更偏重于IO和訪存的能力,而不僅僅是計算。在處理包時,不光是網絡包的數據需要讀進處理器,還需要讀入各種參數,來完成對包的處理。這些參數針對每個包會有所不同,緩存可能是放不下的,需要從內存讀取。這就造成了需要相對較大的帶寬。在架構篇,我們定量計算過,當只有一個處理器在做數據讀取的時候(假設都不在緩存),瓶頸在核的對外接口BIU,而四個核同時讀取,瓶頸在ACE接口。這就是每組內只放兩個核而不是四個的原因。而處理器總的核數,很大程度上決定了網絡處理器的包處理能力。

第二, 接口部分。網絡處理器通常會把控制器(以太網,SATA,PCIe等)和高速串行總線口Serdes復用,做成可配置的形式,提高控制器利用率,節(jié)省面積。這里使用了24對差分線,每條通道支持25Gbps。高速串行總線設計也是一個難點,經常會有各種串擾,噪聲,抖動等問題,搞不好就得重新流片。(推薦閱讀:又見山人:為什么串口比并口快?)

第三, 網絡加速器,上圖中的WRIOP和QB-Man屬于網絡加速器。這是網絡處理器精華的設計,其基本功能并不復雜,如下圖:

一個包從以太網進來,如果沒有以太網加速器,那會被以太網控制器用DMA的方式放到內存,然后就丟給CPU了。而硬件加速器的作用,主要是對包的指定字段進行分析,打時間戳,然后分類并分發(fā)到特定的隊列。而這些隊列,在經過重映射后,會提供給CPU來處理。這其中還牽涉到隊列關系,優(yōu)先級,限速,排序,內存管理等功能。加解密模塊可以看作獨立的模塊。就我所見,網絡加速器需要和所有處理器之和相近的面積。

我們來看看一個包到底在網絡處理器會經歷哪些步驟:

首先,CPU調用以太網驅動,設置好入口(Ingress)描述符。以太網控制器根據描Ingress述符將Serdes傳來的包,DMA到指定內存地址,然后設置標志位,讓CPU通過中斷或者輪詢的方式接收通知。然后CPU把包頭或者負載讀取到緩存,做一定操作,然后寫回到出口(Egress)描述符所指定的內存,并再次設置標志位,通知以太網控制器發(fā)包。Ingress和Egress包所存放的地址是不同的。以太網控制器根據Egress描述符將包發(fā)送到Serdes,并更新描述符狀態(tài)。

將上述步驟實現到上圖的系統(tǒng)中,并拆解成總線傳輸,是這樣的(假定代碼及其數據在一二級緩存中):

1. CPU寫若干次以太網控制器(10-40GbE)的寄存器(Non-cacheable)

2. CPU讀若干次以太網控制器(10-40GbE)的狀態(tài)寄存器(Non-cacheable)

3. 以太網控制器(10-40GbE)進行若干次DMA,將數據從PHY搬到內存

4. CPU從內存讀入所需包頭數據,做相應修改

5. CPU寫入內存所需數據

6. CPU寫若干次以太網控制器(10-40GbE)的寄存器(Non-cacheable)

7. 以太網控制器(10-40GbE)進行若干次DMA,將數據從內存搬到PHY,并更新內部寄存器

8. CPU讀若干次以太網控制器(10-40GbE)的狀態(tài)寄存器(Non-cacheable)

以上8步所需時間通常為:

1. 1x以太網寄存器訪問延遲 。假定為20ns。

2. 1x以太網寄存器訪問延遲。假定為20ns。

3. 以太網控制器寫入DDR的延遲。假設是最小包,64字節(jié)的話,延遲x1。如果是大包,可能存在并發(fā)。但是和第一步中CPU對寄存器的寫入存在依賴關系,所以不會小于延遲x1。假定為100ns。

4. CPU從DDR讀入數據的延遲。如果只需包頭,那就是64字節(jié),通常和緩存行同樣大小,延遲x1。假定為100ns。

5. CPU寫入DDR延遲x1。假定為100ns。

6. 1x以太網寄存器訪問延遲 。假定為20ns。

7. 以太網從DDR把數據搬到PHY,延遲至少x1。假定為100ns。

8. 1x以太網寄存器訪問延遲。假定為20ns。

2和3,7和8是可以同時進行的,取最大值。其余的都有依賴關系,可以看做流水線上的一拍。其中4,5和6都在CPU上先后進行,針對同一包的處理,它們無法并行(同一CPU上的不同包之間這幾步是可以并行的)。當執(zhí)行到第6步時, CPU只需要將所有非cacheable的寫操作,按照次序發(fā)出請求即可,無需等待寫回應就可以去干別的指令。這樣,可以把最后一步的 所流水線中最大的延遲縮小到100+20+100共220ns以下的某個值。當然,因為ARM處理器上non-cacheable的傳輸,在對內部很多都是強制排序的,無法并行,總線也不會提早發(fā)送提前回應(early response),所以總延遲也就沒法減少太多。

上面的計算意味著,CPU交換一下源和目的地址,做一下簡單的小包轉發(fā),流水后每個包所需平均延遲是220ns。同時,增大帶寬和CPU數量并不會減少這個平均延遲,提高CPU頻率也不會有太大幫助,因為延遲主要耗費在總線和DDDR的訪問上。提高總線和DDR速度倒是有助于縮短這個延遲,不過通常能提高的頻率有限,不會有成倍提升。

那還有什么辦法嗎?一個最直接的辦法就是增加SRAM,把SRAM作為數據交換場所,而不需要到內存。為了更有效的利用SRAM,可以讓以太網控制器只把包頭放進去,負載還是放在放DDR,描述符里面指明地址即可。這個方法的缺點也很明顯:SRAM需要單獨的地址空間,需要特別的驅動來支持。不做網絡轉發(fā)的時候,如果是跑通用的應用程序,不容易被利用,造成面積浪費。

第二個方法是增加系統(tǒng)緩存,所有對DDR的訪問都要經過它。它可以只對特殊的傳輸分配緩存行,而忽略其余訪問。好處是不需要獨立的地址空間,缺點是包頭和負載必須要指定不同的緩存分配策略。不然負載太大,會占用不必要的緩存行。和SRAM一樣,包頭和負載必須放在不同的頁表中,地址不連續(xù)。

在有些處理器中,會把前兩個方法合成,對一塊大面積的片上內存,同時放緩存控制器和SRAM控制器,兩種模式可以互切。

第三個方法,就是在基礎篇提到的Cache stashing,是對第二種方法的改進。在這里,包頭和負載都可以是cacheable的,包頭被以太網控制器直接塞到某個CPU的私有緩存,而負載則放到內存或者系統(tǒng)級緩存。在地址上,由于緩存策略一致,它們可以是連續(xù)的,也可以分開。當CPU需要讀取包頭時,可以直接從私有緩存讀取,延遲肯定短于SRAM,系統(tǒng)緩存或者DDR。再靈活一點,如果CPU需要更高層協(xié)議的包頭,可以在以太網控制器增加Cache sashing的緩存行數。由于以太網包的包頭一定排列在前面,所以可以將高層協(xié)議所需的信息也直接送入某個CPU一二級私有緩存。對于當中不會用到的部分負載,可以設成non-cacheable的,減少系統(tǒng)緩存的分配。這樣的設計,需要把整個以太網包分成兩段,每一段使用不同的地址空間和緩存策略,并使用類似Scatter-Gather的技術,分別做DMA,增加效率。這些操作都可以在以太網控制器用硬件和驅動實現,無需改變處理器的通用性。

此外,有一個小的改進,就是增加緩存行對CPU,虛擬機,線程ID或者某個網絡加速器的敏感性,使得某些系統(tǒng)緩存行只為某個特定ID分配緩存行,可以提高一些效率。

以上解決了CPU讀包頭的問題,還有寫的問題。如果包頭是Cacheable的,不必等待寫入DDR之后才收到寫回應,所以時間可以遠小于100ns。至于寫緩存本身所需的讀取操作,可以通過無效化某緩存行來避免,這在基礎篇有過介紹。這樣,寫延遲可以按照10-20ns計算。

以太網控制器看到Egress的寄存器狀態(tài)改動之后,也不必等待數據寫到DDR,就可以直接讀。由于存在ACE/ACE-lite的硬件一致性,數據無論是在私有緩存,系統(tǒng)緩存還是DDR,都是有完整性保證的。這樣一來,總共不到50ns的時間就可以了。同理,Ingress通路上以太網控制器的寫操作,也可以由于緩存硬件一致性操作而大大減少。

相對于第二種方法,除了延遲更短,最大的好處就是,在私有緩存中,只要被cache stashing進來的數據在不久的將來被用到,不用擔心被別的CPU線程替換出去。Intel做過一些研究,這時間是200ns。針對不同的系統(tǒng)和應用,肯定會不一樣,僅作參考。

讓我們重新計算下此時的包處理延遲:

原來的第四步,CPU讀操作顯然可以降到10ns之下。

訪問寄存器的時間不變。

CPU寫延遲可以按照10-20ns計算。

總時間從220降到了50ns以下,四倍。

不過,支持Cache Stashing需要AMBA5的CHI協(xié)議,僅僅有ACE接口是不夠的。CPU,總線和以太網控制器需要同時支持才能生效。如果采用ARM的CPU設計,需要最新的A75/A55才有可能。總線方面,A75/A55自帶的ACP端口可用于20GB以下吞吐量的Cache Stashing,適合簡單場景,而大型的就需要專用的CMN600總線以支持企業(yè)級應用了。還有一種可能,就是自己做CPU微架構和總線,就可以避開CHI/ACE協(xié)議的限制了。

Intel把cache stashing稱作Direct Cache Access,并且打通了PCIe和以太網卡,只要全套采用Intel方案,并使用DPDK軟件做轉發(fā),就可以看到80時鐘周期,30-40ns的轉發(fā)延遲。其中,DPDK省卻了Linux協(xié)議棧2000時鐘周期左右的額外操作,再配合全套硬件機制,發(fā)揮出CPU的最大能力。

這個40ns,其實已經超越了很多網絡硬件加速器的轉發(fā)延遲。舉個例子,Freescale前幾年基于PowerPC的網絡處理器,在內部其實也支持Cache Stashing。但是其硬件的轉發(fā)延遲,卻達到了100ns。究其原因,是因為在使用了硬件加速器后,其中的隊列管理相當復雜,CPU為了拿到隊列管理器分發(fā)給自己的包,需要設置4次以上的寄存器。并且,這些寄存器操作無法合并與并行,使得之前的8步中只需20ns的寄存器操作,變成了80ns,超越CPU的數據操作延遲,成為整個流水中的瓶頸。結果在標準的純轉發(fā)測試中,硬件轉發(fā)還不如x86軟件來的快。

除了減少延遲,系統(tǒng)DDR帶寬和隨之而來的功耗也可以減少。Intel曾經做過一個統(tǒng)計,如果對全部的包內容使用cache,對于256字節(jié)(控制包)和1518字節(jié)(大包),分別可以減少40-50%的帶寬。如下圖:

當然,由于芯片緩存大小和配置的不同,其他的芯片肯定會有不同結果。

包轉發(fā)只是測試項中比較重要的一條。在加入加解密,壓縮,關鍵字檢測,各種查表等等操作后,整個轉發(fā)延遲會增加至幾千甚至上萬時鐘周期。這時候,硬件加速器的好處就顯現出來了。也就是說,如果一個包進來按部就班的走完所有的加速器步驟,那能效比和性能面積比自然是加速器高。但是,通常情況下,很多功能都是用不到的,而這些不常用功能模塊,自然也就是面積和成本。

整理完基本數據通路,我們來看看完整的網絡加速器有哪些任務。以下是標準的Ingress通路上的處理流程:

主要是收包,分配和管理緩沖,數據搬移,字段檢測和分類,隊列管理和分發(fā)。

Egress通路上的處理流程如下:

主要是隊列管理和分發(fā),限速,分配和管理緩沖,數據搬移。

在Ingress和Egress共有的部分中,最復雜的模塊是緩沖管理和隊列管理,它們的任務分別如下:

緩沖管理:緩沖池的分配和釋放;描述符的添加和刪除;資源統(tǒng)計與報警;

隊列管理:維護MAC到CPU的隊列重映射表,入隊和出隊管理;包的保序和QoS;CPU緩存的預熱,對齊;根據預設的分流策略,均衡每個CPU的負載

這些任務大部分都不是純計算任務,而是一個硬件化的內存管理和隊列管理。事實上,在新的網絡加速器設計中,這些所謂的硬件化的部分,是由一系列專用小核加C代碼完成的。因此,完全可以再進一步,去掉網絡加速器,使用SMP的多組通用處理器來做純軟件的隊列和緩沖管理,只保留存在大量計算或者簡單操作的硬件模塊掛在總線上。

再來看下之前的芯片模塊,我們保留加解密和壓縮引擎,去除隊列和緩存管理QB-Man,把WRIOP換成A53甚至更低端的小核,關鍵字功能檢測可以用小核來實現。

網絡處理上還有一些小的技術,如下:

Scattter Gather:前文提過,這可以處理分散的包頭和負載,直接把多塊數據DMA到最終的目的地,CPU不用參與拷貝操作。這個在以太網控制器里可以輕易實現。

Checksum:用集成在以太網控制器里面的小模塊對數據包進行校驗和編碼,每個包都需要做一次,可以用很小的代價來替代CPU的工作。

Interrupt aggregation:通過合并多個包的中斷請求來降低中斷響應的平均開銷。在Linux和一些操作系統(tǒng)里面,響應中斷和上下文切換需要毫秒級的時間,過多的中斷導致真正處理包的時間變少。這個在以太網控制器里可以輕易實現。

Rate limiter:包發(fā)送限速,防止某個MAC口發(fā)送速度超過限速。這個用軟件做比較難做的精確,而以太網控制器可以輕易計算單位時間內的發(fā)送字節(jié)數,容易實現。

Load balancing, Qos:之前主要是在闡述如何對單個包進行處理。對于多個包,由于網絡包之間天然無依賴關系,所以很容易通過負載均衡把他們分發(fā)到各個處理器。那到底這個分發(fā)誰來做?專門分配一個核用軟件做當然是可以的,還可以支持靈活的分發(fā)策略。但是這樣一來,可能會需要額外的拷貝,Cache stashing所減少的延遲優(yōu)勢也會消失。另外一個方法是在每一個以太網控制器里設置簡單的隊列(帶優(yōu)先級的多個Ring buffer之類的設計),和CPU號,線程ID或者虛擬機ID綁定。以太網控制器在對包頭里的目的地址或者源地址做簡單判斷后,可以直接塞到相應的緩存或者DDR地址,供各個CPU來讀取。如果有多個以太網控制器也沒關系,每一個控制器針對每個CPU都可以配置不同的地址,讓CPU上的軟件來決定自己所屬隊列的讀取策略,避免固化。

把這個技術用到PCIe的接口和網卡上,加入虛擬機ID的支持,就成了srIOV。PCIe控制器直接把以太網數據DMA到虛擬機所能看到的地址(同時也可使用Cache stashing),不引起異常,提高效率。這需要虛擬機中所謂的穿透模式支持IO(或者說外設)的虛擬化,在安全篇中有過介紹,此處就不再展開。同樣的,SoC內嵌的以太網處理器,在增加了系統(tǒng)MMU之后,同樣也可以省略PCIe的接口,實現虛擬化,直接和虛擬機做數據高效傳輸。

解決了負載均衡的問題,接下去就要看怎么做包的處理了。有幾種經典的方法:

第一是按照包來分,在一個核上做完某一特征數據包流所有的任務,然后發(fā)包。好處是包的數據就在本地緩存,壞處是如果所有代碼都跑在一個核,所用到的參數可能過多,還是需要到DDR或者系統(tǒng)緩存去取;也有可能代碼分支過多,CPU里面的分支預測緩沖不夠大,包處理程序再次回到某處代碼時,還是會產生預測失敗。

第二是按照任務的不同階段來分,每個核做一部分任務,所有的包都流過每一個核。優(yōu)缺點和上一條相反。

第三種就是前兩者的混合,每一組核處理一個特定的數據流,組里再按照流水分階段處理。這樣可以根據業(yè)務代碼來決定靈活性。

在以上的包處理程序中,一定會有一些操作是需要跨核的,比如對路由表的操作,統(tǒng)計數據的更新等。其中的一個重要原則就是:能不用鎖就不要用鎖,用了鎖也需要使用效率最高的。

舉個例子,如果需要實現一個計數器,統(tǒng)計N個CPU上最終處理過的包。首先,我們可以設計一個緩存行對齊的數據結構,包含若N+1個計數器,其中每一個計數器占據一行。每個CPU周期性的寫入自己對應的那個計數器。由于計數器占據不同緩存行,所以寫入操作不會引起額外的Invalidation,也不會把更新過的數據踢到DDR。最后,有一個獨立的線程,不斷讀取前面N個計數器的值,累加到第N+1個計數器。在讀取的時候,不會引起Invalidation和eviction。此處不需要軟件鎖來防止多個線程對同一變量的操作,因為此處計數器的寫和讀并不需要嚴格的先后次序,只需要保證硬件一致性即可。

在不得不使用鎖的時候,也要保證它的效率。軟件上的各種實現這里就不討論了,在硬件上,Cacheable的鎖變量及其操作最終會體現為兩種形式:

第一, exclusive Access。原理是,對于一個緩存行里的變量,如果需要更新,必須先讀然后寫。當進行了一次讀之后,進入鎖定狀態(tài)。期間如果有別的CPU對這個變量進行訪問,鎖定狀態(tài)就會被取消,軟件必須重復第一步;如果沒有,就成功寫入。這個原理被用來實現spinlock函數。根據硬件一致性協(xié)議MESI,處在兩個CPU中的線程,同時對某一個變量讀寫的話,數據會不斷在各自的私有緩存或者共享緩存中來回傳遞,而不會保持在最快的一級緩存。這樣顯然降低效率。多個CPU組之間的exclusive Access效率更低。

第二, 原子操作。在ARMv8.2新的原子操作實現上,修改鎖變量的操作可以在緩存控制器上實現,不需要送到CPU流水線。這個緩存可以使私有緩存,也可以是共享的系統(tǒng)緩存。和exclusive access相比較,省去了鎖定狀態(tài)失敗后額外的輪詢。不過這個需要系統(tǒng)總線和CPU的緩存支持本地更新操作,不然還是要反復讀到每個CPU的流水線上才能更新數據。我在基礎篇中舉過例子,這種做法反而可能引起總線掛起,降低系統(tǒng)效率。

如果一定要跑Linux系統(tǒng),那么一定要減少中斷,內核切換,線程切換的時間。對應的,可以采用輪詢,線程綁定CPU和用戶態(tài)驅動來實現。此外,還可以采用大頁表模式,減少頁缺失的時間。這樣,可以把標準Linux內核協(xié)議棧的2000左右時鐘周期縮到幾十納秒,這也就是DPDK和商業(yè)網絡轉發(fā)軟件效率高的原因。

最后稍稍談下固態(tài)存儲。企業(yè)級的固態(tài)硬盤存儲芯片,芯片基本結構如下:

如上圖,芯片分為前端和后端兩塊,前端處理來自PCIe的命令和數據,并把數據塊映射到最終nand顆粒。同時,還要做負載均衡,磨損均衡,垃圾回收,陣列控制等工作,略過不表。這些都是可以用通用處理器來完成的,差不多每1M的隨機IOPS需要8個跑在1GHz左右的A7處理器來支撐,每TB的NAND陣列,差不多需要1GB的DDR內存來存放映射表等信息。其余的一些壓縮,加解密等,可以通過專用模塊完成。后端要是作為ONFI的接口控制器,真正的從NAND里面讀寫數據,同時做LDPC生成和校驗。

如果單看前端,會發(fā)現其實和網絡處理非常像,查表,轉發(fā),負載均衡,都能找到對應的功能。不同的是,存儲的應用非常固定,不需要錯綜復雜的業(yè)務流程,只需處理幾種類型的命令和數據塊就可以了。

一個存儲系統(tǒng)的硬件成本,閃存才是大頭,占據了85%以上,還經常缺貨。而閃存系統(tǒng)的毛利并不高,這也導致了固態(tài)存儲控制器價格有限,哪怕是企業(yè)級的芯片,性能超出消費類幾十倍,也無法像服務器那樣擁有高利潤。

一個潛在的解決方法,是把網絡也集成到存儲芯片中,并且跑Linux。這樣,固態(tài)硬盤由原來插在x86服務器上的一個PCIe設備,搖身一變成為一個網絡節(jié)點,從而省掉了原來的服務器芯片及其內存(可別小看內存,它在一臺服務器里面可以占到三分之一的成本)。

如上圖,可以把SPDK,DPDK,用戶態(tài)驅動和用戶態(tài)文件系統(tǒng)運行在一個芯片中,讓一個網絡包進來,不走內核網絡協(xié)議棧和文件系統(tǒng),直接從網絡數據變成閃存上的文件塊。在上層,運行類似CEPH之類的軟件,把芯片實例化成一個網絡存儲節(jié)點。大致估算一下,這樣的單芯片方案需要16核A53級別的處理器,運行在1.5GHz以下,在28納米上,可以做到5-10瓦,遠低于原來的服務器。

不過這個模式目前也存在著很大的問題。真正做存儲芯片的公司,并不敢花大力氣去推這種方案,因為它牽涉到了存儲系統(tǒng)的基礎架構變化,超出芯片公司的能力范疇,也不敢冒險去做這些改動。只有OEM和擁有大量數據中心互聯網公司才能去定義,不過卻苦于沒有合適的單芯片方案。而且數據中心未必看得上省這點成本,畢竟成本大頭在服務器芯片,內存以及機架電源

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • 處理器
    +關注

    關注

    68

    文章

    19658

    瀏覽量

    232465
  • 網絡處理器
    +關注

    關注

    0

    文章

    49

    瀏覽量

    14150
收藏 人收藏

    評論

    相關推薦

    NanoEdge AI的技術原理、應用場景及優(yōu)勢

    能耗并提高數據安全性。本文將對 NanoEdge AI 的技術原理、應用場景以及優(yōu)勢進行綜述。 1、技術原理 NanoEdge AI 的核心技術包括邊緣計算、神經網絡壓縮和低功耗硬件設計。邊緣計算
    發(fā)表于 03-12 08:09

    淺談國產異構雙核RISC-V+FPGA處理器AG32VF407的優(yōu)勢和應用場景

    關于國產異構雙核RISC-V+FPGA處理器AG32VF407的具體優(yōu)勢和應用場景淺談如下: 優(yōu)勢 異構計算能力 : 異構雙核設計結合了RISC-V的高效指令集和FPGA的靈活可編程性,能夠針對特定
    發(fā)表于 08-31 08:32

    頻率計數的技術原理和應用場景

    頻率計數,又稱頻率計,是一種專門用于測量信號頻率的電子測量儀器。以下是對其技術原理和應用場景的詳細分析:一、技術原理頻率計數的技術原理基于周期計數技術,即將已知時間長度的標準時鐘信號與被測信號
    發(fā)表于 10-18 14:03

    倍頻的技術原理和應用場景

    倍頻是一種用于將輸入信號的頻率倍增的電子設備,以下是關于倍頻的技術原理和應用場景的詳細解釋:技術原理倍頻的技術原理主要基于非線性元件(如二極管、晶體管等)的特性和頻率變換技術。
    發(fā)表于 11-29 14:49

    射頻網絡分析儀的原理和應用場景

    顯示比對。 處理顯示單元:對測試結果進行處理和顯示。處理顯示單元通過圖形處理器、高亮LCD顯示等組件,直觀地展示測試結果。 射頻
    發(fā)表于 01-10 14:09

    時域網絡分析儀的原理和應用場景

    時域網絡分析儀,特別是矢量網絡分析儀,不僅具備頻域的S參數測量功能,還擴展了時域測量功能。以下是對其原理和應用場景的詳細解析:原理 基礎功能:矢量網絡分析儀的基礎功能是頻域的S參數測量
    發(fā)表于 01-13 16:03

    微波網絡分析儀的原理和應用場景

    微波網絡分析儀(Vector Network Analyzer,簡稱VNA)是一種用于測試和測量微波頻段元件和網絡特性的電子測試設備。以下是對微波網絡分析儀的原理及應用場景的詳細解析:
    發(fā)表于 01-15 14:56

    數據網絡分析儀的原理和應用場景

    數據網絡分析儀的原理和應用場景可以分別闡述如下:一、數據網絡分析儀的原理數據網絡分析儀的原理主要涉及以下幾個方面: 數據捕獲:網絡分析儀通過
    發(fā)表于 01-16 14:57

    敏捷合成器的技術原理和應用場景

    敏捷合成器,作為一種高性能的信號發(fā)生,其技術原理和應用場景值得深入探討。技術原理敏捷合成器的技術原理主要基于先進的頻率合成技術和數字信號處理技術。它通常具有寬頻率范圍、快速建立和可編程的相位、頻率
    發(fā)表于 02-20 15:25

    消息隊列的應用場景

      1、異步處理  場景說明:用戶注冊后,需要發(fā)注冊郵件和注冊短信。傳統(tǒng)的做法有兩種:串行的方式和并行方式。  串行方式:將注冊信息寫入數據庫成功后,發(fā)送注冊郵件,再發(fā)送注冊短信。以上三個任務全部
    發(fā)表于 06-23 10:19

    網絡處理器,什么是網絡處理器

    網絡處理器,什么是網絡處理器 網絡處理器是將ASIC (專用集成電路)的速度和一個CPU結合起
    發(fā)表于 04-03 14:10 ?801次閱讀

    基于RISC-V指令集Egret系列處理器的性能及應用場景

    在risc-v峰會上由廈門半導體投資集團有限公司的王旭給我們介紹了基于RISC-V指令集的Egret系列處理器,分別從特性、應用場景、優(yōu)勢等幾個方面對這個系列的處理器進行了詳細的展現。
    發(fā)表于 06-22 15:36 ?2309次閱讀
    基于RISC-V指令集Egret系列<b class='flag-5'>處理器</b>的性能及應<b class='flag-5'>用場景</b>

    網絡音頻模塊有哪些應用場景

    對音頻信號進行編解碼、處理和轉換,支持多種音頻格式和協(xié)議,例如MP3、AAC、G.711等。網絡音頻模塊可以實現單向或雙向的語音通信,也可以實現多路的語音廣播。 網絡音頻模塊有哪些應用場景
    的頭像 發(fā)表于 05-16 10:24 ?852次閱讀
    <b class='flag-5'>網絡</b>音頻模塊有哪些應<b class='flag-5'>用場景</b>?

    盛顯科技:投影融合處理器主要的應用場景有哪些?

    、?高分辨率的整幅畫面。?其應用場景非常廣泛,涵蓋了多個領域。那么您知道投影融合處理器主要的應用場景有哪些嗎?下面盛顯科技小編為您介紹: ? 投影融合處理器主要的應
    的頭像 發(fā)表于 09-11 12:49 ?411次閱讀
    盛顯科技:投影融合<b class='flag-5'>處理器</b>主要的應<b class='flag-5'>用場景</b>有哪些?

    盛顯科技:超高分媒體處理器的應用場景有哪些?

    現如今,隨著顯示技術的不斷發(fā)展和應用需求的不斷增加,超高分媒體處理器作為一種在多媒體處理和顯示領域具有重要地位的設備,以其超高分辨率支持、強大的視頻解碼能力、豐富的圖像處理技術以及廣泛的應用場
    的頭像 發(fā)表于 09-19 17:47 ?414次閱讀
    主站蜘蛛池模板: 欧美猛交lxxxxxxxxx | 天堂资源中文在线 | 欧美一级欧美三级在线观看 | 午夜精品视频在线看 | 国产精品美女久久久久网站 | 国产精品国产三级国快看 | 国产一区二区高清在线 | 日日草天天干 | 国产精品毛片一区二区三区 | 亚洲欧美一区二区三区麻豆 | 奇米影视777狠狠狠888不卡 | 香蕉视频久久久 | 久久久久免费精品国产小说 | 天堂新版www中文 | 四虎最新永久在线精品免费 | 99国产国人青青视频在线观看 | 成 年 人 视频在线播放 | 精品色视频| 操久在线 | 黄.www | 国产毛片久久久久久国产毛片 | 日本大片黄色 | 模特视频一二三区 | 亚洲成a人片在线看 | 国产精品美女免费视频大全 | 91md天美精东蜜桃传媒在线 | 激情综合五月 | 日韩三级中文字幕 | vvvv98国产成人综合青青 | 黑人破乌克兰美女处 | 激情综合五月 | 精品国产麻豆免费人成网站 | 视频精品一区二区三区 | 国内免费视频成人精品 | 涩涩涩综合在线亚洲第一 | 手机看片福利 | 午夜小视频免费 | 国产高清美女一级a毛片 | 激情在线播放免费视频高清 | 久久久夜色精品国产噜噜 | 免费午夜视频在线观看 |