版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 網(wǎng)絡(luò)子系統(tǒng)設(shè)計(jì)</b></p><p> 單純使用技術(shù)來避免工作站上CPU和存儲(chǔ)器的瓶頸是不夠的,必須要把技術(shù)集成起來。</p><p> Peter Druschel,Mark B.Abbott,</p><p> Machael A.Pagels, Larry L.Peterson</p>
2、<p> 新興的網(wǎng)絡(luò)技術(shù)期望給終端工作站提供接近1Gbps的傳輸帶寬,這樣的帶寬足以帶動(dòng)一類新的應(yīng)用火熱起來。然而,這些得益于高速網(wǎng)絡(luò)的應(yīng)用受到一些因素的制約,其中的一個(gè)重要因素就是運(yùn)行在工作站上的操作系統(tǒng)。操作系統(tǒng)必須將良好的網(wǎng)絡(luò)吞吐率轉(zhuǎn)換為良好的應(yīng)用程序間吞吐率。</p><p> Arizona大學(xué)的網(wǎng)絡(luò)系統(tǒng)研究小組(Network Systems Research Group,以下簡(jiǎn)稱NSR
3、G)正在研究操作系統(tǒng)支持高速網(wǎng)絡(luò)的相關(guān)問題。這些實(shí)驗(yàn)性的工作是在Mach OS操作系統(tǒng)的x核心[1]環(huán)境下完成的。研制的系統(tǒng)運(yùn)行在DecStation5000/200以及HP 9000/720工作站上,這些工作站連接著ATM網(wǎng)絡(luò)和FDDI網(wǎng)絡(luò)。</p><p> 大體來講,Mach系統(tǒng)提供了一個(gè)基于微內(nèi)核的操作系統(tǒng)框架,而x內(nèi)核相當(dāng)于其中的網(wǎng)絡(luò)子系統(tǒng)。我們先在邏輯上將所有的網(wǎng)絡(luò)協(xié)議集中于單個(gè)x內(nèi)核協(xié)議樹中,然后
4、在物理上將這個(gè)圖結(jié)構(gòu)分布在整個(gè)系統(tǒng)中,包括操作系統(tǒng)和應(yīng)用程序保護(hù)域(application protection domain)。例如,圖1描述了一個(gè)協(xié)議樹,它連接了一個(gè)應(yīng)用程序、一臺(tái)專用網(wǎng)絡(luò)服務(wù)器,以及內(nèi)核。一個(gè)特定的協(xié)議屬于哪個(gè)保護(hù)域要等到配置時(shí)(不是操作系統(tǒng)設(shè)計(jì)時(shí)間)才能決定,從而也能夠根據(jù)系統(tǒng)配置員對(duì)于性能和信任處理的意愿程度。</p><p> 要優(yōu)化這種結(jié)構(gòu)的性能,就必須解決工作站的存儲(chǔ)器結(jié)構(gòu)限制。
5、問題在于工作站存儲(chǔ)器性能的提升跟不上處理其性能和網(wǎng)絡(luò)帶寬提升的步伐。例如,Hennessy和Patterson報(bào)告指出,自從1985年以來,處理器的性能一直以每年50%-100%的速率提升,而存儲(chǔ)器的性能提升速率只有7%。而且,我們希望這種趨勢(shì)能夠持續(xù)下去,因?yàn)樘幱陂_銷的考慮,我們將會(huì)避免在這類機(jī)器上使用非常快的主存和互聯(lián)技術(shù)。</p><p> 應(yīng)當(dāng)記住我們考慮的是數(shù)據(jù)在一個(gè)基于微內(nèi)核的系統(tǒng)中的流動(dòng),在這種系
6、統(tǒng)中,設(shè)備驅(qū)動(dòng)程序、網(wǎng)絡(luò)協(xié)議以及應(yīng)用軟件都可能駐留在不同的保護(hù)域中。我們相信把話題集中于此是很適合基于微內(nèi)核的系統(tǒng)的優(yōu)點(diǎn)的(可配置性、可分布性以及可移植性),也適合于當(dāng)前商業(yè)領(lǐng)域中對(duì)這類系統(tǒng)的支持趨勢(shì)。我們想說明的是,在不考慮操作系統(tǒng)結(jié)構(gòu)的情況下,取得高的應(yīng)用帶寬也是可能的。</p><p> 本文討論了工作站CPU/存儲(chǔ)器的帶寬和網(wǎng)絡(luò)的帶寬將保持在同一個(gè)數(shù)量級(jí),從而,網(wǎng)絡(luò)子系統(tǒng)必須要致力于使網(wǎng)絡(luò)數(shù)據(jù)在CPU/
7、存儲(chǔ)器數(shù)據(jù)路徑上的跳步數(shù)最小。本文也對(duì)一些應(yīng)用于這些問題的技術(shù)進(jìn)行了研究,得到的一個(gè)重要結(jié)論是單純的應(yīng)用這些技術(shù)對(duì)取得應(yīng)用程序間吞吐率是不夠的,也必須把從一個(gè)源設(shè)備,通過操作系統(tǒng),到達(dá)應(yīng)用程序,還可能到達(dá)終端設(shè)備的整個(gè)數(shù)據(jù)路徑集成起來。本文在總結(jié)中列出了一個(gè)使端對(duì)端吞吐率得到最優(yōu)化的完整數(shù)據(jù)路徑。</p><p><b> 工作站硬件的性能</b></p><p>
8、 在這一節(jié)中我們分析桌面工作站硬件影響輸入輸出數(shù)據(jù)流量的性能參數(shù),包括了對(duì)目前商用工作站的測(cè)試以及下一代工作站相關(guān)參數(shù)的預(yù)測(cè)。</p><p> 表1中給出了四種商用工作站存儲(chǔ)子系統(tǒng)的存儲(chǔ)器峰值帶寬(取自于硬件規(guī)格),以及部分CPU/存儲(chǔ)器帶寬測(cè)量數(shù)據(jù)。存儲(chǔ)器峰值帶寬是存儲(chǔ)子系統(tǒng)在突發(fā)模式傳輸下能夠達(dá)到的帶寬。括號(hào)中給出的是測(cè)量到的帶寬對(duì)峰值帶寬的比例。</p><p><b&g
9、t; 圖1:分布式協(xié)議圖</b></p><p> 表1:一些工作站的存儲(chǔ)器帶寬</p><p> 表1中的CPU/存儲(chǔ)器帶寬數(shù)值是使用一個(gè)普通測(cè)試臺(tái)程序測(cè)算得到的。該測(cè)試臺(tái)程序測(cè)試的是一組讀、寫、復(fù)制操作過程中支持的帶寬。測(cè)試臺(tái)程序用C語言編寫,在各工作站自身的C編譯器下編譯,并得到了最高級(jí)的優(yōu)化,但是C源代碼或者生成的機(jī)器代碼沒有針對(duì)特定機(jī)器進(jìn)行改寫?!白x”、“寫”兩
10、列測(cè)試的是對(duì)一個(gè)數(shù)組中單元素進(jìn)行讀(寫),而“復(fù)制”列使用了兩種方法測(cè)量:一種是數(shù)組元素形式的賦值,另一個(gè)是調(diào)用庫函數(shù)bcopy()。測(cè)試臺(tái)程序使用了int類型(32位)和double類型(64位)數(shù)組,給出的數(shù)據(jù)都是各自條件下所能取得的最佳值。</p><p> 測(cè)試的主要結(jié)果是標(biāo)準(zhǔn)帶寬僅為峰值帶寬的一小部分,特別是讀帶寬為峰值帶寬的15%~38%,復(fù)制帶寬僅為10%~19%。帶寬的下降是由兩方面局限性綜合影
11、響的結(jié)果:第一,編譯器生成的機(jī)器代碼和廠家提供的bcopy()函數(shù)對(duì)于執(zhí)行基準(zhǔn)程序故意設(shè)定的工作是不夠理想的。但是我們盡量不排除它,因?yàn)檫@個(gè)局限性對(duì)真實(shí)程序同樣會(huì)有影響。第二,硬件強(qiáng)制性會(huì)限制帶寬,即CPU能支持的帶寬是有限的。盡管動(dòng)態(tài)RAM存在很大的相關(guān)訪問延遲,所有存儲(chǔ)子系統(tǒng)都使用了某些形式的流水線(交叉式/頁式)來獲得高帶寬。在傳輸時(shí)間中初始化延遲是比較大的,所以對(duì)于少量數(shù)據(jù)傳輸其平均帶寬會(huì)降低。 由于傳輸線路寬度限制,Cache
12、和存儲(chǔ)器之間的數(shù)據(jù)傳輸不能獲得大部分的峰值帶寬。由此我們得出,當(dāng)前工作站的CPU/存儲(chǔ)器帶寬不超過其網(wǎng)絡(luò)帶寬的規(guī)定量級(jí)——幾百M(fèi)bps。</p><p> 下一代工作站將支持1Gbps網(wǎng)絡(luò)適配器,它可以以網(wǎng)絡(luò)速率將數(shù)據(jù)傳送到主存。持續(xù)增長的CPU速度不久將允許以該速率處理軟件數(shù)據(jù)。例如,DEC公司的Alpha處理器首次運(yùn)行,允許以1Gbps帶寬傳輸數(shù)據(jù)流,每個(gè)機(jī)器字包含12~24條可執(zhí)行的CPU指令。然而,人們
13、沒有把希望寄托在CPU/存儲(chǔ)器帶寬的急劇增加上。存儲(chǔ)器峰值帶寬可以通過增加存儲(chǔ)器寬度來提高,但是,Cache的線寬必須成比例的增加才能實(shí)質(zhì)性的增加CPU帶寬。因此,就是要找到一個(gè)理想的合適的比率,很明顯如果太小就不能獲得大部分的峰值帶寬。另一個(gè)方法是降低傳輸延遲,但是動(dòng)態(tài)RAM(DRAM)的訪問時(shí)間被認(rèn)為已經(jīng)接近其技術(shù)極限。幾個(gè)最近公布的器件在DRAM上集成了Cache來降低平均訪問延遲[4]。這些集成的二級(jí)Cache使用大線寬,用寬數(shù)
14、據(jù)通路與DRAM相連。對(duì)于任何Cache,其合適的比率的設(shè)定依賴于它們所處的位置。我們下邊將要談到數(shù)據(jù)I/O訪問表現(xiàn)很差。因此,我們希望下一代桌面工作站的CPU/存儲(chǔ)器帶寬和網(wǎng)絡(luò)帶寬處于同一量級(jí)。</p><p> 數(shù)據(jù)Cache的作用</p><p> 工作站使用Cache來緩沖CPU與主存之間的速度差。該思想是在CPU附近設(shè)置一個(gè)高速存儲(chǔ)器,用來存儲(chǔ)主存中部分?jǐn)?shù)據(jù)。Cache通過降
15、低數(shù)據(jù)和指令的平均訪問延遲來提高系統(tǒng)性能,也降低了在共享存儲(chǔ)器的多處理器系統(tǒng)中對(duì)存儲(chǔ)器的爭(zhēng)奪。然而,Cache的效果受到一些因素的影響:如Cache的大小和組織,數(shù)據(jù)訪問的位置和處理器調(diào)度。</p><p> 假設(shè)系統(tǒng)支持處理全部應(yīng)用級(jí)高帶寬數(shù)據(jù),處理數(shù)據(jù)時(shí)需要CPU對(duì)數(shù)據(jù)單元的每個(gè)字進(jìn)行檢查和可能的修改,潛在的多次訪問。(下一節(jié)將確定幾個(gè)數(shù)據(jù)可能通過CPU/存儲(chǔ)器數(shù)據(jù)通道的原因。)本節(jié)討論數(shù)據(jù)Cache在避免
16、CPU/存儲(chǔ)器間傳輸上效果不明顯。考慮以下重要因素:</p><p> 處理器調(diào)度——CPU調(diào)度可能導(dǎo)致在執(zhí)行其它程序時(shí)插入對(duì)數(shù)據(jù)單元的處理進(jìn)程,當(dāng)</p><p> 返回重新執(zhí)行時(shí),很可能緩沖的數(shù)據(jù)已經(jīng)被替換。在一個(gè)多處理器系統(tǒng)上,進(jìn)程可能被擁有自己數(shù)據(jù)緩沖的不同的CPU重新調(diào)度。在處理數(shù)據(jù)單元時(shí)有幾種情況會(huì)發(fā)生調(diào)度:當(dāng)數(shù)據(jù)單元要被傳遞給另外的線程(如隊(duì)列),處理器必須調(diào)度執(zhí)行該線程
17、;在某種協(xié)議下,隊(duì)列典型性的產(chǎn)生在用戶和系統(tǒng)接口處,在設(shè)備驅(qū)動(dòng)的中斷句柄和驅(qū)動(dòng)的頂層之間;在最差的情況下,在協(xié)議層之間會(huì)產(chǎn)生附加隊(duì)列;還有硬件中斷及信號(hào)觸發(fā)處理器重新調(diào)度的事件。</p><p> 寫策略——多處理器數(shù)據(jù)Cache通常采用寫穿透策略,即每個(gè)寫操作都要寫回主存。寫</p><p> 緩沖與寫穿透Cache一起被使用來減少CPU回寫存儲(chǔ)器的時(shí)間。但是,許多連續(xù)寫——如要對(duì)一
18、個(gè)數(shù)據(jù)單元讀寫每一個(gè)字時(shí)將發(fā)生——仍然會(huì)造成CPU執(zhí)行存儲(chǔ)指令時(shí)等待。</p><p> Cache查找——Cache實(shí)際上是索引和標(biāo)記,訪問Cache中的數(shù)據(jù)不需要虛存地址到物</p><p> 理地址的譯碼。以這種方法,從虛擬共享頁來的緩沖數(shù)據(jù)若超過保護(hù)域邊界就不能保持其有效,物理上標(biāo)記的緩沖不存在這樣的問題。但是,需要一個(gè)包含參考數(shù)據(jù)的輔助翻譯緩沖(TLB)處于活躍狀態(tài)。<
19、/p><p> Cache容量——數(shù)據(jù)Cache速度很快,容量有限。因?yàn)榱粼贑ache中的數(shù)據(jù)檢查和修改</p><p> 的過程包括讀取和存儲(chǔ)每個(gè)字,所以Cache必須至少是數(shù)據(jù)單元的兩倍大。在實(shí)際情況下,由于Cache有限的連接產(chǎn)生線路沖突和在數(shù)據(jù)處理過程中要訪問程序變量使得對(duì)Cache容量的要求進(jìn)一步增加了。</p><p> 為了量化數(shù)據(jù)Cache處理網(wǎng)絡(luò)
20、數(shù)據(jù)的效果,我們進(jìn)行了一些初步的實(shí)驗(yàn),測(cè)量了在操作系統(tǒng)運(yùn)轉(zhuǎn)以后駐留內(nèi)存的網(wǎng)絡(luò)數(shù)據(jù)量。這個(gè)值反映了由于緩沖網(wǎng)絡(luò)數(shù)據(jù),避免了CPU/存儲(chǔ)器數(shù)據(jù)傳輸給用戶進(jìn)程帶來的潛在的好處。它給出了Cache在沒有網(wǎng)絡(luò)數(shù)據(jù)復(fù)制情況下能提供的最大好處。</p><p> 這些實(shí)驗(yàn)是在裝有Mach3.0(MK67)的HP 9000/720工作站上運(yùn)行的。這些工作站配有256KB虛擬索引物理標(biāo)記的數(shù)據(jù)Cache。Mach 3.0 運(yùn)行著
21、稱為via的UNIX操作系統(tǒng)和稱為Unix Server 的用戶進(jìn)程。Unix Server接收用戶進(jìn)程的請(qǐng)求UNIX系統(tǒng)調(diào)用信息,并由Mach的微內(nèi)核來使能設(shè)備請(qǐng)求的的處理。到達(dá)的網(wǎng)絡(luò)報(bào)文被微內(nèi)核通過中斷服務(wù)機(jī)制接收,復(fù)制并壓縮為一個(gè)Mach信息,然后發(fā)送給Unix Server通過其協(xié)議棧來處理。如果一個(gè)網(wǎng)絡(luò)報(bào)文包含的數(shù)據(jù)被另一個(gè)用戶進(jìn)程預(yù)定,它必須從Unix Server 的地址空間復(fù)制到目標(biāo)地址空間。由于Mach的Unix se
22、rver包含了典型UNIX單片機(jī)上的全部網(wǎng)絡(luò)代碼,所以它接收網(wǎng)絡(luò)數(shù)據(jù)信息并將其復(fù)制到最終用戶這個(gè)過程接近于模擬了UNIX單片機(jī)處理網(wǎng)絡(luò)報(bào)文的過程。</p><p> 實(shí)驗(yàn)測(cè)量了在Unix Server將網(wǎng)絡(luò)數(shù)據(jù)復(fù)制到其用戶地址空間之前,駐留Cache的網(wǎng)絡(luò)數(shù)據(jù)量。如果Unix Server執(zhí)行一個(gè)隨意復(fù)制的網(wǎng)絡(luò)數(shù)據(jù)系統(tǒng),Unix Server在復(fù)制點(diǎn)所能看到的在Cache中的駐留部分也將被接收用戶進(jìn)程看到。公布
23、的結(jié)果是在關(guān)閉UDP校驗(yàn)時(shí)獲得的,若打開校驗(yàn),Cache中的駐留部分將會(huì)增加,因?yàn)樯舷挛那袚Q的機(jī)會(huì)將降低并且校驗(yàn)碼會(huì)導(dǎo)致對(duì)大量緩沖報(bào)文數(shù)據(jù)的讀取。對(duì)于Mach Unix Server在收集數(shù)據(jù)方面的修改細(xì)節(jié)見參考文獻(xiàn)[5]。</p><p> 收集實(shí)驗(yàn)數(shù)據(jù)會(huì)出現(xiàn)兩種情況:第一,接收處理器僅運(yùn)行普通的系統(tǒng)程序和實(shí)驗(yàn)接收程序的輕負(fù)載狀態(tài);第二,接收處理器正在接收從第三方處理器快速傳送的8000字節(jié)UDP報(bào)文的重負(fù)載
24、狀態(tài)。</p><p> 圖2畫出了200次測(cè)試時(shí)鐘周期數(shù)的算術(shù)平均值,對(duì)比了要訪問的網(wǎng)絡(luò)緩沖數(shù)據(jù)是否全在Cache中和UDP數(shù)據(jù)包大小的關(guān)系?!?00%未命中”曲線顯示在網(wǎng)絡(luò)數(shù)據(jù)緩沖中使用全部的Cache線,將數(shù)據(jù)從主存讀到Cache中需要的時(shí)鐘數(shù)。注意我們測(cè)試的兩種情況下的數(shù)字均超過了100%Cache未命中時(shí)的結(jié)果。</p><p> 圖2:網(wǎng)絡(luò)緩沖數(shù)據(jù)超額訪問時(shí)間</p&
25、gt;<p> 在我們的定時(shí)循環(huán)中,還有三方面可可能增加時(shí)鐘周期數(shù):</p><p> 第一,因?yàn)閁nix Server是一個(gè)用戶進(jìn)程,在定時(shí)循環(huán)發(fā)生時(shí)可能會(huì)被切換,如果這種情況發(fā)生,測(cè)量時(shí)間將會(huì)增加超過10000個(gè)時(shí)鐘周期。這個(gè)事件反映在數(shù)據(jù)上是很明顯的,所以在圖像上已經(jīng)被排除。</p><p> 第二,I/O設(shè)備的直接存儲(chǔ)器訪問(DMA)會(huì)增加執(zhí)行訪存指令的時(shí)鐘周期
26、數(shù),使得在DMA傳輸結(jié)束之前防止Cache訪問存儲(chǔ)器。尤其是在以太網(wǎng)設(shè)備使用DMA在網(wǎng)卡和存儲(chǔ)器之間傳送數(shù)據(jù)這種重負(fù)載的情況下,這類影響最為明顯。</p><p> 第三,HP720處理器使用虛地址物理標(biāo)記Cache,在訪問Cache時(shí),處理器的TLB中應(yīng)該存在其入口。實(shí)驗(yàn)數(shù)據(jù)表明,在Mach3.0環(huán)境下,如果TLB中沒有入口,則需要130個(gè)時(shí)鐘周期的處理時(shí)間。根據(jù)Mach中使用的管理TLB重新加載的算法和網(wǎng)絡(luò)
27、數(shù)據(jù)緩沖的組織結(jié)構(gòu),對(duì)于一個(gè)單緩沖訪問可能需要加載4個(gè)TLB。圖中“100%TLB和Cache未命中”曲線顯示了最差情況下TLB和Cache未命中所需的時(shí)鐘周期數(shù)的累積值,提供了假設(shè)DMA在最小功效時(shí)的上限訪問時(shí)間。</p><p> 有趣的是,重負(fù)載時(shí)要比輕負(fù)載時(shí)訪問時(shí)間短。由于一個(gè)4KB的存儲(chǔ)頁可以容納1個(gè)以上的網(wǎng)絡(luò)緩沖,我們?cè)O(shè)定在重負(fù)載情況下將大量發(fā)送的網(wǎng)絡(luò)數(shù)據(jù)提前加載到TLB存儲(chǔ)頁,以滿足該特殊發(fā)送方的
28、需要。為了減小TLB加載的影響,我們做了另一個(gè)實(shí)驗(yàn)。在定時(shí)循環(huán)之前,網(wǎng)絡(luò)緩沖所在的存儲(chǔ)頁被加載到TLB中,并且特別小心的保證了在加載TLB時(shí)沒有網(wǎng)絡(luò)緩沖被加載到Cache。</p><p> 圖3:強(qiáng)行加載TLB情況下網(wǎng)絡(luò)緩沖數(shù)據(jù)超額訪問時(shí)間</p><p> 在圖3中,我們發(fā)現(xiàn)所有的測(cè)量時(shí)間均低于“100%修改后Cache未命中”曲線,并且重負(fù)載時(shí)間現(xiàn)在要比輕負(fù)載時(shí)間長。輕負(fù)載時(shí)間的
29、線性程度指出與其考慮大約72%的未命中率的已修改的Cache線路,不如關(guān)注100%未命中率的未修改的Cache線路。</p><p> 實(shí)驗(yàn)論證了存在三個(gè)限制網(wǎng)絡(luò)緩沖數(shù)據(jù)訪問時(shí)間的重要因素:第一、其它系統(tǒng)設(shè)備使用DMA操作時(shí),增加了對(duì)存儲(chǔ)器訪問的爭(zhēng)奪,它將顯著增加把數(shù)據(jù)調(diào)入處理器Cache的時(shí)間,因而增加了平均數(shù)據(jù)訪問時(shí)間;第二、在物理標(biāo)記Cache上,由于網(wǎng)絡(luò)數(shù)據(jù)分布在多個(gè)虛存頁上,這種碎片性導(dǎo)致了對(duì)TLB爭(zhēng)
30、奪,產(chǎn)生了大量的額外訪問開銷;最后,消除了TLB爭(zhēng)奪后,我們測(cè)試平均Cache命中率為28%,這是Cache對(duì)于在Unix Server和用戶地址空間之間傳輸網(wǎng)絡(luò)數(shù)據(jù)所產(chǎn)生的最小的積極作用。</p><p><b> 避免數(shù)據(jù)傳輸</b></p><p> 前兩節(jié)證明了我們的論點(diǎn),即工作站的CPU/存儲(chǔ)器帶寬應(yīng)不超過網(wǎng)絡(luò)帶寬的量級(jí),數(shù)據(jù)Cache在降低CPU/存儲(chǔ)
31、器之間網(wǎng)絡(luò)數(shù)據(jù)流量上收效很小。因此,為了保持來自網(wǎng)絡(luò)設(shè)備并通過操作系統(tǒng)、應(yīng)用程序和可能的下一級(jí)設(shè)備(如顯示器)的數(shù)據(jù)通路的帶寬,就要避免在CPU和存儲(chǔ)器之間的頻繁的數(shù)據(jù)傳輸。</p><p> 以下每個(gè)小節(jié)確定了一個(gè)潛在的在該通路上的數(shù)據(jù)傳輸,并簡(jiǎn)要描述了幾個(gè)能夠有效處理或避免它的技術(shù),同時(shí)給出了這些技術(shù)的假設(shè)前提和局限性。</p><p> 設(shè)備/存儲(chǔ)器數(shù)據(jù)傳輸</p>
32、<p> 主存與網(wǎng)絡(luò)或設(shè)備適配器之間的數(shù)據(jù)傳輸。通常使用的技術(shù)是DMA和程控I/O(PIO)。DMA指I/O適配器不通過CPU直接與主存?zhèn)鬏敂?shù)據(jù)。PIO需要處理器執(zhí)行一段循環(huán)程序逐字傳輸主存和I/O適配器的數(shù)據(jù)。</p><p> 使用DMA通常可以在單總線條件下傳輸大的數(shù)據(jù)塊,因此,獲得的傳輸率接近主存和I/O總線的極限。在活躍的處理器上數(shù)據(jù)傳輸可以并發(fā)執(zhí)行,盡管在大量DMA操作時(shí)會(huì)因?yàn)闋?zhēng)奪存儲(chǔ)
33、器訪問權(quán)使處理器等待。另外,DMA還增加了設(shè)備適配器的復(fù)雜性。數(shù)據(jù)Cache經(jīng)常與DMA傳輸產(chǎn)生不一致,這是說,</p><p> 圖4:X-內(nèi)核中消息的實(shí)現(xiàn)</p><p> 使用PIO方式,在從設(shè)備輸入和向輸出數(shù)據(jù)的過程中CPU一直被占用。所獲得的帶寬常常僅有峰值I/O帶寬的一小部分,這是由以下的原因?qū)е碌?。適配器的控制端口和數(shù)據(jù)端口可以映射到能緩沖或不能緩沖的存儲(chǔ)器區(qū)域內(nèi)。在不能
34、緩沖的情況下,每個(gè)LOAD/STORE指令都導(dǎo)致一個(gè)較短的(例如一個(gè)機(jī)器字)I/O總線傳輸,使得支持的帶寬比較低。在能緩沖的情況下,I/O總線傳輸長度為緩沖線(cache line)長度,取得的帶寬有所提高,但是離峰值I/O帶寬還比較遠(yuǎn)。而且,同樣要刷新高速緩沖區(qū),以和適配器端口保持一致。</p><p> 然而,在某些條件下PIO要比DMA可取一些。首先,內(nèi)核中進(jìn)行的數(shù)據(jù)運(yùn)算,如校驗(yàn)和計(jì)算,有時(shí)候可以和PIO
35、數(shù)據(jù)流動(dòng)結(jié)合在一起,節(jié)省了流向主存儲(chǔ)器的一段路經(jīng)。其次,編程控制數(shù)據(jù)從I/O適配器傳入主存后,數(shù)據(jù)還在高速緩沖區(qū)中,如果數(shù)據(jù)在高速緩沖期間得到訪問,那么就可以減少主存使用的擁塞。</p><p> 具有分散-收集能力對(duì)基于DMA方式的I/O適配器減小存儲(chǔ)器擁塞是非常重要的。分散機(jī)制允許一個(gè)輸入數(shù)據(jù)元存儲(chǔ)到主存的多個(gè)不連續(xù)的區(qū)域內(nèi);收集機(jī)制允許從多個(gè)不連續(xù)的緩沖區(qū)中收集一個(gè)輸出數(shù)據(jù)元。分散-收集能力允許DMA方式
36、從不連續(xù)的物理頁幀中輸入和向不連續(xù)的物理頁幀輸出,這樣就極大簡(jiǎn)化了操作系統(tǒng)的物理存儲(chǔ)管理,并有助于避免把數(shù)據(jù)復(fù)制到連續(xù)的存儲(chǔ)區(qū)中。使用PIO的話,用軟件就可以簡(jiǎn)單的實(shí)現(xiàn)分散-收集機(jī)制。</p><p> 網(wǎng)卡可能要支持在數(shù)據(jù)傳入主存儲(chǔ)器之前對(duì)數(shù)據(jù)包進(jìn)行多路分派操作(demultiplexing),以過濾和選擇數(shù)據(jù)在存儲(chǔ)器中的位置。在最簡(jiǎn)單的情況下,網(wǎng)卡允許主機(jī)僅僅掃描一下數(shù)據(jù)包的頭部,然后主機(jī)確定數(shù)據(jù)包分派策略
37、以及初始化DMA或PIO方式,使數(shù)據(jù)傳輸?shù)街鞔鎯?chǔ)器的合適位置。比較精細(xì)的網(wǎng)卡可以通過主機(jī)CPU進(jìn)行編程后,只需要匹配數(shù)據(jù)包的頭部就能自動(dòng)識(shí)別數(shù)據(jù)包,并使用DMA方式將其存入主存儲(chǔ)器的正確位置。</p><p><b> 跨域傳輸</b></p><p> 保護(hù)機(jī)制使得在保護(hù)域(地址空間)之間傳輸數(shù)據(jù)成為必要。在最簡(jiǎn)單的情況下,一個(gè)I/O數(shù)據(jù)流是由運(yùn)行在傳統(tǒng)的單內(nèi)核
38、系統(tǒng)頂層的一個(gè)應(yīng)用程序進(jìn)程處理的,在這種情況下,每個(gè)數(shù)據(jù)單元必須跨越用戶和內(nèi)核的邊界。一般的,附加的用戶進(jìn)程,如窗口管理器和多媒體服務(wù)器,以及操作系統(tǒng)設(shè)計(jì)內(nèi)核化的趨勢(shì),都會(huì)給I/O數(shù)據(jù)路徑引進(jìn)額外的域邊界。</p><p> 用軟件數(shù)據(jù)復(fù)制來解決數(shù)據(jù)的跨域邊界傳輸又加劇了存儲(chǔ)器瓶頸矛盾。許多現(xiàn)有的技術(shù)都是依賴虛擬存儲(chǔ)系統(tǒng)來提供免于復(fù)制的跨域數(shù)據(jù)傳輸。虛頁重映射技術(shù)(remapping)[8,9]把含有數(shù)據(jù)單元的
39、頁幀和發(fā)送域之間的映射去掉,再把它們映射到接收域。虛擬復(fù)制技術(shù)(寫復(fù)制)[10]把要傳輸?shù)捻搸蚕斫o發(fā)送域和接收域,并一直延續(xù)到共享的一方試圖向共享單元寫入數(shù)據(jù)時(shí)。共享虛存技術(shù)[11] 在兩個(gè)或多個(gè)域之間引入了靜態(tài)共享的緩沖區(qū)來避免數(shù)據(jù)傳輸。</p><p> 虛頁重映射技術(shù)有移動(dòng)的語義,但沒有復(fù)制的語義,這就限制了它在某些場(chǎng)合的應(yīng)用,如發(fā)送方以后不再需要訪問已傳輸?shù)臄?shù)據(jù)時(shí)。虛頁復(fù)制技術(shù)有復(fù)制的語義,但它只能避
40、免對(duì)那些在傳輸后既沒被發(fā)送方改寫又沒被接收方改寫的數(shù)據(jù)的物理復(fù)制。這兩種技術(shù)都需要仔細(xì)的實(shí)現(xiàn)才能達(dá)到低的延遲。切換到超級(jí)用戶模式,取得對(duì)VM數(shù)據(jù)結(jié)構(gòu)的必要鎖定,改變每1頁的VM映射(可能是在數(shù)個(gè)層面上),執(zhí)行TLB/cache保持一致性的操作,然后返回到用戶態(tài),這些操作耗費(fèi)的時(shí)間限制了能獲得的性能。我們?cè)贒ecStation5000/200平臺(tái)上進(jìn)行了測(cè)試,結(jié)果表明,虛頁重映射還是不夠快,難以維持高速網(wǎng)卡的帶寬[12]。</p&g
41、t;<p> 實(shí)際上,這兩種技術(shù)都依賴VM頁的大小,這就產(chǎn)生了另一個(gè)復(fù)雜問題。當(dāng)數(shù)據(jù)單元大小和VM頁大小不匹配時(shí),意味著被數(shù)據(jù)單元重疊的最后一頁中部分?jǐn)?shù)據(jù)一直得不到利用。由于數(shù)據(jù)私有的原因,內(nèi)核必須把一個(gè)新分配的緩沖頁的這部分清空(例如填入0),不至于使之帶來關(guān)系到全局緩沖區(qū)管理和跨域數(shù)據(jù)傳輸?shù)闹卮箝_銷。而當(dāng)接收的網(wǎng)絡(luò)數(shù)據(jù)包報(bào)頭(在數(shù)據(jù)包前部)含有必須對(duì)用戶進(jìn)程隱藏的敏感數(shù)據(jù)時(shí),也會(huì)產(chǎn)生類似的問題。存儲(chǔ)器頁幀只能得到部分
42、利用使得對(duì)于單位數(shù)量的數(shù)據(jù)需要更多的頁面,導(dǎo)致物理存儲(chǔ)開銷、頁面分配、重映射開銷以及對(duì)TLB表目的需求增加。</p><p> 共享的VM技術(shù)同時(shí)避免了數(shù)據(jù)傳輸和相關(guān)的開銷,然而,在共享的保護(hù)域中,使用這種技術(shù)可能要在保護(hù)和安全上做權(quán)衡。因?yàn)楣蚕硎庆o態(tài)的(一個(gè)特定的頁面在同一個(gè)域集合中總是可以訪問的),需要事先知道一個(gè)數(shù)據(jù)單元的所有接收方。有一種稱為動(dòng)態(tài)頁面共享(dynamic page sharing,fbu
43、fs)[12]的混合技術(shù),它把頁面重映射和共享式VM結(jié)合起來,并且探尋網(wǎng)絡(luò)擁塞的位置,來克服這兩種技術(shù)的缺陷。</p><p><b> 數(shù)據(jù)處理</b></p><p> 數(shù)據(jù)處理是指對(duì)網(wǎng)絡(luò)數(shù)據(jù)包中的每一個(gè)數(shù)據(jù)字進(jìn)行檢查甚至改寫的計(jì)算過程。例如加密、壓縮、差錯(cuò)檢測(cè)和校正,以及數(shù)據(jù)表示的轉(zhuǎn)換等。數(shù)據(jù)處理可以用硬件或軟件來實(shí)現(xiàn)。硬件如果能支持?jǐn)?shù)據(jù)處理就可以減輕CPU
44、負(fù)載,而且如果集成得比較恰當(dāng)?shù)脑挘€能減小存儲(chǔ)器的使用沖突。對(duì)于某些特定的處理,例如視頻壓縮(解壓縮),由于這類任務(wù)的計(jì)算非常復(fù)雜,因此短期內(nèi)還必須硬件支持處理。然而,如果所有的數(shù)據(jù)處理都依賴硬件,可能會(huì)嚴(yán)重約束新型的高帶寬的應(yīng)用。</p><p> 軟件對(duì)數(shù)據(jù)的處理一般都是彼此互相獨(dú)立的,這是因?yàn)樗鼈円话愣际遣煌某绦蚰K(如協(xié)議層)的一部分。從而,每次處理的數(shù)據(jù)可能是非緩沖數(shù)據(jù),即數(shù)據(jù)是從存儲(chǔ)器中裝入或存入
45、存儲(chǔ)器的。這些在CPU/存儲(chǔ)器數(shù)據(jù)路徑上重復(fù)的傳輸常常占用了處理消息的絕大部分時(shí)間,以及帶寬。</p><p> 使用一種稱為集成層處理(integrated layer processing,ILP)的技術(shù)可以使這樣的數(shù)據(jù)傳輸達(dá)到最少。ILP是通信協(xié)議實(shí)現(xiàn)中避免數(shù)據(jù)處理的訪存操作的一種技術(shù)。不同協(xié)議中的數(shù)據(jù)進(jìn)行處理時(shí)一般將它們?nèi)诤系揭粋€(gè)流水線管道中。每個(gè)數(shù)據(jù)先裝入寄存器,在寄存器中由多個(gè)數(shù)據(jù)處理層進(jìn)行處理,最
46、后再存儲(chǔ),所有這些操作都是在下一個(gè)數(shù)據(jù)字處理前進(jìn)行的。在這種方式下,一個(gè)合成的數(shù)據(jù)處理序列處理一個(gè)數(shù)據(jù)字時(shí)僅僅從存儲(chǔ)器向CPU傳輸一次,相反的方向也只有一次,而不是對(duì)于每個(gè)不同的層可能都要傳輸一次。</p><p> 文獻(xiàn)[13]有1份詳細(xì)的性能研究,闡明了集成化可以對(duì)性能產(chǎn)生重要影響。另一方面,ILP也有一個(gè)主要的局限,即不同保護(hù)域中的程序模塊要實(shí)現(xiàn)數(shù)據(jù)處理的集成化是非常不容易的。</p>&l
47、t;p><b> 緩沖區(qū)管理</b></p><p> 我們把緩沖區(qū)編輯和數(shù)據(jù)處理區(qū)別開來,后者是對(duì)數(shù)據(jù)的每一個(gè)字進(jìn)行檢測(cè)和(或)更改,而前者可以看作是一組對(duì)緩沖區(qū)的合成操作,即創(chuàng)建、共享、剪切、分割、合并以及回收緩沖區(qū)。</p><p> 引入緩沖區(qū)“懶賦值”(lazy evaluation)來實(shí)現(xiàn)前述原語的緩沖區(qū)管理器可以使緩沖區(qū)編輯免于復(fù)制操作。該管
48、理器提供一個(gè)抽象數(shù)據(jù)類型來表示單個(gè)鄰接緩沖區(qū)的提取。這個(gè)抽象緩沖區(qū)類型的實(shí)例可以實(shí)現(xiàn)為一串不要求連續(xù)的內(nèi)存片斷。例如,X-內(nèi)核用一棵樹來表示消息,樹的葉子對(duì)應(yīng)緩沖區(qū),最左邊的葉子可以帶有信息(如消息頭)。圖4是X-內(nèi)核消息的示意圖。</p><p> 由于緩沖區(qū)編輯常常用于網(wǎng)絡(luò)協(xié)議的實(shí)現(xiàn)中,所以許多操作系統(tǒng)的網(wǎng)絡(luò)子系統(tǒng)都使用了緩沖區(qū)管理器。這些緩沖區(qū)管理器的作用域限制在單個(gè)保護(hù)域中,且一般都在內(nèi)核中。在大多數(shù)系
49、統(tǒng)中,跨越域邊界的數(shù)據(jù)單元需要用軟件復(fù)制到一個(gè)連接的緩沖區(qū)中。</p><p><b> 接口設(shè)計(jì)</b></p><p> 應(yīng)用程序接口(application programming interface,API)定義了數(shù)據(jù)在應(yīng)用程序間輸入和輸出的語義。由該接口定義的語義是實(shí)現(xiàn)效率的重要組成部分。例如,考慮UNIX的read()、write()系統(tǒng)調(diào)用。應(yīng)用程序
50、可以在其地址空間中選擇一個(gè)連續(xù)的數(shù)據(jù)緩沖區(qū),可以是任意地址,任意大小或者對(duì)齊方式(alignment),并且對(duì)緩沖區(qū)擁有無限制的訪問。這種低級(jí)的數(shù)據(jù)緩沖區(qū)表示使得系統(tǒng)要避免數(shù)據(jù)復(fù)制都是非常困難的。</p><p> 首先,所有基于VM(虛存管理)技術(shù)的跨域數(shù)據(jù)傳輸都是在一個(gè)VM頁的單位下進(jìn)行的。如果用戶的緩沖區(qū)起始和結(jié)束的地址不是頁對(duì)齊的,系統(tǒng)就必須復(fù)制第一頁和最后一頁在緩沖區(qū)重疊的部分。根據(jù)用戶緩沖區(qū)的大小,
51、這樣會(huì)抵消掉使用免于復(fù)制技術(shù)所帶來的大部分好處。其次,write()系統(tǒng)調(diào)用原語的語義允許用戶進(jìn)程在調(diào)用返回后即可修改(重用)用戶緩沖區(qū)。如果這樣,系統(tǒng)必須要么把受影響的頁復(fù)制一份,要么在系統(tǒng)處理完先前數(shù)據(jù)之前將用戶進(jìn)程阻塞。第一種方法又引進(jìn)了復(fù)制操作,第二種方法可能會(huì)降低用戶進(jìn)程的有效I/O帶寬。</p><p> 一個(gè)適宜于高效數(shù)據(jù)傳輸方法的API應(yīng)該使用一種抽象數(shù)據(jù)類型來表示數(shù)據(jù)緩沖區(qū)。應(yīng)用程序通過對(duì)它進(jìn)
52、行操作間接訪問緩沖區(qū)類型數(shù)據(jù),即當(dāng)應(yīng)用程序需要緩沖區(qū)或者在系統(tǒng)調(diào)用中傳遞(接收)緩沖區(qū)實(shí)例時(shí),應(yīng)用程序請(qǐng)求系統(tǒng)創(chuàng)建一個(gè)實(shí)例,并當(dāng)關(guān)聯(lián)的緩沖區(qū)不再需要時(shí)請(qǐng)求系統(tǒng)回收這些實(shí)例。這樣系統(tǒng)可以完全控制緩沖區(qū)的管理,包括地址分配、對(duì)齊、傳輸方法等等。后面章節(jié)有關(guān)于這類API的建議。</p><p><b> 端對(duì)端設(shè)計(jì)</b></p><p> 這一節(jié)對(duì)I/O子系統(tǒng)的設(shè)計(jì)空
53、間進(jìn)行分析,以使在從數(shù)據(jù)源到終端設(shè)備的整個(gè)數(shù)據(jù)路徑上數(shù)據(jù)相關(guān)的開銷得到最優(yōu)化。目的是使CPU/存儲(chǔ)器的數(shù)據(jù)傳輸最少。我們分析了設(shè)計(jì)空間中的一些典型采樣點(diǎn),針對(duì)每種采樣點(diǎn),我們分析其公平性(tradeoff),確定最優(yōu)數(shù)據(jù)路徑,并選擇合適的實(shí)現(xiàn)技術(shù)以達(dá)到最優(yōu)的數(shù)據(jù)路徑。</p><p> 在這一節(jié)中,我們引用圖5這樣的結(jié)構(gòu)圖來說明數(shù)據(jù)從源到終端設(shè)備的流動(dòng)過程。在這些圖的下面的結(jié)構(gòu)模型中,使用了一條專用的存儲(chǔ)器總線
54、把單級(jí)高速緩沖和主存儲(chǔ)器連接起來。總線轉(zhuǎn)換器把主存儲(chǔ)器總線連接到單獨(dú)的I/O總線上,所有的設(shè)備都連在I/O總線上。</p><p> 圖5:不同形式的數(shù)據(jù)流:a)硬件流 b)DMA-DMA流 c)操作系統(tǒng)內(nèi)核流</p><p><b> 硬件流</b></p><p> 一種避免CPU/存儲(chǔ)器瓶頸的方法是把CPU和主存都從數(shù)據(jù)路徑上移除。
55、數(shù)據(jù)路徑的建立和控制可以由軟件進(jìn)行,但是數(shù)據(jù)本身從源設(shè)備到終端設(shè)備的傳輸不需要CPU的參與(圖5a)。設(shè)備適配器和總線都必須支持端到端的傳輸,適配器必須能夠從總線上分離出數(shù)據(jù)并做必要的格式轉(zhuǎn)化。</p><p> 這種方法的特征是主機(jī)系統(tǒng)缺少綜合性。因?yàn)閼?yīng)用程序沒有訪問數(shù)據(jù),它們受限于適配器板提供的功能。這樣的結(jié)果是必須在設(shè)備適配器的復(fù)雜度和靈活性以及功能性之間進(jìn)行平衡。</p><p>
56、; 支持固定的功能集的適配器對(duì)高帶寬的應(yīng)用程序的革新幾乎沒有幫助。另一種方式是提供部件可編程的適配器。這種方式可以通過提供特殊的處理器或者可編程電路來實(shí)現(xiàn)。不幸的是,這種辦法本身有問題。首先,應(yīng)用程序以便攜的方式使用可編程設(shè)備適配器是很困難的。其次,在任何給定的時(shí)刻,因?yàn)榻?jīng)濟(jì)上的原因,用于I/O適配器硬件上的技術(shù)很可能落后于主機(jī)系統(tǒng)。因此,依靠板外設(shè)備進(jìn)行處理的應(yīng)用程序不能利用主機(jī)性能升級(jí)帶來的好處,除非它的性能本身完全取決于該設(shè)備的
57、計(jì)算能力(例如網(wǎng)絡(luò)鏈接速度)。在適配器中執(zhí)行這樣的計(jì)算是合適的,這是因?yàn)樗鼈儾荒芾锰幚頇C(jī)速度的提升帶來的好處。</p><p> 硬件流中,I/O子系統(tǒng)中的數(shù)據(jù)傳輸不需要任何專門的技術(shù)。但是,這里所討論的內(nèi)容可以用于適配器板的內(nèi)部設(shè)計(jì)。</p><p><b> DMA-DMA流</b></p><p> 第二種方法是使用DMA方式將數(shù)
58、據(jù)從源設(shè)備傳輸?shù)街鞔鎯?chǔ)器中的緩沖區(qū)。主存儲(chǔ)器緩沖區(qū)可以在操作系統(tǒng)的控制下被編輯,然后使用DMA方式(見圖5b)傳輸?shù)浇K端設(shè)備。CPU控制著數(shù)據(jù)傳輸并且可能改變數(shù)據(jù)單元的大小,還可以控制信息(頭部),但是仍然處于數(shù)據(jù)路徑之外。不同于前一種方法,DMA-DMA流除了需要DMA支持之外并不需要源設(shè)備或者終端設(shè)備適配器提供其他的硬件。因此,可以使用普通設(shè)備(例如磁盤)。</p><p> 這種方法需要兩個(gè)DMA I/O
59、總線。它遵循流量不大于I/O總線帶寬的一半。實(shí)際上,可支持的流量更低,這是因?yàn)橛胁l(fā)CPU活動(dòng)導(dǎo)致的內(nèi)存訪問與由DMA傳輸?shù)膬?nèi)存訪問競(jìng)爭(zhēng),盡管I/O總線和存儲(chǔ)總線是分離的。</p><p> 這種方法想要把CPU從數(shù)據(jù)路徑上移除需要兩個(gè)關(guān)鍵的技術(shù):適配器對(duì)分散-收集DMA的支持,一個(gè)支持對(duì)自由復(fù)制緩沖區(qū)編輯的緩沖管理器。終端設(shè)備適配器對(duì)收集式DMA的支持是至關(guān)重要的。回想前面提到的“懶賦值”緩沖管理器可能導(dǎo)致一
60、個(gè)緩沖區(qū)含有多個(gè)不連續(xù)的碎片。如果沒有收集機(jī)制的話,在將數(shù)據(jù)傳送到終端設(shè)備之前,必須把數(shù)據(jù)單元復(fù)制到連續(xù)的空間。</p><p><b> 操作系統(tǒng)內(nèi)核流</b></p><p> 現(xiàn)在考慮所有數(shù)據(jù)操作均處于內(nèi)核權(quán)限保護(hù)之下的系統(tǒng):沒有用戶權(quán)限的程序。很清楚,數(shù)據(jù)必須通過CPU/數(shù)據(jù)緩沖(圖5c),暗示了可達(dá)到的流量限制在系統(tǒng)復(fù)制帶寬之內(nèi)。目標(biāo)是把CPU/存儲(chǔ)器數(shù)
61、據(jù)通信量控制在最小,也就是兩個(gè)傳輸。解決方法是結(jié)合數(shù)據(jù)操作(如果有多余一個(gè)的話)使用,例如,ILP。注意數(shù)據(jù)操作可能包括經(jīng)由PIO的設(shè)備間數(shù)據(jù)傳送。</p><p> 如果一個(gè)設(shè)備既支持DMA,又支持PIO的話,在這種系統(tǒng)中使用PIO效果可能更好一些。這是因?yàn)槌绦驍?shù)據(jù)傳送可能會(huì)結(jié)合其它的操作。也就是說,不是首先使用DMA,然后從(到)主存載入(存儲(chǔ))數(shù)據(jù)。CPU可能直接從源I/O適配器載入數(shù)據(jù)并且把數(shù)據(jù)存儲(chǔ)到終
62、端適配器中,繞過了主存。這種方法節(jié)省了兩次DMA總線傳輸,并且不會(huì)和CPU競(jìng)爭(zhēng)訪問主存。然而,沒有了存儲(chǔ)器訪問的代價(jià)是通過I/O總線的載入和存儲(chǔ)操作更慢了。哪種方法能夠帶來更有效率的數(shù)據(jù)路徑取決于對(duì)存儲(chǔ)器的訪問和通過PIO對(duì)目標(biāo)硬件進(jìn)行DMA傳輸?shù)男阅鼙容^。</p><p> 不同于前面的方法,操作系統(tǒng)內(nèi)核流提供了對(duì)數(shù)據(jù)路徑的全面的可編程性。然而,所有的操作都必須在操作系統(tǒng)核心中執(zhí)行。應(yīng)用程序和用戶級(jí)服務(wù)器不能
63、調(diào)用由內(nèi)核實(shí)現(xiàn)的數(shù)據(jù)操作。</p><p><b> 用戶級(jí)流</b></p><p> 考慮數(shù)據(jù)在內(nèi)核和一個(gè)或多個(gè)用戶級(jí)保護(hù)域間傳送的系統(tǒng)。這些用戶級(jí)域可能是內(nèi)核化操作系統(tǒng)的一部分,對(duì)第三方提供服務(wù),或者是高帶寬程序的一部分。除前一部分討論的問題之外,設(shè)計(jì)者還面臨著保護(hù)邊界的問題。保護(hù)邊界是集成數(shù)據(jù)操作的一個(gè)障礙。因此,我們認(rèn)為設(shè)計(jì)者必須保證把所有的數(shù)據(jù)操作定位
64、在相同的域中。保護(hù)同樣需要一個(gè)高效的在域間傳送數(shù)據(jù)的方法。</p><p> 前面,我們討論了跨域數(shù)據(jù)傳輸?shù)腣M技術(shù)。使用這種方式在兩個(gè)用戶級(jí)域之間傳送數(shù)據(jù)是非常方便的。否則,在多數(shù)系統(tǒng)上實(shí)現(xiàn)用戶間傳輸需要兩個(gè)軟件復(fù)制—從源用戶域到內(nèi)核緩沖,另一個(gè)從內(nèi)核緩沖到目標(biāo)用戶域。</p><p> 作為一種特殊的例子,用戶域和內(nèi)核域之間的數(shù)據(jù)傳輸有一種不需要額外的花費(fèi)的實(shí)現(xiàn)。如果傳輸同I/O適
65、配器與主存之間的數(shù)據(jù)移動(dòng)結(jié)合起來。這也就是,數(shù)據(jù)是在I/O適配器和用戶緩沖之間直接傳輸。然而,這種方法在用于網(wǎng)絡(luò)I/O的時(shí)候也有問題。在接收端,數(shù)據(jù)傳輸必須推遲直至找到合適的用戶緩沖區(qū),這可能依賴于用戶程序。這可能導(dǎo)致對(duì)網(wǎng)絡(luò)適配器緩沖區(qū)的爭(zhēng)奪。網(wǎng)絡(luò)適配器是支持分離報(bào)文的,這是因?yàn)閿?shù)據(jù)傳輸前必須決定用戶緩沖區(qū)。在傳輸端,需要有一份數(shù)據(jù)復(fù)制用于重傳,但是數(shù)據(jù)的唯一復(fù)制在用戶緩沖區(qū)中。最終,一個(gè)以此方法作為唯一的跨域數(shù)據(jù)傳送實(shí)現(xiàn)而建立的系統(tǒng)受
66、限于一個(gè)單一的操作系統(tǒng)結(jié)構(gòu),并且數(shù)據(jù)只能在單用戶域內(nèi)傳送。</p><p><b> 需要集成</b></p><p> API,跨域數(shù)據(jù)傳送的工具,緩沖管理器,必須以一種重新審視內(nèi)部精妙交互的方式集成。舉例來說,一個(gè)緩沖管理器被限制在內(nèi)核域之中的系統(tǒng),一個(gè)用于跨域數(shù)據(jù)傳送的虛擬復(fù)制工具,一個(gè)UNIX風(fēng)格API指定了一個(gè)指向一片連續(xù)的用戶地址空間的指針。</
67、p><p> 在這種情況下,源設(shè)備的數(shù)據(jù)單元被放在了主存緩沖區(qū)中,一些緩沖區(qū)編輯作為內(nèi)核I/O處理(例如,網(wǎng)絡(luò)包的重新組裝)。當(dāng)一個(gè)由“懶賦值”緩沖代表的數(shù)據(jù)單元到達(dá)用戶/內(nèi)核邊界時(shí),它必須被賦值(把它復(fù)制到一個(gè)連續(xù)的存儲(chǔ)區(qū)域),盡管使用的是虛擬復(fù)制工具。原因是接口把數(shù)據(jù)緩沖定義為連續(xù)的。因?yàn)锳PI允許應(yīng)用程序指定任意的緩沖地址和大小,緩沖的首尾地址可能并不對(duì)齊頁邊界。因此,數(shù)據(jù)傳送工具必須復(fù)制與緩沖區(qū)重疊的首尾頁
68、。</p><p> 一旦使用域的話,可能會(huì)有更多的緩沖區(qū)編輯操作。因?yàn)橛脩艏?jí)別是不能夠得到緩沖管理工具的,應(yīng)用程序要么復(fù)制數(shù)據(jù),要么是用它的“懶賦值” 管理緩沖。后一種情況,當(dāng)數(shù)據(jù)跨越域邊界的時(shí)候,需要另一份數(shù)據(jù)復(fù)制。當(dāng)數(shù)據(jù)被傳送到內(nèi)核之后,API允許用戶程序立即重新使用數(shù)據(jù)緩沖區(qū),可能要使用虛擬復(fù)制工具復(fù)制部分緩沖區(qū)。我們認(rèn)為,盡管使用了避免復(fù)制技術(shù),數(shù)據(jù)路經(jīng)上還是有多份數(shù)據(jù)復(fù)制,這是技術(shù)集成不力的人為后果
69、。</p><p> 我們的問題是緩沖管理器是在內(nèi)核域?qū)崿F(xiàn)的;需要有一個(gè)全局的實(shí)現(xiàn)以使得在整個(gè)數(shù)據(jù)路徑上一直使用懶散估算代表數(shù)據(jù)緩沖區(qū)。一個(gè)全局的抽象緩沖類型有益于所有的域(包括應(yīng)用程序)來執(zhí)行免復(fù)制緩沖區(qū)編輯。第二問題是關(guān)于API的,它通常不允許不連續(xù)的緩沖區(qū)表示,也因此,妨礙了高效的數(shù)據(jù)傳送。潛在的第三個(gè)問題是,跨域數(shù)據(jù)傳輸工具在支持非連續(xù)緩沖碎片傳送方面的先天不足。</p><p>
70、; 圖6:免于復(fù)制的技術(shù)之間的相關(guān)性</p><p> 圖6顯示了一些免于復(fù)制的技術(shù)之間的相關(guān)性。方塊代表可能在數(shù)據(jù)路徑上發(fā)生復(fù)制的情形,氣泡是相應(yīng)的免于復(fù)制的技術(shù)。箭頭代表滿足達(dá)到高效數(shù)據(jù)路徑技術(shù)之間的相關(guān)性。舉例來說,數(shù)據(jù)傳輸?shù)腣M技術(shù),API數(shù)據(jù)傳遞,緩沖管理器必須在通用的緩沖區(qū)表示上達(dá)成一致。虛線表示我們剛才不知道如何高效地集成ILP,API和數(shù)據(jù)傳送工具以使得跨保護(hù)域的數(shù)據(jù)操作的集成。</p&
71、gt;<p> 總的來說,必須在整個(gè)路徑上保持“懶賦值”數(shù)據(jù)緩沖區(qū)表示。這意味著所有的程序必須處理緩沖區(qū)表示的問題。因此,需要一個(gè)全局的緩沖管理器與API以及跨域數(shù)據(jù)傳輸工具集成。跨域數(shù)據(jù)傳送方法的選擇可能對(duì)網(wǎng)絡(luò)適配器的設(shè)計(jì)也有影響。舉例來說,共享VM需要在將數(shù)據(jù)從適配器傳送到主存之前首先分離。</p><p><b> 集成的數(shù)據(jù)路徑</b></p><
72、;p> 這一部分建議一個(gè)建立在抽象緩沖區(qū)類型上的API,它允許集成API,緩沖管理器和跨域數(shù)據(jù)傳送工具以達(dá)到一個(gè)高效的端到端數(shù)據(jù)路徑。這個(gè)方法的關(guān)鍵是一個(gè)被稱之為IODATA的抽象數(shù)據(jù)類型。這部分對(duì)IODATA數(shù)據(jù)類型的設(shè)計(jì)給出一個(gè)概述,討論它的使用,簡(jiǎn)要地說明如何使用不同的緩沖管理機(jī)制和跨域數(shù)據(jù)傳送工具來實(shí)現(xiàn)它。</p><p> 一個(gè)IODATA的實(shí)例代表任意長度的數(shù)據(jù)緩沖區(qū)的抽象。他封裝了一個(gè)或者
73、多個(gè)含有數(shù)據(jù)的物理緩沖區(qū)。在任何時(shí)候,物理緩沖區(qū)可能并不連續(xù),對(duì)應(yīng)于當(dāng)前的域,或者是主存。IODATA數(shù)據(jù)類型是不變的,也就是說,一旦創(chuàng)建了一個(gè)用數(shù)據(jù)內(nèi)容初始化的實(shí)例,則它的內(nèi)容就不能發(fā)生變化了。IODATA實(shí)例可以用定義好的操作集來操作。這種抽象類型的實(shí)現(xiàn)(實(shí)現(xiàn)操作的代碼)被當(dāng)作是每一個(gè)保護(hù)域中的庫的一部分。IODATA操作的確切形式依賴于具體的編程語言。</p><p> IODATA類型用來表示數(shù)據(jù)緩沖區(qū)
74、有很重要的優(yōu)勢(shì)。首先,它允許在整個(gè)數(shù)據(jù)路徑上只使用一個(gè)緩沖區(qū)表示,允許懶散緩沖區(qū)估算。其次,它把應(yīng)用程序,用戶級(jí)服務(wù)以及大部分內(nèi)核同緩沖區(qū)管理、跨域數(shù)據(jù)傳送的細(xì)節(jié)隔離開來。這增加了應(yīng)用程序和操作系統(tǒng)的可移植性,并且允許在不同的平臺(tái)上使用最高效的緩沖區(qū)管理和數(shù)據(jù)傳送技術(shù)。最后,IODATA類型是得用用程序可以使用高效緩沖區(qū)操作,消除了分離應(yīng)用程序級(jí)緩沖管理的需求。</p><p> IODATA類型支持以下操作。
75、創(chuàng)建所需大小的實(shí)例的分配操作,分配合適數(shù)量的物理緩沖區(qū)的操作。在初始化階段,給客戶端提供一個(gè)指向初始化所需大小的物理緩沖區(qū)的指針。一個(gè)共享的操作創(chuàng)建一個(gè)IODATA實(shí)例的復(fù)制;它并不真正地復(fù)制物理緩沖區(qū)。剪貼,分解和連接是必要的緩沖區(qū)基本操作。一個(gè)回收操作產(chǎn)生一個(gè)指向物理數(shù)據(jù)緩沖區(qū)碎片的指針列表。并以此允許客戶端訪問數(shù)據(jù)。一個(gè)新的操作是回收和分配的結(jié)合。它允許客戶端從IODATA實(shí)例讀取數(shù)據(jù)并且像一個(gè)新的IODATA實(shí)例存儲(chǔ)(可能已經(jīng)改
76、變了)數(shù)據(jù)。這個(gè)操作產(chǎn)生了一個(gè)指針對(duì)列表,一個(gè)指向碎片源,一個(gè)指向目標(biāo)物理緩沖區(qū)。最終,一個(gè)反分配操作銷毀了IODATA實(shí)例并且如果沒有數(shù)據(jù)的邏輯復(fù)制的話就回收物理緩沖區(qū)。</p><p> 考慮IODATA數(shù)據(jù)類型的一個(gè)實(shí)現(xiàn)。一個(gè)關(guān)鍵的特性是這個(gè)實(shí)現(xiàn)對(duì)物理緩沖區(qū)的大小,位置,對(duì)齊都有完全的控制權(quán)。因此,可以實(shí)現(xiàn)各種緩沖區(qū)管理機(jī)制。所有的緩沖區(qū)可以成為系統(tǒng)池的一部分由主機(jī)自動(dòng)分配,定位于共享VM區(qū)域,或者處于主
77、存之外的適配器上。物理緩沖區(qū)可以是固定大小的,這樣的話分配比較簡(jiǎn)單并且速度快。另一個(gè)關(guān)鍵的特性是它的不變性。它允許透明地使用頁的重映射,共享VM,和其它的VM技術(shù)來進(jìn)行跨域的IODATA實(shí)例傳送操作??梢允褂酶咝У奶摂M復(fù)制,這是因?yàn)槲锢砭彌_區(qū)已經(jīng)能夠保證傳送后不被寫。</p><p> 擴(kuò)充現(xiàn)存的API(例如UNIX上的),使其包含基于IODATA類型的I/O操作是可行的。依靠高帶寬(例如多媒體)的應(yīng)用程序可
78、以使用這個(gè)新的接口。傳統(tǒng)的接口保留下來以保持兼容性,這是以將數(shù)據(jù)復(fù)制到連續(xù)存儲(chǔ)區(qū)域?yàn)榇鷥r(jià)的。使用新接口的應(yīng)用程序使用或者修改輸入數(shù)據(jù),而不僅僅是對(duì)緩沖區(qū)進(jìn)行編輯,必須能夠?qū)Ψ沁B續(xù)的IODATA實(shí)例進(jìn)行處理。對(duì)經(jīng)常訪問輸入數(shù)據(jù)的大量的應(yīng)用程序來說,多出的程序復(fù)雜度和運(yùn)行開銷是可以忽略的。典型地,使用數(shù)組索引從連續(xù)的緩沖區(qū)讀取數(shù)據(jù)的循環(huán)必須嵌套在另一個(gè)對(duì)同樣緩沖區(qū)進(jìn)行操作的循環(huán)中。為尋求高效而需要連續(xù)數(shù)據(jù)存儲(chǔ)空間的應(yīng)用程序必須顯式地執(zhí)行復(fù)制
79、(或者使用舊的接口),這樣其實(shí)就是在復(fù)制開銷與快速隨機(jī)訪問之間權(quán)衡。</p><p><b> 結(jié)束語</b></p><p> 本文說明了工作站上的CPU/存儲(chǔ)器數(shù)據(jù)路徑的帶寬在同工作站的網(wǎng)絡(luò)帶寬保持相應(yīng)量級(jí)。這使得我們必須讓數(shù)據(jù)通過CPU/存儲(chǔ)器數(shù)據(jù)路徑的時(shí)間最小。另外,有證據(jù)表明緩存并不能夠顯著地減少通過這個(gè)路徑的數(shù)據(jù)量。</p><p&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 翻譯原文-網(wǎng)絡(luò)子系統(tǒng)設(shè)計(jì).pdf
- 翻譯譯文-網(wǎng)絡(luò)子系統(tǒng)設(shè)計(jì).doc
- 外文翻譯--噴射系統(tǒng) 中文版
- 外文翻譯--噴射系統(tǒng) 中文版
- 外文翻譯中文版
- 紡織[外文翻譯]中文版
- 外文翻譯-中文版.doc
- 外文翻譯-中文版.doc
- 外文翻譯-中文版.doc
- 外文翻譯-中文版.doc
- 外文翻譯--沖壓模具設(shè)計(jì) 中文版
- 外文翻譯--可制造性設(shè)計(jì) 中文版
- 畢業(yè)設(shè)計(jì)外文翻譯_中文版.doc
- 外文翻譯--監(jiān)測(cè)系統(tǒng)防止停工 中文版
- 外文翻譯--pci bios 中文版
- 外文翻譯-英中文版.doc
- 外文翻譯-英中文版.doc
- 外文翻譯--刀具 中文版.doc
- 畢業(yè)設(shè)計(jì)外文翻譯_中文版.doc
- 外文翻譯-英中文版.doc
評(píng)論
0/150
提交評(píng)論