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