3 3 5 DMA寫時發生Cache命中的優化

2021-06-16 21:53:25 字數 2491 閱讀 5473

在許多高效能處理器中,還提出了一些新的概念,以加速外設到儲存器的

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

的層次組成結構和狀態機模型異常複雜,本章對這些內容不做進一步說明。

c 寫時拷貝

在c 中乙個類有六個預設成員函式,其中拷貝建構函式分為淺拷貝和深拷貝 淺拷貝是一種值拷貝,深拷貝不僅是值拷貝,還要做其他處理 深淺拷貝的區別 由上圖可知當乙個拷貝構造乙個需動態開闢空間的物件時,用淺拷貝時會出現同一塊空間被釋放兩次,這樣顯然有問題,用深拷貝的話可以解決此問題,但當拷貝構造出來的物件,...

c 寫時拷貝1

class string string const string s ptr new char strlen s.ptr 1 另外開闢空間 string private char ptr void test int end gettickcount 記錄此時毫秒數 string const stri...

C 寫時拷貝技術

寫時拷貝 就是在寫的時候 修改字串的時 才會進行真正的空間分配,在唯讀的情況下,資料進行淺拷貝。寫時拷貝技術就是引用計數器的淺拷貝,是通過 引用計數 實現的,在分配空間的時候多分配4個位元組,用來記錄有多少個指標指向這塊空間。當有新的指標指向這塊空間時,引用計數加1 當要釋放這塊空間時,僅引用計數減...