版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、Good is good, but better carries it.精益求精,善益求善。Intel網(wǎng)絡(luò)處理器概述-第十四章Intel網(wǎng)絡(luò)處理器概述前面我們討論了網(wǎng)絡(luò)處理器的一般問題,從本章開始我們將深入討論一個特定的網(wǎng)絡(luò)處理器-Intel網(wǎng)絡(luò)處理器,以便對前面介紹的一般概念提供一個具體的說明。(1)IXA術(shù)語IXA(InterneteXchangeArchitecture)泛指Intel網(wǎng)絡(luò)處理器體系結(jié)構(gòu)以及相關(guān)的支持芯片。盡管IXA主要集中在網(wǎng)絡(luò)處理器硬件,它也包括軟件體系結(jié)構(gòu),因為如果不預(yù)想使用硬件的軟件,可編程硬件是無法定義的。IXA包括控制面(慢路徑)和數(shù)據(jù)面(快路徑)處理,定義了
2、硬件抽象、應(yīng)用編程接口和互連機制,但是沒有給出細節(jié),IXA只是給出了概念組織。IXA中有如下三個重要組成部分:微引擎(Microengine,ME):微引擎是Intel網(wǎng)絡(luò)處理器的核心部件,也是Intel處理器取得線速處理性能的關(guān)鍵,在其它功能單元的支持下執(zhí)行快路徑上的包處理。XScaleCore:XScale核是Intel網(wǎng)絡(luò)處理器的高層控制和管理單元,是與StrongARM兼容的一種微處理器,負責(zé)控制面的處理任務(wù)以及異常數(shù)據(jù)包的處理,上面運行VxWorks、嵌入式Linux等實時操作系統(tǒng)。IXA可移植框架(IXAPortabilityFramework):為基于Intel網(wǎng)絡(luò)處理器的軟件開
3、發(fā)提供應(yīng)用編程接口和硬件抽象,使得運行在XScale核和微引擎上的軟件具有良好的可移植性和可重用性。開發(fā)者對新一代網(wǎng)絡(luò)處理器的要求包括四個方面:靈活性,高性能,可擴展性和可移植性。IXA能夠滿足這四個方面的要求。靈活性:在IXA架構(gòu)的網(wǎng)絡(luò)處理器中,微引擎完全可編程,在低層硬件設(shè)備的支持下可實現(xiàn)許多復(fù)雜的網(wǎng)絡(luò)處理功能,具有較好的功能靈活性。高性能:IXA架構(gòu)的網(wǎng)絡(luò)處理器使用多個可并行操作的微引擎,通過增加微引擎的數(shù)目、提高微引擎和XScale核的時鐘頻率、采用新技術(shù)減小存儲器訪問延時以及增加專用硬件功能單元,可使網(wǎng)絡(luò)處理器線速處理高達OC-192的網(wǎng)絡(luò)數(shù)據(jù),具備了網(wǎng)絡(luò)寬帶化所要求的高性能??蓴U展
4、性:通過增加微引擎的數(shù)目以及提高微引擎和XScale核的時鐘頻率,可使網(wǎng)絡(luò)處理器達到OC-192的高端處理速率,具有良好的可擴展性??梢浦残裕篒XA可移植框架提供了應(yīng)用編程接口和硬件抽象,使得基于該框架開發(fā)的軟件與底層硬件實現(xiàn)松耦合,具有良好的可移植性和重用性。(2)IXP術(shù)語IXP(InterneteXchangeProcessor)指實現(xiàn)了IXA架構(gòu)的網(wǎng)絡(luò)處理器芯片。盡管每一種IXP設(shè)計必須遵循IXA架構(gòu),但是不同的IXP可以定義自己的細節(jié),比如片上功能單元的數(shù)量和種類、處理器的并行程度、存儲器的大小以及內(nèi)部數(shù)據(jù)帶寬等。IXP網(wǎng)絡(luò)處理器典型地包括一個XScale核、多個微引擎、存儲器、若干
5、硬件功能單元、與各種外部連接的接口、內(nèi)部總線等。Intel提供了多種IXP網(wǎng)絡(luò)處理器芯片,目前已是第二代產(chǎn)品。第一代產(chǎn)品與第二代產(chǎn)品的區(qū)別包括并行程度(即片上處理器的數(shù)量)、物理接口、芯片封裝、功率消耗、硬件功能特性(如用于加密的硬件加速器)等方面的差異。圖14-1列出了三款第二代IXP網(wǎng)絡(luò)處理器。IXP2400主要面向OC-12到OC-48/2.5Gbps的網(wǎng)絡(luò)接入和邊緣網(wǎng)應(yīng)用,有8個微引擎,每秒可完成超過50億次的操作,可應(yīng)用于WAN多服務(wù)交換、DSLAM、基站控制器和網(wǎng)關(guān)、47層交換、VoIP網(wǎng)關(guān)、多服務(wù)接入平臺、高端路由器和VPN等。IXP2800主要面向OC-48么OC-192/10
6、Gbps的邊緣網(wǎng)和核心網(wǎng)應(yīng)用,有16個微引擎,每秒可完成超過250億次的操作,可應(yīng)用于骨干網(wǎng)的路由與交換、無線設(shè)備、IPSec和VPN、10Gbps的企業(yè)交換和路由等。IXP2850在IXP2800的基礎(chǔ)上增加了加密單元,可達到10Gbit/s的加/解密速度,可用于IPSec、VPN、QoSRouter等場合。通常用IXP2xxx泛指其中的任何一款網(wǎng)絡(luò)處理器芯片。圖14-1Intel第二代IXP網(wǎng)絡(luò)處理器(3)IXP2xxx的主要部件一個IXP網(wǎng)絡(luò)處理器是一塊獨立的芯片,它包含了一組復(fù)雜的可編程及不可編程的處理器和功能單元。以下是IXP2xxx芯片中的主要部件:一個嵌入式RISC處理器8到16
7、個可編程包處理器多條獨立的片上總線:提供芯片內(nèi)部各功能單元之間的高速通道,包括多組單向高速數(shù)據(jù)總線和命令總線;處理器同步機制共享和不共享的片上存儲器:每個微引擎內(nèi)部有專用的本地存儲器,芯片內(nèi)部還有共享的Scratchpad存儲器;一個低速串行接口:連接到XScale核,主要用于控制和管理;多個外部存儲器接口:連接外部SRAM、DRAM及ROM(或FlashROM)等;多個外部I/O總線接口:PCI總線接口及MSF接口;計算哈希和加密的協(xié)處理器其它功能單元(4)外部連接圖14-2給出了IXP2xxx支持的主要外部連接。IXP2xxx有四類外部連接:一個串行接口,三個外部I/O總線接口,兩個外部存
8、儲總線接口,一個低速設(shè)備接口。圖14-3列出了IXP2400主要連接的速度。每個IXP2xxx芯片包含一個通用異步收發(fā)器(UART)硬件,提供到傳統(tǒng)串行線路的接口,串行線連接到嵌入式RISC處理器。由于串口主要用于控制和管理功能,因此它并不像其它I/O接口那樣運行在高速度。所以,盡管程序員可以選擇通過它傳輸數(shù)據(jù),串口并不適合用于快路徑。IXP2xxx芯片中的PCI(PeripheralComponentInterconnect)總線提供兩個主要功能。第一,允許一個IXP2xxx連接到I/O設(shè)備(如磁盤);第二,允許設(shè)計者使用傳統(tǒng)的CPU作為通用控制處理器。由于PCI技術(shù)非常流行,許多I/O設(shè)備
9、遵循這個標準。盡管PCI技術(shù)非常流行,但是其整體的吞吐量限制在大約2.2Gbps。為處理更高的數(shù)據(jù)速率,IXP2xxx使用了一個媒體或交換結(jié)構(gòu)(MediaorSwitchFabricInterface,MSF)接口。MSF是IXP2xxx與外部物理層設(shè)備(PHY)及交換結(jié)構(gòu)的接口單元,是數(shù)據(jù)出入IXP2xxx的窗口。MSF通過Utopia、SPI協(xié)議與PHY接口,通過CSIX與交換結(jié)構(gòu)接口。Utopia、SPI和CSIX都是標準化協(xié)議,Utopia用于接收ATM格式的包,SPI用于接收POS格式的包,CSIX是IXP2xxx與交換結(jié)構(gòu)進行數(shù)據(jù)接收/發(fā)送時使用的接口協(xié)議,其數(shù)據(jù)包格式為Cfram
10、e。通過這些標準協(xié)議MSF能夠方便地與其它廠家的產(chǎn)品進行接口。圖14-2IXP2xxx的主要外部連接圖14-3IXP2400外部連接的速度MSF接口有兩個主要目的。第一,它構(gòu)成了IXP2xxx與高速網(wǎng)絡(luò)接口之間的快路徑;第二,MSF接口提供了一種通信機制,允許兩個或多個IXP2xxx芯片互連。第二個目的非常重要,因為可以將兩個芯片連接起來處理較高的吞吐量。MSF接口的關(guān)鍵特性是可配置,可配置性使得MSF接口的靈活性足以連接幾乎任何物理硬件。像圖14-2指示的那樣,MSF接口有兩個外部連接:一個用于輸入,另一個用于輸出。這兩個外部連接使用不同的管腳,并且可以被獨立配置,因此可以配置輸入和輸出使用
11、不同的接口標準。比如配置輸入使用SPI協(xié)議,而輸出使用CSIX協(xié)議。DRAM總線的任務(wù)只有一個,提供對外部DRAM的訪問。IXP2400使用一條總線訪問DRAM,而IXP28x0使用多條總線來獲得較高的吞吐量。在IXP中,DRAM提供低成本、高帶寬的存儲,主要用于存儲塊數(shù)據(jù)(如完整的包或幀)。除了64位數(shù)據(jù)線,DRAM總線還包括傳輸?shù)刂?、控制?取操作、以及傳輸時鐘信號的線路。存儲器使用時鐘信號來使取或存操作與處理器時鐘同步。訪問SRAM的接口與訪問DRAM的接口是完全分開的。盡管圖14-2中只畫出一條SRAM總線,事實上,IXP2xxx使用多條SRAM總線以獲得較高的吞吐量。SRAM總線除了
12、提供對外部SRAM的訪問以外,與協(xié)處理器的交互也是通過SRAM總線進行的。除了存儲器總線,IXP2xxx還有一個慢端口(Slowport)連接。與存儲器總線不同,慢端口連接是共享的,連接提供了對若干個外部硬件單元的訪問。比如,在啟動過程中慢端口總線提供對ROM或FlashROM的訪問。正像名字指示的一樣,慢端口總線不是為高速數(shù)據(jù)傳輸而設(shè)計的。(5)內(nèi)部組件IXP2xxx的內(nèi)部結(jié)構(gòu)很復(fù)雜,因為芯片包含了總線、存儲器、處理器、接口和其它功能單元。下面列出了主要的功能單元。數(shù)量組件目的1嵌入式RISC處理器控制、高層協(xié)議和例外8/16包處理引擎I/O、基本包處理和包轉(zhuǎn)發(fā)1+SRAM訪問單元協(xié)調(diào)對外部
13、SRAM總線的訪問1+DRAM訪問單元協(xié)調(diào)對外部DRAM總線的訪問1MSF訪問單元協(xié)調(diào)對外部I/O設(shè)備的訪問1PCI總線訪問單元協(xié)調(diào)對外部PCI總線的訪問1SHaC單元存儲中間結(jié)果、計算哈希值等1加密單元加解密操作1系統(tǒng)底盤(chassis)提供內(nèi)部控制和數(shù)據(jù)傳輸?shù)耐ǖ狼度胧絉ISC處理器負責(zé)執(zhí)行網(wǎng)絡(luò)處理器中的控制面處理任務(wù),如進行芯片初始化配置、芯片控制/管理、運行路由協(xié)議、更新路由表等,另外還負責(zé)對異常數(shù)據(jù)包的處理。包處理引擎是IXP的核心部件,能夠訪問IXP中的所有共享資源,負責(zé)絕大部分的包處理任務(wù),是IXP取得線速處理性能的關(guān)鍵。IXP2400中包含8個32位包處理引擎,IXP28x0
14、包含16個32位包處理引擎。SRAM訪問單元用于和外部SRAM接口,控制和管理IXP中其它功能單元對外部SRAM的訪問。SRAM訪問單元還可用于和符合相應(yīng)接口規(guī)范的協(xié)處理器接口,執(zhí)行特定的包處理操作。IXP2400中有兩個SRAM訪問單元,IXP28x0中有四個SRAM訪問單元。不同的SRAM訪問單元相互獨立,可并行工作。DRAM訪問單元用于和外部DRAM接口,控制和管理IXP中其它功能單元對DRAM的訪問。IXP2400有一個DRAM訪問單元,而IXP28x0有三個DRAM訪問單元。PCI總線訪問單元用于和主控CPU、其它IXP網(wǎng)絡(luò)處理器以及PCI以太網(wǎng)卡等符合PCI規(guī)范的設(shè)備接口。SHaC
15、單元其實包括了三個部分:用于存放中間結(jié)果的片上Scratchpad存儲器,支持48比特、64比特及128比特哈希運算的哈希單元,以及用于對IXP中的控制和狀態(tài)寄存器進行訪問操作的單元(稱為CAP)。加密單元是IXP2850特有的,負責(zé)進行加解密操作。系統(tǒng)底盤是IXP中各功能單元之間的內(nèi)部高速通道,由多組單向高速數(shù)據(jù)總線、命令總線以及相應(yīng)的總線仲裁單元組成。正是由于系統(tǒng)底盤的分立式多總線結(jié)構(gòu)和高帶寬的數(shù)據(jù)總線,使得IXP的并行處理優(yōu)勢得以充分發(fā)揮,取得較高的性能指標。圖14-4是IXP2xxx的高層結(jié)構(gòu)視圖,給出了內(nèi)部組件和外部單元之間的連接。圖14-4IntelIXP2xxx的概念組織圖14-
16、5IXP2400硬件結(jié)構(gòu)框圖圖14-5是IXP2400的內(nèi)部硬件結(jié)構(gòu)圖??傮w上來看,IXP采用了多主控+系統(tǒng)底盤+多目標的硬件體系結(jié)構(gòu)。多主控是指IXP的多個主控單元,包括XScale核、微引擎、PCI控制單元等硬件功能單元。多目標是指IXP中的多個從屬單元,包括存儲訪問單元、MSF、SHaC等。主控單元發(fā)起和控制對多個目標的操作,目標執(zhí)行主控單元規(guī)定的操作,而底盤提供了主控單元與目標之間的數(shù)據(jù)傳輸通道和命令傳輸通道。具體而言,IXP的硬件體系結(jié)構(gòu)具有如下主要特征:1)采用分立的內(nèi)部總線結(jié)構(gòu),將不同存儲單元的數(shù)據(jù)總線、數(shù)據(jù)讀/寫總線分開,可以同時對不同存儲單元進行讀/寫操作,大大提高了IXP的
17、并行處理能力。2)引入命令總線仲裁器對各主控單元發(fā)出的命令進行排隊判優(yōu),保證了指令的優(yōu)先級,避免了指令的沖突和擁塞。3)采用分布式的硬件結(jié)構(gòu),即多主控+多目標結(jié)構(gòu)。不同的硬件功能單元在高速內(nèi)部總線的支持下各司其職,負責(zé)專門的數(shù)據(jù)處理操作,大大增強了IXP的并行處理能力。4)采用多微引擎并行的硬件結(jié)構(gòu),所有微引擎可同時工作,大大增強了IXP的并行處理能力。IXP2400進一步將8個微引擎分為2組(Cluster0和Cluster1),并使用獨立的SRAM數(shù)據(jù)總線,有效地緩解了總線沖突,進一步增強了IXP2400的并行處理能力。(6)IXP2xxx處理器體系IXP2xxx使用一個五層的處理器體系,
18、其中三層在芯片中,另外兩層由外部硬件提供。以下是處理器類型及每種處理器的特性。處理器類型是否在芯片上?是否可編程?通用處理器否是嵌處式RISC處理器是是I/O處理器是是協(xié)處理器是否物理接口否否位于最高層的通用處理器(GPP)不是IXP2xxx芯片的一部分。在許多系統(tǒng)中,需要一個外部通用處理器執(zhí)行整體控制和管理功能。GPP不是快路徑的一部分。比如,考慮一個在每個接口都使用一個網(wǎng)絡(luò)處理器的系統(tǒng)。在這種情況下,網(wǎng)絡(luò)處理器不需要涉及全局路由決策,路由決策可被分配給一個與所有網(wǎng)絡(luò)處理器有交互作用的通用處理器。通用處理器收集路由信息,選擇最佳路由,并通知每個網(wǎng)絡(luò)處理器。Intel用術(shù)語核心處理器指代嵌入式
19、RISC處理器。IXP2xxx上的RISC處理器是與ARM結(jié)構(gòu)兼容的一種處理器,稱為XScale。運行在常規(guī)操作系統(tǒng)(如Linux)上的XScale核作為一個控制點管理微引擎并提供一個可以下載程序和配置芯片的接口。另外,XScale處理高層協(xié)議以及例外的包。因此,嵌入式處理器不是用于執(zhí)行常規(guī)的快路徑處理。Intel使用術(shù)語微引擎(microengine)指代包處理器。IXP2xxx包含多個微引擎(IXP2400包含8個,IXP28x0包含16個)。與嵌入式RISC處理器不同,微引擎是一種只提供少量基本指令的低級設(shè)備,微引擎構(gòu)成了快路徑處理的基礎(chǔ),主要用來處理I/O設(shè)備與存儲器之間的低層數(shù)據(jù)傳輸
20、以及基本包處理任務(wù)。與嵌入式處理器不同,微引擎不運行操作系統(tǒng)。IXP2xxx包含幾種協(xié)處理器和功能單元,其中一些構(gòu)成了快路徑的一部分。比如,芯片包含一個哈希單元,可用來高速計算一個48比特、64比特或128比特的自適應(yīng)多項式哈希函數(shù)。IXP2xxx還包含4個與實時時鐘一起工作的定時器。IXP2850還包含了對幾種加密算法(如三重DES、AES)、檢查和累加以及安全哈希函數(shù)的硬件支持。物理接口硬件不是IXP2xxx的一部分,因此需要另外的芯片來實現(xiàn)第一層和第二層的處理。Intel提供處理POS-PHY以及傳統(tǒng)以太網(wǎng)組幀的接口芯片。由于MSF接口是可配置的,IXP2xxx上的每個高速物理接口可以遵
21、循任何一種眾所周知的標準(如SPI-3、SPI-4.2或Utopia)。Utopia是IXP2xxx接收/發(fā)送ATM格式的數(shù)據(jù)包時采用的接口協(xié)議,IXP2400支持UtopiaL1/L2/L3三個速率等級,速率分別為OC-3、OC-12和OC-48。POS-PHY是IXP2xxx接收/發(fā)送POS(PacketOverSONET)格式的數(shù)據(jù)包時采用的接口協(xié)議。POS-PHYL3和POS-PHYL4規(guī)范分別被OpticalInternetworkingForum批準為SPI-3和SPI-4.2,速率分別為OC-48和OC-192。POS是利用點對點協(xié)議(PPP)實現(xiàn)IP包到SONET幀有效載荷映射
22、的系列協(xié)議,標準的POS映射為IP/PPP/HDLC/SONET。IP包被封裝到PPP分組中,PPP提供了多種協(xié)議封裝、錯誤控制和鏈路初始化等功能。然后,PPP分組利用HDLC協(xié)議成幀,以提供分組分界和錯誤控制。(7)IXP2xxx的存儲器IXP2xxx使用多種存儲器。下面列出了各種存儲器的大小和用途。存儲器類型最大容量是否在芯片上?典型用途GPRegisters256(2banks)是中間運算Inst.Cache32Kbytes是最近使用過的指令DataCache32Kbytes是最近使用過的數(shù)據(jù)MiniCache2Kbytes是重用過一次的數(shù)據(jù)Writebuffer未規(guī)定是寫緩沖區(qū)Loca
23、lmemory2560bytes/微引擎是本地緩存Scratchpad16Kbytes是進程間通信和同步Inst.Store4Kbytes/微引擎是存放微引擎指令FlashROM未規(guī)定否用于啟動SRAM64Mbytes否存放表或包頭DRAM2Gbytes否存儲包程序員需要關(guān)注存儲器體系中的某些存儲器,其余的可以忽略。比如,盡管cache提供了性能改進,但是大多數(shù)cache對于程序員是透明的(即程序員不需要分配cache中的空間)。程序員主要關(guān)注四種存儲器:SRAM、DRAM、本地存儲器和Scratchpad,程序員必須明確決定如何使用它們。也就是說,對于每一個數(shù)據(jù)項,程序員必須選擇其中的一種存
24、儲器來存放。上表列出了選擇存儲器的標準之一:最大容量,下表列出了各種存儲器的其它特性。存儲器類型訪問單位相對訪問延時特性(字節(jié))Local41用LM_ADDR寄存器訪問Scratchpad410通過原子讀-修改-寫進行同步支持進程間通信push/pullreflectormodeSRAM414遵循QDR規(guī)范,原子操作支持隊列和環(huán),比特操作DRAM820連接到XScale、微引擎和PCI總線控制器從上表可以看出,每種存儲器都有一些特性,使其適合某些任務(wù)。比如,盡管本地存儲容量很小,但是它提供了最小的訪存時間。Scratch和SRAM都提供原子操作,如讀-修改-寫,因此Scratch和SRAM都可
25、以用來同步并行處理器(如微引擎)。SRAM的訪存時間比Scratch長,但比DRAM?。淮送?,SRAM具有操作隊列和環(huán)的機制。因此,SRAM適合于存放包頭或包鏈表。最后,由于DRAM有到I/O設(shè)備的直接傳輸路徑、容量大并有較高的帶寬,DRAM適合于存放輸出或輸出的包。程序員需要注意的是,存儲訪問時間可能比指令執(zhí)行時間長很多。比如,一次DRAM訪存需要幾十個時鐘周期,其中每個時鐘周期可以執(zhí)行一條微引擎指令。因此,在等待從DRAM讀取一個數(shù)值的時候,微引擎可以執(zhí)行許多條指令。我們在后面將會討論訪存時間和指令執(zhí)行時間之間的差異,以及程序員應(yīng)采取的措施。(8)字和長字訪問除了訪存時間和存儲器特性以外,
26、程序員還必須了解底層物理存儲系統(tǒng)是如何組織存儲器訪問的。每種物理存儲器都定義了訪問單位的長度,有時稱為可尋址數(shù)據(jù)單位。一個兩字節(jié)的單位(即16比特)稱為一個字,一個四字節(jié)的單位(即32比特)稱為一個長字(longword),而一個八字節(jié)的單位(64比特)稱為一個四倍長字(quadword)。為理解長度大于一個字節(jié)的可尋址數(shù)據(jù)單位帶來的后果,考慮按長字組織的Scratch存儲器。盡管微引擎和XScale處理器可為每一個字節(jié)產(chǎn)生地址,但是底層機制并不提供對單個字節(jié)的訪問。事實上,每次存儲器訪問讀或存四個字節(jié)。因此,如果程序員要訪問地址為2的字節(jié),則底層存儲器硬件會取地址0地址3的存儲單元(即第一個
27、長字)。將存儲器組織為字或長字意味著程序員必須仔細規(guī)劃數(shù)據(jù)的布局。假設(shè)程序員定義了兩個數(shù)據(jù)項,每個數(shù)據(jù)項長16比特,存放在存儲器中相鄰的位置。如果每個數(shù)據(jù)項被分配在一個字中,則這兩個數(shù)據(jù)項通過一次存儲器訪問就可全部讀出。如果存放時跨越了字邊界,則底層存儲器硬件需要訪問存儲器兩次。因此,為獲得最佳的性能,程序員必須了解存儲器組織,并且要合理安排數(shù)據(jù)布局以最小化訪存時間。某些網(wǎng)絡(luò)處理器體系結(jié)構(gòu)特征(如底層物理存儲系統(tǒng)的組織)對于程序員編寫高質(zhì)量的代碼是非常重要的。程序員必須理解競爭、同步和時序這樣的問題,因此程序員必須重點理解各功能部件之間的連接、共享的資源以及按照特定順序發(fā)射指令帶來的結(jié)果。(9
28、)基于IXP2xxx的典型系統(tǒng)結(jié)構(gòu)圖14-6是一個基于IXP2xxx的典型的Ingress/Egress系統(tǒng)結(jié)構(gòu)。在該結(jié)構(gòu)中使用了兩個IXP2xxx進行包處理,其中IngressIXP2xxx通過MACs或Framers從以太網(wǎng)接收數(shù)據(jù)包,對所接收的包進行處理后通過交換結(jié)構(gòu)接口芯片將包發(fā)送到交換結(jié)構(gòu);EgressIXP2xxx從交換結(jié)構(gòu)接收包,對包進行處理后發(fā)送到以太網(wǎng)。IngressIXP2xxx與外部網(wǎng)絡(luò)之間的MSF接口配置為SPI或Utopia協(xié)議模式,與交換結(jié)構(gòu)之間的MSF接口配置為CSIX協(xié)議模式。同理,EgressIXP2xxx與交換結(jié)構(gòu)之間的MSF接口配置為CSIX協(xié)議模式,與外
29、部網(wǎng)絡(luò)之間的MSF接口配置為SPI或Utopia協(xié)議模式。Ingress/Egress模式是一種典型的基于IXP2xxx的系統(tǒng)架構(gòu)模式。在實際應(yīng)用中,當處理功能較簡單時,可以采用單片IXP2xxx的系統(tǒng)架構(gòu)模式,見圖14-7;當處理功能較復(fù)雜時,也可以采用多個IXP2xxx串連的系統(tǒng)架構(gòu)模式。圖14-6基于IXP2400的典型系統(tǒng)架構(gòu)方案圖14-7使用一個IXP2800的全雙工架構(gòu)方案第十五章嵌入式RISC處理器(XScale核)前一章概要介紹了IntelIXP2xxx網(wǎng)絡(luò)處理器的體系結(jié)構(gòu),這一章討論稱為XScale核的嵌入式RISC處理器。本章將不會給出所有的硬件細節(jié),而是主要關(guān)注它的作用以
30、及軟件可以使用的設(shè)施。嵌入式處理器的用途IntelIXP2xxx中包含一個嵌入式RISC處理器。為理解嵌入式處理器的用途,我們需要考慮一個IXP2xxx是如何在一個網(wǎng)絡(luò)系統(tǒng)中使用的。在一個只有少量低速接口的網(wǎng)絡(luò)系統(tǒng)中,一片IXP2xxx能夠處理幾個接口;而在一個具有高速網(wǎng)絡(luò)接口的系統(tǒng)中,每個接口必須使用一個IXP2xxx。整個網(wǎng)絡(luò)系統(tǒng)的結(jié)構(gòu)決定了嵌入式處理器的作用,因為包含多個IXP2xxx芯片的系統(tǒng)通常包括一個通用處理器,用于在多個IXP2xxx間進行控制和協(xié)調(diào)。圖15-1說明了這兩種方法。圖15-1兩種可能的網(wǎng)絡(luò)系統(tǒng)設(shè)計方法在使用一片IXP2xxx芯片處理所有網(wǎng)絡(luò)接口的設(shè)計中,片上RISC
31、處理器執(zhí)行整個系統(tǒng)的管理任務(wù)。在包括一個通用處理器的系統(tǒng)中,與整個系統(tǒng)相關(guān)的任務(wù)由通用處理器執(zhí)行,芯片中的嵌入式處理器只處理與芯片相關(guān)的任務(wù)。因此,嵌入式RISC處理器可以被分配以下一些或全部的任務(wù):自舉異常處理高層協(xié)議處理交互程序調(diào)試(Interactivedebugging)診斷和日志內(nèi)存分配應(yīng)用程序(需要的話)用戶接口和/或到通用處理器的接口控制包處理器其它管理功能以上大部分任務(wù)都不言自明。管理和控制功能包括:啟動和停止包處理,創(chuàng)建或修改由包處理引擎使用的數(shù)據(jù)結(jié)構(gòu),描述配置細節(jié)(如每個網(wǎng)絡(luò)接口的地址等)。自舉包括片上存儲器和處理器的初始化。比如,當系統(tǒng)啟動時,嵌入式RISC處理器首先引導(dǎo)
32、,然后將微引擎代碼裝入微引擎的指令存儲區(qū),啟動微引擎。如果系統(tǒng)包括多個IXP2xxx芯片,通用處理器必須執(zhí)行整個系統(tǒng)的管理任務(wù),為此通用處理器必須與每個IXP2xxx上的嵌入式RISC處理器通信。比如,通用處理器運行路由協(xié)議軟件;一旦計算出全局路由表后,通用處理器將信息傳遞給每個IXP2xxx上的嵌入式處理器;每個嵌入式RISC處理器從GPP接收路由信息,修改本地的轉(zhuǎn)發(fā)表。轉(zhuǎn)發(fā)表存放在嵌入式處理器和微引擎共享的內(nèi)存中,嵌入式處理器維護轉(zhuǎn)發(fā)表,微引擎使用轉(zhuǎn)發(fā)表查找每個數(shù)據(jù)包的下一跳地址。盡管嵌入式RISC處理器并不用于快路徑,但它確實要處理一些數(shù)據(jù)包。首先,它要處理異常,如不匹配任何分類規(guī)則的包
33、或產(chǎn)生出錯消息的包(如目的地址不可達的包),因此嵌入式RISC處理器通常要負責(zé)產(chǎn)生ICMP錯誤消息。其次,嵌入式RISC處理器負責(zé)處理發(fā)給本地系統(tǒng)的包。比如,在一個小型系統(tǒng)中,嵌入式RISC處理器實現(xiàn)高層協(xié)議(如TCP);在一個較大的系統(tǒng)中,嵌入式RISC處理器將TCP包轉(zhuǎn)發(fā)給通用處理器。XScale架構(gòu)IXP2xxx上的嵌入式RISC處理器由一個XScale處理器組成,XScale實現(xiàn)了ARM的一個變化版本(實現(xiàn)了ARMV5TE指令集,但不包括浮點指令集)。其主要特性包括:精簡指令集計算(RISC)可配置大端/小端模式的的32位算術(shù)運算由協(xié)處理器提供的矢量浮點運算字節(jié)可尋址內(nèi)存虛擬存儲支持內(nèi)
34、置串口支持內(nèi)核化操作系統(tǒng)的硬件設(shè)施性能監(jiān)視單元RISC指令集和寄存器遵循RISC模式,XScale指令集包含了相對較少的指令,而且為保證每個時鐘周期能夠完成一條指令,指令被設(shè)計為能夠很快執(zhí)行。因此,XScale不提供執(zhí)行時間依賴于操作數(shù)長度的指令,比如沒有串拷貝或串比較等對一個內(nèi)存塊操作的指令。和大多數(shù)RISC處理器一樣,XScale依賴寄存器來獲得高速度。指令執(zhí)行前操作數(shù)必須先取到寄存器中。在一個典型的指令中,處理器從兩個寄存器中取操作數(shù),執(zhí)行一個操作,結(jié)果放到第三個寄存器中。如果操作數(shù)都準備就緒的話,處理器每個時鐘周期能夠完成一條指令。性能監(jiān)視單元能夠在不降低處理器運行速度的情況下測量程序
35、的運行性能,監(jiān)視的內(nèi)容包括:指令cache不命中率TranslationLookasideBuffer(TLB)不命中率指令流水線中的停頓由軟件發(fā)起的分支指令數(shù)目XScale存儲器組織XScale是一個32位處理器,它的寄存器及add、shift、load、store等操作均是32位的。對于算術(shù)運算采用大端還是小端的問題,ARM結(jié)構(gòu)采用的方法是不預(yù)先確定采用什么模式,而是在處理器引導(dǎo)時進行配置。Intel提供的IXP2xxx引導(dǎo)代碼將XScale配置為大端模式。XScale允許運行程序?qū)γ總€字節(jié)尋址。前面我們介紹過,IXP2xxx提供了訪問QDR-SRAM和DDR-DRAM的機制,而這兩種存儲
36、器分別定義了4字節(jié)或8字節(jié)的數(shù)據(jù)訪問單元。如果底層存儲系統(tǒng)使用長字或四倍長字的尋址能力,那么XScale如何提供字節(jié)尋址呢?答案在于接口硬件:在處理器和存儲器之間使用不同的指令cache和數(shù)據(jù)cache。當數(shù)據(jù)cache存/取一個值時,它按照底層存儲器的訪問單元長度進行存/?。划斔c處理器通信時,只傳輸需要的字節(jié)。因此,如果XScale上的一個程序要從DRAM中讀入一個字節(jié),數(shù)據(jù)cache取8個字節(jié)單元,取出需要的字節(jié)傳給處理器。類似地,當程序要將一個字節(jié)存入DRAM時,數(shù)據(jù)cache必須先取出8字節(jié)單元,修改要存儲的那個字節(jié),然后把整個8字節(jié)單元寫回DRAM。XScale定義了一個大小為23
37、2字節(jié)的線性地址空間,所有的外部存儲器及部分片上存儲器、PCI總線、其它存儲器映射的I/O設(shè)備等都被映射到這個空間。圖15-2說明外部存儲器和硬件設(shè)備是如何映射到地址空間的,從高地址到低地址依次是PCI存儲器、Scratchpad和CSRs(控制與狀態(tài)寄存器)、外部SRAM、DRAM和Slowport。從0開始的地址映射到Slowport,這一點非常重要。因為低地址用于引導(dǎo)處理器,將從0開始的地址映射到Slowport意味著XScale用于引導(dǎo)的代碼來自FlashROM。圖15-2XScale使用的地址空間XScale硬件包括了一個提供虛存的存儲管理單元。存儲管理單元允許程序運行在一個虛地址空
38、間,硬件將部分虛空間映射到物理地址上。也就是說,系統(tǒng)可以被配置成允許一個運行程序訪問部分或全部的物理地址空間。XScale和包處理器是緊密結(jié)合在一起的,它們都執(zhí)行某些包處理任務(wù)。共享存儲是處理器用來高效交換數(shù)據(jù)的最重要機制之一,可以用來在XScale和包處理器之間傳遞數(shù)據(jù)。比如,包處理器統(tǒng)計包流量,當數(shù)據(jù)包到來或離開時更新共享內(nèi)存中的一個計數(shù)器,XScale從共享內(nèi)存中取計數(shù)值,根據(jù)網(wǎng)絡(luò)管理的要求計算統(tǒng)計數(shù)據(jù)。類似地,XScale可以使用共享內(nèi)存創(chuàng)建和維護包處理器使用的轉(zhuǎn)發(fā)表。然而包處理器不使用XScale的地址空間,因此當需要在XScale和微引擎之間傳遞一個指針時,必須將指針從一個地址空間
39、轉(zhuǎn)換到另一個地址空間。一般由XScale處理所有的地址轉(zhuǎn)換。因此,當XScale創(chuàng)建一個轉(zhuǎn)發(fā)表時,它將所有指針轉(zhuǎn)換成微引擎能夠理解的地址。類似地,當XScale從一個微引擎接收一個指針時,它將微引擎的本地地址轉(zhuǎn)換成XScale地址空間中的一個等價的值。(5)其它I/O用于I/O設(shè)備的控制與狀態(tài)寄存器(CSR)出現(xiàn)在XScale的物理地址空間,因此,除了使用總線來執(zhí)行數(shù)據(jù)訪問和傳輸操作以外,運行在XScale上的設(shè)備驅(qū)動程序還可以訪問設(shè)備的CSR。另外,由于XScale可以訪問外部PCI總線,因此XScale可以訪問和控制PCI總線上的任何一個設(shè)備。內(nèi)部外設(shè)單元IXP2xxx中有四種機制只能被X
40、Scale處理器訪問,即它們不能被微引擎所訪問。這四種機制是:一個UART,四個32位的倒計數(shù)定時器,八個通用I/O管腳,一個Slowport接口。這些機制被稱為內(nèi)部外設(shè),因為它們在IXP2xxx的內(nèi)部,但對于XScale來說是外設(shè)。UART硬件提供符合EIARS-232C標準的串行線路,只有XScale能夠訪問作為控制臺設(shè)備的串行線。四個倒計數(shù)定時器可以被配置為在計數(shù)值到達0時中斷XScale。其中一個定時器可以用做系統(tǒng)看門狗,當定時器值到達0時,XScale重啟動。定時器的計數(shù)速率是可配置的:可以運行在XScale的時鐘頻率、XScale時鐘頻率的1/16或XScale時鐘頻率的1/256
41、。只有XScale能夠使用這些定時器,這意味著XScale必須處理所有涉及超時的協(xié)議處理任務(wù)。XScale可以通過MSF接口訪問四個通用I/O管腳,這四個管腳提供了一個外部連接,可以連接到了另外的硬件或用于調(diào)試。(7)用戶模式和內(nèi)核模式操作和許多處理器一樣,XScale提供了多種帶有保護級的操作模式。特別是,XScale提供了對內(nèi)核化操作系統(tǒng)的硬件支持。操作系統(tǒng)內(nèi)核運行在最高優(yōu)先級,能夠訪問整個地址空間和控制所有的I/O。運行在操作系統(tǒng)下的應(yīng)用程序作為用戶級進程執(zhí)行,應(yīng)用沒有優(yōu)先級,不能直接控制I/O設(shè)備,不能訪問整個地址空間。應(yīng)用程序運行在一個不能被其它應(yīng)用程序訪問的受保護的虛地址空間。內(nèi)核
42、提供所有的服務(wù),當應(yīng)用程序需要執(zhí)行I/O時,必須請求內(nèi)核執(zhí)行操作和返回結(jié)果。(8)協(xié)處理器15Intel芯片包含一個協(xié)處理器,它允許XScale配置和控制IXP2xxx上的幾個硬件單元。這個協(xié)處理器稱為系統(tǒng)控制協(xié)處理器15(CP15),只能由XScale訪問。XScale調(diào)用CP15配置MMU、讀/寫緩沖器、時鐘功能和高速緩存。另外,在測試代碼時CP15可以用來設(shè)置斷點。第十六章包處理硬件(微引擎)微引擎的用途在IXP2xxx的處理器體系中,微引擎構(gòu)成了最低層的可編程處理器,因此使用微引擎執(zhí)行協(xié)議處理比使用較高等級的處理器執(zhí)行相同的任務(wù)獲得的吞吐量要高。特別是,微引擎被設(shè)計用來執(zhí)行快路徑上的處
43、理。為進一步提高快路徑的處理,IXP2xxx包含多個可并行執(zhí)行的微引擎。盡管允許并行微引擎可以獲得比XScale處理器高得多的集合速率,但實際上要獲得高速度是很困難的,因為必須將微引擎合理地分配給特定的任務(wù)。微引擎被設(shè)計來執(zhí)行ingress和egress協(xié)議處理任務(wù)。典型地,微引擎要負責(zé):從物理層硬件接收包校驗和檢查包頭處理和分類包緩存查表和轉(zhuǎn)發(fā)包頭修改校驗和計算從物理層硬件發(fā)送包后面我們將會看到,微引擎不直接執(zhí)行操作,而是依靠各種輔助功能單元執(zhí)行操作。微引擎架構(gòu)圖16-1微引擎內(nèi)部結(jié)構(gòu)框圖微引擎具有以下的一般特性:可編程微控制器采用RISC設(shè)計本地控制存儲器執(zhí)行數(shù)據(jù)通道:一個算術(shù)邏輯單元AL
44、U,一個16入口的CAM(每個入口32比特),8個線程和上下文切換的硬件支持;數(shù)據(jù)通道寄存器:256個通用寄存器,512個傳輸寄存器,128個NextNeighbor寄存器,640個字的本地內(nèi)存。一個CRC計算單元可直接訪問片上各種功能單元微序列的概念從以上微引擎的特性可以看到,微引擎不是一個傳統(tǒng)的CPU,而是一個作為微序列器的低級設(shè)備。也就是說,微引擎不包含每一種操作的本地指令,大多數(shù)指令只是調(diào)用芯片中的其它功能單元。有兩個例子可以來解釋這個概念。首先,考慮像加或減這樣的算術(shù)運算。在一個傳統(tǒng)的CPU中,每個算術(shù)操作被賦以一個唯一的操作碼,程序?qū)τ诿總€希望的指令給出操作碼。比如,運行在傳統(tǒng)CP
45、U上的程序可能包含一條指令:AddR2,R3,說明寄存器3中的整數(shù)值應(yīng)當被加到寄存器2的數(shù)值上。然而,微引擎上的算術(shù)操作被合并到一個引用ALU單元的操作碼中。如為了將兩個整數(shù)值相加,運行在微引擎上的程序調(diào)用alu操作,并聲明add為一個操作數(shù)。Alu指令的格式為:aludest,A_op,alu_op,B_op,其中dest為目的寄存器,用于存放指令的運算結(jié)果;A_op和B_op為源操作數(shù)寄存器;alu_op為ALU運算,包括12種運算符(+、+16、+8、+carry、B-A、B、B、AND、AND、AND、OR、XOR)。作為微引擎指令的第二個例子,考慮內(nèi)存引用。在一個傳統(tǒng)的CPU上,硬件
46、將一個尋址模式關(guān)聯(lián)到每個操作數(shù),尋址模式說明操作數(shù)是常數(shù)(立即數(shù))還是對內(nèi)存中一個值的引用。因此,程序中可能包含如下的指令:LoadR3,X,說明將內(nèi)存位置X的當前值拷貝到寄存器3。和傳統(tǒng)CPU(如XScale)不同的是,微引擎不提供任何引用內(nèi)存的尋址模式,微引擎也沒有一個本地的load指令。程序員必須發(fā)射一條指令說明存儲器接口、存儲器中的地址和一個操作(即取或存)。如sramcmd,xfer,src_op1,src_op2,ref_cnt,opt_tok用于在微引擎和SRAM之間傳輸數(shù)據(jù),其中cmd指明是read還是write;xfer指明使用的傳輸寄存器;src_op1+src_opt2指
47、明SRAM中的一個位置;ref_cnt指明數(shù)據(jù)個數(shù)(18,以長字為單位);opt_tok是一個可選的令牌,可以用來改變訪存的粒度、控制線程同步等。對于一個取操作,微引擎必須等待存儲器接口硬件完成操作,然后將數(shù)值移到寄存器中被程序使用。由此可見,微引擎不提供算術(shù)操作的本地硬件指令,也不提供直接訪問內(nèi)存的尋址模式。運行在微引擎上的程序控制和使用芯片上的功能單元來訪問內(nèi)存和執(zhí)行操作。微引擎指令集微引擎指令集的操作碼不到64個,圖16-2和圖16-3總結(jié)了微引擎的指令集,并列出了每種指令的用途。圖16-2一部分微引擎指令圖16-3微引擎的另一部分指令分離的存儲器地址空間微引擎架構(gòu)不同于XScale的另
48、一個方面是:微引擎硬件不將存儲器或I/O設(shè)備映射到一個線性地址空間。和XScale不同,微引擎不將存儲器看成是一個無縫的、統(tǒng)一的存儲空間,因此,運行在微引擎上的程序必須說明數(shù)據(jù)傳輸所涉及的確切的存儲器。圖16-1和圖16-2說明了分離的地址空間是如何影響體系結(jié)構(gòu)的:對于每一類存儲器和每一類I/O設(shè)備,指令集必須包含一條單獨的指令。比如,一條DRAM指令可以訪問DRAM中的一個位置,但不能訪問SRAM中的位置。類似地,一條SCRATCH指令可以訪問Scratchpad存儲器,但不能訪問SRAM或DRAM。了解存儲空間的這種分離對于程序員來說非常重要,這意味著數(shù)據(jù)項要較早地綁定到特定的存儲器。也就
49、是說,在寫程序時程序員就必須為每個數(shù)據(jù)項選擇將要放入的存儲器。執(zhí)行流水線我們說XScale和微引擎都使用了RISC架構(gòu),而RISC處理器被設(shè)計為每個時鐘周期執(zhí)行一條指令。事實上,硬件不能在一個時鐘周期內(nèi)執(zhí)行一條完整的指令,而是通過使用并行來獲得高速度。處理器將一個指令的執(zhí)行分成若干個階段,通過同時執(zhí)行幾條指令的不同階段來重疊多條指條的執(zhí)行。人們用執(zhí)行流水線指重疊不同階段執(zhí)行的硬件。大多數(shù)RISC處理器使用流水線來獲得高速度。為理解流水線如何加速處理,想像一個理想化的處理器。每處理一條指令要進行兩個操作,首先從存儲器中取下一條指令,然后執(zhí)行這條指令。假定每個時鐘周期完成一個操作,顯然處理器需要兩
50、個時鐘周期來處理一條指令?,F(xiàn)在考慮增加一個執(zhí)行流水線,即通過增加兩個并行的硬件單元來擴展處理器:一個硬件單元可用來取指令,另一個硬件單元可用來執(zhí)行指令。如果這兩個硬件單元安排得好的話,處理器將能夠在執(zhí)行當前指令的時候取下一條指令。這樣,一旦執(zhí)行完指令N,執(zhí)行單元就可以開始執(zhí)行指令N+1。因此,處理器能夠在每個時鐘執(zhí)行一條指令,有效地將速率增加了一倍。實際的執(zhí)行流水線比我們的例子復(fù)雜得多。比如,IXP2xxx上的每個微引擎使用一個多級執(zhí)行流水線,該流水線允許微引擎硬件同時操作在多條指令的不同部分。當硬件在執(zhí)行某條指令的第k級時,可以同時執(zhí)行下一條指令的第k-1級。圖16-4給出了微引擎上的順序指
51、令執(zhí)行示意圖。圖16-4微引擎上的一個6級執(zhí)行流水線在微引擎啟動后的開始幾個時鐘周期內(nèi)沒有結(jié)果產(chǎn)生,因為第一個指令還沒有通過最后一級。然而,一旦第一條指令完成了最后一級,流水線就滿了,隨后每個時鐘周期可以完成一條指令。微引擎硬件如何將指令的執(zhí)行劃分到各個級?圖16-5列出了流水線的各個級,并描述了每一級要執(zhí)行的任務(wù)。圖16-5微引擎中6個執(zhí)行階段高速執(zhí)行的關(guān)鍵是指令不停地流過流水線-僅當流水線滿時才能每個時鐘周期完成條指令。不幸的是,圖16-4中的理想模式在實際中不會總是出現(xiàn)。比如,考慮下面給出的兩條指令:K:ALUoperationtoaddthecontentsofR1toR2K+1:AL
52、UoperationgoaddthecontentsofR2toR3由于兩條指令都要引用寄存器R2,這個序列就產(chǎn)生了一個問題。按照圖16-4列出的流水線操作中,指令K直到第6級才將結(jié)果寫入R2,然而指令K+1在第4級就要從寄存器R2中取操作數(shù)。由于在指令K寫R2之前,指令K+1不能從R2中讀數(shù),處理器硬件只能停頓。也就是說,指令K+1的處理等待,直到需要的數(shù)據(jù)就緒。圖16-6說明停頓是如何影響流水線執(zhí)行的。圖16-6執(zhí)行流水線停頓的例子在圖中,指令K和指令K+1使用同一個寄存器。在第四個時鐘周期時,指令K+1到達流水線的第3級操作數(shù)從寄存器中讀出。然而,指令K直到第6級才將數(shù)值寫入寄存器。因此
53、,指令K+1停在第4級等待操作數(shù)。一旦操作數(shù)得到了,在第7個時間單元流水線繼續(xù)處理。從圖中可以看到,當流水線的某一級停頓時,執(zhí)行并沒有停止,流水線仍在繼續(xù)輸出,因此在隨后的幾個時鐘周期內(nèi)延遲并不是很明顯。比如,圖中停頓發(fā)生在時刻5(指令K+1到達第4級),但是輸出一直持續(xù)到時刻7,停頓導(dǎo)致這時沒有指令到達第6級。我們說一個氣泡穿過流水線并最終到達最后一級。指令停頓的概念對于像微引擎這種處理快路徑的低級處理器來說尤其重要。理解執(zhí)行流水線對于程序員來說很重要,因為指令間的相互依賴可能導(dǎo)致處理器停頓,造成性能下降。除了指令間的相互依賴可能導(dǎo)致處理器停頓外,條件分支也可能造成處理器停頓。程序很少執(zhí)行很
54、長的直線代碼序列,而是包含了不少的條件流,其要執(zhí)行的計算依賴于數(shù)據(jù)。比如,微引擎代碼可能使用一個檢查和的值來確定是接受還是拒絕一個包。用機器指令的術(shù)語來說,測試是用一個條件分支指令來編碼的。條件分支也可能導(dǎo)致執(zhí)行流水線的停頓,因為取指令的硬件無法同時跟蹤兩條可能的路徑。通常情況下,微引擎硬件繼續(xù)取下一條指令裝入流水線中,就好像沒有分支一樣。如果發(fā)生了分支轉(zhuǎn)移,則硬件必須中止流水線中較早的級,然后從分支位置開始處理。了解微引擎硬件“假設(shè)不使用分支路徑”的特點有助于程序員優(yōu)化代碼。程序員在安排每個測試時,應(yīng)使得最常發(fā)生的情形繼續(xù)執(zhí)行而不引起分支轉(zhuǎn)移。(7)執(zhí)行數(shù)據(jù)通道微引擎的指令執(zhí)行單元也稱執(zhí)行數(shù)
55、據(jù)通道(ExecutionDataPath),可執(zhí)行移位、加/減、邏輯運算、乘法、字節(jié)對齊、某些比特操作等。微引擎要執(zhí)行的代碼存放在微引擎的控制存儲器中,指令的源操作數(shù)及目標操作數(shù)均為微引擎的內(nèi)部存儲單元。執(zhí)行數(shù)據(jù)通道采用了指令流水線技術(shù),將指令的執(zhí)行過程分為5級流水線:取指令、指令譯碼、取操作數(shù)、指令運算、寫運算結(jié)果。執(zhí)行數(shù)據(jù)通道根據(jù)程序計數(shù)器從控制存儲器中取指令,對指令進行譯碼得到操作數(shù)的地址,根據(jù)源操作數(shù)地址從數(shù)據(jù)通道寄存器(微引擎內(nèi)部存儲單元,包括通用寄存器、傳輸寄存器、鄰居寄存器和本地存儲器)中取操作數(shù),執(zhí)行指令,將運算結(jié)果寫到目的地址指定的數(shù)據(jù)通道寄存器中。由于控制存儲器和數(shù)據(jù)通道
56、寄存器均位于微引擎內(nèi)部,所以無論是取指令還是取操作數(shù)都是在單個時鐘周期內(nèi)完成,所以執(zhí)行數(shù)據(jù)通道執(zhí)行一條指令只需要一個時鐘周期。執(zhí)行數(shù)據(jù)通道還包括字節(jié)對齊和CAM兩個重要的功能單元。字節(jié)對齊負責(zé)從連續(xù)的8個字節(jié)中取出任意偏移量(0、1、2、3)的連續(xù)4個字節(jié);CAM主要用于快速查找。IXP2400的片上CAM具有16個入口,每個入口包含32位查找關(guān)鍵字(入口標簽)和4位狀態(tài)值。程序員可以將CAM看成是一個16行36列的陣列,用CAM_Clear指令清除CAM中的所有比特(即置所有比特為0),用CAM_Write和CAM_Write_State指令將任意值存入CAM中的任何行。當請求一個CAM查找
57、時,程序提供一個32比特的查找關(guān)鍵字,CAM硬件報告一個從0到15的值,指出標簽值等于查找關(guān)鍵字的第一個行的索引。如果沒有哪一行匹配查找關(guān)鍵字,硬件報告不命中。硬件通過設(shè)置一個32比特值中的9個比特來報告CAM查找的結(jié)果,結(jié)果被放置在比特3至比特11的位置,其余比特置0,見圖16-7。CAM查找的指令為:cam_lookupdest_reg,source_reg,用源寄存器中的數(shù)值與CAM的16個緩存單元的標簽值比較,比較結(jié)果放在目的寄存器中。圖16-7CAM查找返回的結(jié)果每個微引擎中還包括一個CRC單元,用于ATM或以太網(wǎng)等2層數(shù)據(jù)包的校驗和計算。CRC單元不是執(zhí)行數(shù)據(jù)通道的一部分,它與執(zhí)行
58、數(shù)據(jù)通道并行工作,執(zhí)行CRC運算。CRC單元支持16比特和32比特的CRC運算。(8)硬件線程和上下文切換盡管處理器執(zhí)行流水線中的氣泡會使處理延遲,但這個延遲是很小的,只有幾個時鐘周期。其它的延遲可能很大,特別是由于微引擎比外部存儲器快很多,一次存儲器訪問就會使執(zhí)行延遲許多時鐘周期。圖16-8列出了IXP2xxx上四種主要的存儲器訪問所需要的微引擎周期數(shù)。圖16-8幾種主要存儲器的訪問延遲從圖中看到,存儲器訪問延遲可以達到300個時鐘周期。當微引擎全速運行時,每個時鐘周期可以完成一條指令,這意味著一次存儲器訪問的時間就相當于微引擎執(zhí)行300條指令的時間。即使使用cache,存儲器訪問也比計算慢
59、得多。我們?nèi)绾慰朔纱鎯ζ髟L問引起的延遲呢?微引擎硬件提供一種機制來改善性能,即支持多個執(zhí)行線程或上下文。每個微引擎有多達8個線程,更重要的是,由于硬件為每一個線程維護不同的狀態(tài)信息(如一個程序計數(shù)器和一組信號事件),硬件可以在線程之間迅速切換而不需要軟件的支持。因此,和傳統(tǒng)CPU不同,微引擎的上下文切換為零開銷或只要求最多一個時鐘周期的開銷。從概念上說,微引擎線程就像傳統(tǒng)操作系統(tǒng)中的線程一樣操作,即多個線程同時處于就緒狀態(tài),一旦當前線程阻塞或自愿放棄處理器,一個新的線程馬上開始運行。尤其是,存儲器訪問可能導(dǎo)致線程阻塞,當一個線程等待訪問內(nèi)存時,微引擎執(zhí)行另一個線程。圖16-9給出了一個例子。
60、圖16-9四個線程的運行例子圖中給出了四個線程在同一段時間內(nèi)的狀態(tài),白色表示線程空閑并準備好運行,深藍色表示線程正在被微引擎執(zhí)行,淺藍色表示線程被阻塞。從左邊開始,微引擎執(zhí)行線程1,線程4阻塞,線程2和線程3就緒。在時刻t1,微引擎遇到一個操作導(dǎo)致線程1阻塞。這時發(fā)生一個上下文切換,處理器轉(zhuǎn)而執(zhí)行一個當前就緒的線程線程2。線程2執(zhí)行到時刻t2時,處理器遇到一個操作導(dǎo)致線程2阻塞。這時只有線程3就緒,于是處理器執(zhí)行線程3。至?xí)r刻t3線程3阻塞,由于這時線程1就緒,微引擎切換到線程1執(zhí)行。線程的優(yōu)點是很清楚的,處理器不需要停下來等待存儲器訪問或I/O,可以繼續(xù)執(zhí)行有用的工作。對于數(shù)據(jù)包處理來說,每
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 交通運輸顧問合同樣本
- 港口運營的經(jīng)濟合同管理辦法
- 2024年商業(yè)租賃與物業(yè)服務(wù)合同
- 展覽館標線優(yōu)化合同
- 醫(yī)療技術(shù)新項目管理細則
- 大型體育館大理石安裝合同
- 2024機器設(shè)備合同范文
- 課程設(shè)計寫簡歷可以嗎
- 2024年國有企業(yè)改革房屋征收合同
- 2024年校園設(shè)施運維管理協(xié)議
- 山東省棗莊市滕州市2024-2025學(xué)年九年級上學(xué)期11月期中物理試題(無答案)
- 天津市河?xùn)|區(qū)2024-2025學(xué)年七年級上學(xué)期期中數(shù)學(xué)試卷(含答案)
- 拆違服務(wù)合同模板
- 《Vue 3基礎(chǔ)入門》課件 第一章 vue 3簡介
- 【7道人教版期中】安徽省合肥市琥珀中學(xué)+2023-2024學(xué)年七年級上學(xué)期11月期中道德與法治試題(含解析)
- JGJ/T235-2011建筑外墻防水工程技術(shù)規(guī)程
- (正式版)HG∕T 21633-2024 玻璃鋼管和管件選用規(guī)定
- 《義務(wù)教育數(shù)學(xué)課程標準(2022年版)》測試題+答案
- 2024年網(wǎng)上大學(xué)智能云服務(wù)交付工程師認證考試題庫800題(含答案)
- 農(nóng)產(chǎn)品電子商務(wù)智慧樹知到期末考試答案章節(jié)答案2024年浙江農(nóng)林大學(xué)
- 數(shù)據(jù)安全重要數(shù)據(jù)風(fēng)險評估報告
評論
0/150
提交評論