對於dma分配,除了提供dma_alloc_coherent()這類可以提供大的記憶體分配和對映函式外,dma pool同樣可以申請記憶體並進行對映。dma pool最終還是呼叫dma_alloc_coherent(),但其對進行管理,能提高小記憶體分配和申請的效率。
dma pool在申請記憶體時至少分配page_size即一頁,並根據使用者要求分配的大小size對page進行切分,並將可用的多個size塊串起來,這樣在第一次申請記憶體時會真實申請記憶體,後面可以從前面申請的頁中找到空閒size塊。
(1)第一次分配時初始化
(2)第一次分配後
(3)第二次分配時
(4)第一次分配的記憶體釋放後
從上面分析可以看出:
在size較小時,實際一次物理申請頁過程可以給使用者多次用,不需要每次都去實際申請頁,節省申請物理頁時間,但在size等於或超過page_size,實際上優勢不存在;
整個pool池分配和釋放過程實際上是加鎖的,在io頻繁時,仍需要反覆訪問pool->lock,實際效能不會理想。
效能調優建議:盡量不要用動態分配記憶體,否則會造成效能瓶頸;盡可能提前靜態分配所需要的記憶體,如果提前分配好所有記憶體確實占用記憶體過大,可以靜態+動態分配(即靜態分配能滿足絕大部分io的記憶體需要,當少數不滿足的情況時再動態分配)
TOPSQL 簡單分析
正在學習oracle中,如果有什麼不對的地方,請牛大大們多多指正!目錄 2.4 按 parse calls 查詢topsql資訊 2.5按sharable mem 查詢topsql資訊 3.檢視sql 執行計畫 正文 1.topsql成因 產生top sql 的原因,細化起來有以下原因 1 表結構設...
MediaServer簡單分析
android上的多 服務是有乙個叫做 mediaserver 的服務程序提供的。這個程序通過 binder mediaserver伺服器程序的實現 在 frameworks base media mediaserver 目錄下,很小。該目錄下的android.mk 檔案 local path ca...
sizeof簡單分析
include include typedef struct t1 a typedef struct t2 b a aa b bb int main void int b int malloc 20 sizeof int char str1 ab 0cde 0fg char str2 ab 0cde...