ARM cortex-A9 的L2 Cache lockdown
在ARM cortex-A9雙核平臺上開發,有一段中斷服務程式碼要求執行時間儘量短,而且時間可預測。
首先想到的是gcc編譯器的優化選項,使用推薦的O2選項,執行時間還是不太理想。
為了進一步優化時間,對原始碼結構進行調整,同時把耗時的操作放到另外一個CPU處理,時間縮短了很多。
最後想到了L2 Cache的lockdown特性,就把這個也使用上了。
ARM cortex-A9雙核平臺有2級cache,32k 的L1 Icache 和Dcache,以及512K的L2 Cache,L1 Cache不能被lockdown,只能對L2 cache進行處理了。
先介紹下cache的工作原理:
傳送門:
cache和write buffer
http://blog.csdn.net/yubingjunj/article/details/5063195
Cache是一種容量小、速度快的儲存器陣列,它位於主存和處理器核心之間,儲存著最近一段時間處理器涉及到的主存塊內容,主要是為了緩解慢速儲存器和處理器之間的速度不匹配造成的訪問瓶頸問題。write buffer經常和Cache配合使用。用來緩解處理器和Cache等高速裝置和慢速儲存器之間的寫速度匹配問題。除了處理器和write buffer之外,與cache相關的還有MMU、匯流排架構等。如如果匯流排是馮.諾依曼結構,因為資料和指令走同一個通道,則只有一個Cache,如果匯流排是哈佛結構,因為資料和指令走不同的通道,則採用2個cache。
CACHE可以分為DATA CACHE和INSTRUCTION CACHE(在有些處理器上,是統一的,資料和指令共用一小塊CACHE). 和普通儲存比較,CACHE的儲存速度快很多.提供CACHE的目的是為了提高速度.如果CPU要取的指令和資料在CACHE裡面,就不用到MEM裡去取,速度會很有優勢.當然,需要提供一定的機制來維護CACHE和
BUFFER -
一般都只看到WRITE BUFFER吧,在ARM的處理器裡,好像沒有看到過READ BUFFER :-) . WRITE BUFFER的作用其實和CACHE一樣,目的都是為了提高速度.試想,如果CPU需要把一些資料寫到外設去,如果外設的速度比CPU的速度慢很多的話,那CPU會在這個寫操作上消耗很多的時間,影響速度.如果能提供一箇中間的BUFFER做緩衝,資料先放到BUFFER,CPU就可以去做別的事情了.然後就可以在從BUFFER寫到目的地址去.
總而言之,CACHE和BUFFER的目的是一樣的,為了提高效能.不過具體的應用場合不一樣.
cache一般是為了加快交換速度,減少讀寫外部慢速儲存器設計的,buffer主要是為了協調速度,如快速裝置同慢速通訊。在一些情況下,他們指的是一個東西
cache解釋:當CPU需要讀寫記憶體地址的資料時,首先看cache中是否有改地址的內容,有的話就不去記憶體訪問了,沒有的話就訪問記憶體,訪問後如果記憶體的MMU描述符的Cbit使能,那麼該地址對應記憶體的資料會被放入cache,這個動作稱為linefill,如果Cbit禁能,那麼CPU直接讀取記憶體資料,但是不會發生linefill,CPU下次訪問該地址記憶體時,仍舊需要直接訪問記憶體。
writebuffer解釋:當CPU需要寫資料到記憶體時,對於WT和WB記憶體,如果記憶體的MMU描述符的Bbit使能,那麼資料先放入writebuffer,適當的時候寫入記憶體,CPU只負責把資料放入writebuffer,不會等待寫入記憶體完畢;Bbit禁能時,CPU一直等待寫入記憶體完畢。
傳送門:CACHE 寫透式與回寫式
http://blog.chinaunix.net/uid-12461657-id-3198510.html
如果所有的cache和記憶體互動由一個CPU負責,那麼cache對我們來說是透明的。
如果有多個CPU或則記憶體在CPU不知情的條件下發生改變,則需要cache flush和cache invalidate來更新記憶體和使無效cache,否則導致cache和記憶體不一致。