3.3.5 DMA寫時發生Cache命中的優化
在許多高性能處理器中,還提出了一些新的概念,以加速外設到存儲器的DMA寫過程。如Freescale的I/O Stashing和Intel的IOAT技術。
如圖3?8所示,當設備進行存儲器寫時,如果可以對Cache直接進行寫操作時,即便這個存儲器寫命中了一個狀態為M的Cache行,可以不將該Cache行的數據回寫到存儲器中,而是直接將數據寫入Cache,之後該Cache行的狀態依然為M。采用這種方法可以有效提高設備對存儲器進行寫操作的效率。采用直接向Cache行寫的方法,PCI設備對存儲器寫命中一個狀態為M的Cache行時,將執行以下操作。
(1) HOST主橋將對存儲器的寫請求發送到FSB總線上。
(2) CPU通過對FSB監聽,發現該寫請求在某個Cache行中命中,而且該Cache行的狀態為M。
(3) HOST主橋將數據直接寫入到Cache行中,並保持Cache行的狀態為M。注意此時設備不需要將數據寫入存儲器中。
從原理上看,這種方法並沒有奇特之處,僅需Cache能夠提供一個接口,使外部設備能夠直接寫入即可。但是從具體實現上看,設備直接將數據寫入Cache中,還是有相當大的難度。特別是考慮在一個處理器中,可能存在多級Cache,當CPU進行總線監聽時,可能是在L1、L2或者L3 Cache中命中,此時的情況較為複雜,多級Cache間的協議狀態機遠比FSB總線協議複雜的多。
在一個處理器係統中,如果FSB總線事務在“與FSB直接相連的Cache”中命中時,這種情況相對容易處理;但是在與BSB(Back-Side Bus)直接相連的Cache命中時,這種情況較難處理。下文分別對這兩種情況進行討論,在一個處理器中,采用FSB和BSB連接Cache的拓撲如圖3?9所示。
當采用FSB總線連接L2 Cache時,L2 Cache直接連接到FSB總線上,設備通過FSB總線向L2 Cache進行寫操作並不難實現,MPC8548處理器就是采用了這種結構將L2 Cache直接連接到FSB總線上。
但是由於FSB總線的頻率遠低於BSB總線頻率,因此采用這種結構將影響L2 Cache的訪問速度,為此高端處理器多采用BSB總線連接L2 Cache,x86處理器在Pentium Pro之後的高性能處理器都使用BSB總線連接L2 Cache,Freescale的G4係列處理器和最新的P4080處理器也使用BSB總線連接L2 Cache。
當L2 Cache沒有直接連接到FSB上時,來自外部設備的數據並不容易到達BSB總線。除了需要考慮Cache連接在BSB總線的情況外,在外部設備進行DMA操作時,還需要考慮多處理器係統的Cache共享一致性協議。設計一個專用通道,將數據從外部設備直接寫入到處理器的Cache中並不容易實現。Intel的IOAT和Freescale的I/O Stashing可能使用了這種專用通道技術,直接對L1和L2 Cache進行寫操作,並在極大增加了設計複雜度的前提下,提高了處理器係統的整體效率。
以上對Cache進行直接寫操作,僅是Intel的IOAT和Freescale的I/O Stashing技術的一個子集。目前Intel和Freescale沒有公開這些技術的具體實現細節。在一個處理器係統中,可能存在多級Cache,這些Cache的層次組成結構和狀態機模型異常複雜,本章對這些內容不做進一步說明。
最後更新:2017-04-03 16:48:37