rk u boot 優化多核 CPU 記憶體讀寫

2021-08-20 04:32:01 字數 1874 閱讀 7148

重點:

開啟 actlr.smp

tlb entry dcache 模式設定為 write-back.

一次除錯 rk3128 u-boot, 偶然發現 memcpy 很慢, 不到 24mb/s. 分析了 u-boot **, 沒看出問題. 檢視 cortex-a7 mpcore 手冊, 發現協處理器 actlr.smp 位沒開啟, sctlr.c 位不起效:

開啟後測試 memcpy , 沒效果. 後面發現 u-boot 設定 tlb entry 的 cache 模式為 write-through . 改為 write-back 後速度暴增:

cache 開關的**:

voidcache_on(boolon )

for(i = (fb >> 20); i < ((fb + sz_4m) >> 20); i++)

for(i = (malloc_start >> 20); i < (malloc_end >> 20); i++)

asmvolatile(

"mrc    p15, 0, r0, c1, c0, 1       @actlr enabling smp bit in actlr\n"

"orr r0, r0, #(1 << 6)            \n"

"mcr    p15, 0, r0, c1, c0, 1   \n"

// flush tlb

"mov r0,#0 \n"

"mcr p15, 0, r0, c8, c7, 0\n"

);

}

else

}

}

注:不能直接修改 cache-cp15.c 中的 mmu_setup(), 因為 rk 的 u-boot 開機初始化對 cache 支援不完善, 真正開啟 cache 會導致宕機, 筆者是在 board_late_init() 中開啟.

rk 的 dma, sd 驅動對 cache 支援不完善, 所以上面的**將 malloc 記憶體區域設定為 dcache_writethrough; 也可以關閉 sd dma , 遮蔽 config_rk_mmc_dma 配置, 但 mmc 讀取速度會降低.

framebuffer 區域開啟 cache 後, 螢幕畫面會有一點不正常, 因此設定為 dcache_off

進 usb 燒寫模式時, 需要關閉 cache, 即在 do_rockusb() 呼叫前關閉 cache, 否則燒寫的資料有可能會出錯

Redis 多核CPU與NUMA架構優化

當今的cpu一般會有多顆核心 我們稱為物理核心 每顆核心都有自己的一級快取 簡稱l1 cache 與二級快取 簡稱l2 cache 這兩集快取都比較小,一般都是kb級別,cpu核心訪問它們一般只有幾納秒,非常快。一級快取又可以進一步分為指令快取與資料快取。但是一級快取與二級快取都比較小,可以儲存的指...

利用CPU多核處理

在mysql5.5.x後,可以利用innodb read io threads和innodb write io threads,取代之前的innodb file io threads引數,在linux平台上就可以根據cpu核數來更改相應的引數值,預設是4.比如cpu是2棵8核的,可以設定 innod...

多核CPU利用測試

一直在想程式上是否特意讓執行緒在指定的cpu上去執行,這樣可以提高執行效率,所以特地寫個 讓cpu使用率畫正弦曲線的實驗,我使用的是amd x4 641的cpu,為四核四執行緒的 如下 include stdafx.h include include include include using na...