freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

第四部分intel網(wǎng)絡(luò)處理器(文件)

 

【正文】 用軟件流水線模型 ? 有三種方法將流水線級(jí)組合起來并映射到微引擎上:上下文流水線,功能流水線,混合流水線。 ? 優(yōu)點(diǎn):適合需要較多代碼空間和需要保存較多狀態(tài)的子任務(wù)。 ? 多個(gè)微引擎并行地執(zhí)行相同的功能流水線。 ? 流水線級(jí)的數(shù)目必須與微引擎數(shù)相等。 ? 讀 修改 寫臨界區(qū)數(shù)據(jù)的過程: 1) 檢查數(shù)據(jù)是否處于鎖定狀態(tài); 2)若處于鎖定狀態(tài),返回第 1步,否則鎖定該數(shù)據(jù); 3)將數(shù)據(jù)從外部存儲(chǔ)器讀入微引擎; 4)修改數(shù)據(jù); 5)將修改過的數(shù)據(jù)寫回外部存儲(chǔ)器; 6)將數(shù)據(jù)解除鎖定。 ? 鎖住狀態(tài):等待一會(huì)再測(cè)試。 無折疊的串行 RMW操作 采用折疊技術(shù)的串行數(shù)據(jù)流訪問 線程交織 ? 當(dāng)線程的指令執(zhí)行時(shí)間 /訪存延遲 =1/ (線程數(shù) 1)時(shí),可以將訪存延遲完全隱藏在程序執(zhí)行時(shí)間之后。 ? 線程交織( interleaving threading):通過增加每個(gè)線程處理數(shù)據(jù)包的數(shù)量來平衡計(jì)算時(shí)間和訪存時(shí)間。 ? 微塊之間的連接在運(yùn)行時(shí)形成。 ? 編程模型定義了三類微塊: ? 源微塊: 運(yùn)行在 dispatch loop的起點(diǎn)(微塊組中的第一個(gè)微塊),負(fù)責(zé)獲取流水線要處理的數(shù)據(jù)包 。 ? 在功能流水線中,一個(gè)微塊及相應(yīng)的內(nèi)核組件被關(guān)聯(lián)到一個(gè)或多個(gè)流水線級(jí)。 ? 寫微塊時(shí)不需要知道其上游及下游微塊是什么,微塊 ID的值及流水線中下一個(gè)微塊的 ID值可 在編譯時(shí)分配并保存在系統(tǒng)頭文件中 。 ? 以下符號(hào)名字保留: ? IX_EXCEPTION: 指示數(shù)據(jù)包應(yīng)被送往 XScale Core。 Dispatch loop:作用一 ? 作用一: 將一個(gè)微引擎中的幾個(gè)微塊組織起來,實(shí)現(xiàn)這些微塊之間的數(shù)據(jù)流動(dòng)。 ? DL_Sink[]:該微塊是一個(gè)接收器微塊,根據(jù) dispatch loop的狀態(tài),可能: ? 將數(shù)據(jù)包放入一個(gè) scratch ring,發(fā)送給另一個(gè)微引擎 ? 丟棄數(shù)據(jù)包 ? 將數(shù)據(jù)包放入一個(gè) scratch/SRAM ring,發(fā)送給 XScale Core ? Dispatch loop是微塊的串行流水線,第一個(gè)微塊是 DL_Source[],最后一個(gè)微塊是 DL_Sink[],每個(gè)微塊設(shè)置 dl_next_block變量指出下一個(gè)處理數(shù)據(jù)包的微塊。 ? 其它微塊檢查 dl_next_block的值并只向下傳遞數(shù)據(jù)包,直到到達(dá)DL_Sink[]。 ? 從 IXP2xxx的角度來看,數(shù)據(jù)包是以固定大小的塊( mpacket)進(jìn)行存儲(chǔ)和傳輸?shù)模? ? 硬件將輸入分組劃分成若干個(gè) mpacket,依次傳輸給 IXP2xxx; ? 輸出機(jī)制將一個(gè)個(gè) mpacket發(fā)送給硬件,硬件將它們組裝成一個(gè)包。 Mpacket(續(xù)) ? 輸入微塊( RX)負(fù)責(zé)組裝 mpacket: ? 每當(dāng)一個(gè) mpacket到達(dá), RX將其從 MSF的 RBUF中拷貝到 DRAM緩沖器。 ? 釋放 DRAM緩沖器。 ? 包并不總是從緩沖器的開頭放起,而是在包的前面隨機(jī)加上一段長(zhǎng)度為0、 128字節(jié)、 256字節(jié)或 384字節(jié)的填充字節(jié),以提高整體的吞吐量。 ? 利用 SRAM控制器硬件( QArray)實(shí)現(xiàn) FIFO操作。 ? Intel使用 緩沖器句柄 來表示對(duì)應(yīng)了一個(gè)空閑鏈表單元的 SRAM地址。 包轉(zhuǎn)發(fā)和存儲(chǔ)器環(huán) ? IXP2xxx使用存儲(chǔ)器環(huán)支持處理器之間的通信: ? 存儲(chǔ)器環(huán)提供一種基本的生產(chǎn)者 消費(fèi)者機(jī)制。 ? 典型地,在流水線的每一對(duì)相鄰級(jí)之間以及微引擎和 XScale Core之間都存在一個(gè) Scratch ring。 ? 長(zhǎng)期駐留的環(huán)緩沖器描述符:也是包處理過程中經(jīng)常要用到的。 ? 若查找失敗,表明隊(duì)列描述符尚示緩存在 QArray中,微引擎利用返回的 LRU,命令 SRAM將該 LRU寫回外部存儲(chǔ)器,然后讀入所需的隊(duì)列描述符,緩存在 QArray中,對(duì)其進(jìn)行操作,修改后的隊(duì)列描述符仍緩存在 QArray中 。 ? 為保持包的順序,線程嚴(yán)格按順序執(zhí)行。 ? 線程嚴(yán)格按順序從 scratch ring中讀數(shù)據(jù)包,并發(fā)信號(hào)通知下一個(gè)線程接收。 IPv4轉(zhuǎn)發(fā) ? 按照 RFC 1812檢查 IP頭的有效性,若 IP頭無效,將數(shù)據(jù)包標(biāo)記為 IX_DROP;否則 ? 對(duì)目的 IP地址執(zhí)行最長(zhǎng)前綴匹配查找,查找結(jié)果為一個(gè)下一跳 ID、一個(gè)交換結(jié)構(gòu)blade ID和一個(gè)輸出端口,這三個(gè)域保存在包元數(shù)據(jù)中;若沒有找到匹配項(xiàng)或其它情形,數(shù)據(jù)包被標(biāo)記為 IX_EXCEPTION。 ? 每當(dāng)隊(duì)列狀態(tài)發(fā)生轉(zhuǎn)移, QM通過鄰居環(huán)向 CSIX調(diào)度器發(fā)送一個(gè)消息。 ? 調(diào)度和發(fā)送均以 cframe為單位進(jìn)行: ? 接收從交換結(jié)構(gòu)來的流控消息(控制到每一個(gè)輸出 IXP2400的流量) ? 接收來自 QM的隊(duì)列狀態(tài)轉(zhuǎn)移消息 ? 檢查 TX流水線中的 cframe長(zhǎng)度是否在門限內(nèi) ? 確定一個(gè)要調(diào)度的隊(duì)列( Round Robin) ? 向 QM發(fā)送一個(gè)離隊(duì)消息 CSIX TX ? 從 QM接收發(fā)送請(qǐng)求消息,每接收一個(gè)發(fā)送請(qǐng)求就將一個(gè) cframe移入一個(gè) TBUF: ? 數(shù)據(jù)包的分片狀態(tài)以及包的元數(shù)據(jù)被緩存在本地存儲(chǔ)器中并用 CAM進(jìn)行查找; ? 在每個(gè) cframe前加上 CSIX頭和 TM(流量管理)頭; ? 數(shù)據(jù)包發(fā)送完畢后,釋放相應(yīng)的緩沖器。 ? 本地存儲(chǔ)器中緩存了 16個(gè)上下文, CAM被用來查找上下文。 ? 如果一跳 ID被設(shè)置為一個(gè)非法的值( 1),那么該微塊假設(shè) PPP頭已經(jīng)加上了,只是將包傳遞到下一級(jí)。 ? 在不同端口間采用 WRR算法,在同一端口的不同隊(duì)列間采用 DRR算法。 ? 最多支持 16個(gè)虛擬端口,發(fā)送上下文保存在本地存儲(chǔ)器。 ? 對(duì)前兩種配置,微塊運(yùn)行在一個(gè)微引擎上;對(duì)于 MPHY16模式,微塊運(yùn)行在兩個(gè)微引擎上。 ? 定期向調(diào)度器反饋已發(fā)送了多少數(shù)據(jù)包。如果數(shù)量超過一個(gè)預(yù)定的值,調(diào)度器停止調(diào)度該端口。 ? 對(duì)于調(diào)度器的每個(gè)離隊(duì)請(qǐng)求,返回一個(gè)離隊(duì)響應(yīng)消息,消息中包含調(diào)度器實(shí)現(xiàn) DRR算法所需要的包長(zhǎng)度。 ? 包重組結(jié)束后,建立包的元信息,并將元信息傳遞給流水線的下一級(jí)。 CSIX RX ? 從 CSIX交換結(jié)構(gòu)接收 cframe,并將它們重組成 IP包。 ? QM上的線程利用本地線程間信令機(jī)制嚴(yán)格按順序執(zhí)行。 基于 Cell的隊(duì)列管理器( Cell QM) ? 負(fù)責(zé)對(duì)發(fā)送隊(duì)列執(zhí)行入隊(duì)和出隊(duì)操作,發(fā)送隊(duì)列用硬件 SRAM鏈表實(shí)現(xiàn)。 ? 根據(jù) PPP頭將數(shù)據(jù)包分成 IPv IPv6或 PPP控制包( LCP、 IPCP等)。 ? 數(shù)據(jù)包從 Packet RX被傳遞給一個(gè)應(yīng)用特定的系統(tǒng)微塊 DL_Sink[]。 POS IPv4轉(zhuǎn)發(fā)的軟件組件 X1 X4 X1 X1 X1 X1 X1 X1 X1 X? Packet RX ? 將從媒體接口收到的 mpacket重組,將重組后的包傳給流水線的下一級(jí): ? 判斷 mpacket是否為包的第一個(gè)或最后一個(gè) mpacket,通過將屬于同一個(gè)包的所有mpacket依次存放在 DRAM緩沖器中得到完整的包; ? 將包緩沖器句柄及包的元數(shù)據(jù)(偏移量、大小等)通過微引擎 微引擎 Scratch ring傳遞給下一級(jí)。 對(duì)緩存的隊(duì)列描述符進(jìn)行操作 ? 當(dāng)需要使用隊(duì)列描述符時(shí),微引擎先進(jìn)行 CAM查找。 ? 每個(gè) QArray只包含 64個(gè)入口,只能將最常使用的隊(duì)列(環(huán))入口放置在 QArray中,其它入口保存在 SRAM中,需要時(shí)換入。 ? 使用存儲(chǔ)器環(huán)的優(yōu)點(diǎn): ? 插入和刪除操作很快,開銷不比常規(guī)的存儲(chǔ)器操作大很多 ? 免去了程序員解決互斥訪問的責(zé)任 ? Scratchpad和 SRAM中都存在環(huán),但 Scratch ring的操作更快。 ? 緩沖器句柄由 4個(gè)字節(jié)組成, 3個(gè)字節(jié)的 SRAM地址以及 1個(gè)字節(jié)的附加信息(緩沖器中是否包含了包的開頭或結(jié)尾,一個(gè)包使用的緩沖器個(gè)數(shù))。 緩沖器句柄 ? 由于空閑鏈表單元地址與 DRAM中的緩沖器地址一一對(duì)應(yīng),因此空閑鏈表單元地址就被用來標(biāo)識(shí)緩沖器。 ? 隨機(jī)填充可將包頭分布到 4個(gè) bank中。 包緩沖器機(jī)制 ? Intel SDK軟件提供了一種包緩沖器機(jī)制,一般情況下可獲得較好的性能。 ? 當(dāng)一個(gè)完整的數(shù)據(jù)包被放入緩沖器后, RX將緩沖器的地址傳遞給流水線中的下一個(gè)微塊。 ? Mpacket大小的選擇通常是在內(nèi)存空間利用率和計(jì)算開銷之間的權(quán)衡。 ? 目前的框架提供兩個(gè)通往 XScale Core的環(huán),一個(gè)用于高優(yōu)先級(jí)的包,一個(gè)用于低優(yōu)先級(jí)的包,這兩個(gè)環(huán)由所有的微引擎共享。 Dispatch loop:作用二 ? 作用二: ? 在寄存器或本地存儲(chǔ)器中維護(hù)全局狀態(tài) ? 提供本微 塊組與 XScale Core以及本微塊組與其它微塊組之間的數(shù)據(jù)包交換。 ? 事實(shí)上,由于臨界區(qū)的互斥訪問以及折疊技術(shù)的使用,線程必須嚴(yán)格按順序執(zhí)行,因此所有線程必須通過微引擎中的全部微塊,即 dispatch loop中的數(shù)據(jù)流是一個(gè)串行的流水線。 ? IX_DROP: 指示數(shù)據(jù)包應(yīng)當(dāng)被丟棄。微塊的邏輯輸出是通過設(shè)置 dispatch loop的變量dl_next_block的值來向下傳遞的。 ? 包處理代碼:每收到一個(gè)包時(shí)調(diào)用一次。 ? 接收器( sink)微塊:運(yùn)行在 dispatch loop的終點(diǎn)(微塊組中的最后一個(gè)微塊),負(fù)責(zé)將數(shù)據(jù)包排隊(duì)發(fā)往不同微引擎上的另一個(gè)微塊組或媒體接口。 ? 每個(gè)微塊組有一個(gè) dispatch loop,定義微塊組內(nèi)數(shù)據(jù)包流動(dòng)的方向。 微塊與流水線組織 ? 微塊是粗粒度、有狀態(tài)的實(shí)體,負(fù)責(zé)執(zhí)行主要的包處理任務(wù)。 ? 計(jì)算超限( pute bound):訪存延遲小于微引擎中所有線程的程序執(zhí)行時(shí)間。 折疊( folding) ? 當(dāng)同一個(gè)微引擎中有多個(gè)線程需要對(duì)同一個(gè)數(shù)據(jù)結(jié)構(gòu)執(zhí)行 RMW操作時(shí),只需第一個(gè)進(jìn)入臨界區(qū)的線程將外部存儲(chǔ)器中的數(shù)據(jù)讀入,修改后緩存在本地存儲(chǔ)器中,后續(xù)的線程可直接對(duì)緩存在本地的數(shù)據(jù)結(jié)構(gòu)執(zhí)行 RMW操作,最后一個(gè)線程將修改后的數(shù)據(jù)結(jié)構(gòu)寫回外部存儲(chǔ)器 。 ? 將數(shù)據(jù)本身緩存在本地存儲(chǔ)器或 SRAM控制器的 QArray硬件中,減少對(duì)外部存儲(chǔ)器的訪問操作。 混合流水線 流水線級(jí)之間的通信機(jī)制 環(huán)緩沖器 多生產(chǎn)者 單消費(fèi)者 使用 Scratch ring或 SRAM ring 單生產(chǎn)者 多消費(fèi)者 使用 Scratch ring或 SRAM ring 單生產(chǎn)者 單消費(fèi)者 使用 Neighbor ring 串行數(shù)據(jù)流處理與 RMW操作 ? 串行數(shù)據(jù)流處理問題:多個(gè)線程需要訪問同一個(gè)數(shù)據(jù)結(jié)構(gòu)時(shí),必須串行地進(jìn)行。 功能流水線(續(xù)) ? 多個(gè)微引擎并行執(zhí)行相同的功能流水線。 功能流水線( functional pipeline) ? 微引擎的執(zhí)行時(shí)間被分成 n個(gè)流水線級(jí),每級(jí)實(shí)現(xiàn)一個(gè)處理子任務(wù)。 ? 微引擎中的每個(gè)線程被分配一個(gè)包,執(zhí)行相同的處理。 ? 可以用 Dispatch Loop將多個(gè)微塊連接起來形成一個(gè)微塊組,運(yùn)行在一個(gè)微引擎上。 ? 微塊是粗粒度的,每個(gè)微塊完成一個(gè)功能。 IXA應(yīng)用的邏輯單元 由常用的低層 C語(yǔ)言函數(shù)和微代碼宏組成, 專門針對(duì)高性能和代碼空間最小化而設(shè)計(jì)。當(dāng)一個(gè)微引擎完成它的任務(wù)后,將處理上下文傳給下一個(gè)微引擎繼續(xù)處理。 為微引擎和 XScale編碼 ? 區(qū)分微引擎和 XScale對(duì)程序員來說很重要: ? 為微引擎編寫的代碼經(jīng)編譯后下載到裸露的硬件上執(zhí)行,因此程序員必須直接處理硬件的所有方面; ? 為 XScale編寫的代碼編譯后運(yùn)行在操作系統(tǒng)下,程序員不需要描寫所有的低層操作,必須使用操作系統(tǒng)功能來執(zhí)行底層任務(wù)。 ? 快路徑:微引擎,處理絕大部分的數(shù)據(jù)包。 ? 每個(gè) IXP2850包含兩個(gè)相同的、獨(dú)立運(yùn)行的硬件單元,由程序員決定如何使用這兩個(gè)硬件單元。 TBUF單元中的數(shù)據(jù)包由附加數(shù)據(jù)和凈荷數(shù)據(jù)組成,附加數(shù)據(jù)一般由線程創(chuàng)建,作為
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1