Linux下slab快取記憶體的使用方法

2021-10-22 10:14:28 字數 1380 閱讀 1917

高速dma快取使用:

在核心程式設計中,可能經常會有一些資料結構需要反覆使用和釋放,按照通常的思路,可能是使用kmalloc和kfree來實現,kmalloc能夠分配的記憶體塊大小,存在乙個上限。在程式中常常會反覆分配很多同一大小的記憶體塊,經常會帶來重複初始化和記憶體碎片問題,於是核心提供了slab機制。(我理解是在cache中直接開闢一段快取空間)

1、kmem_cache_create函式建立乙個快取記憶體的頭指標

struct kmem_cache *

kmem_cache_create

(const

char

*name, size_t size, size_t align,

unsigned

long flags,

void

(*ctor)

(void*)

)

name//用於/proc/slabinfo檔案中確認此高速緩衝的字串

size//要建立的cache所對應物件的大小

align//物件對齊偏移量

flags//對應slab的標誌,一般填0

ctor//構建物件建構函式,一般填null

kmem_cache_create()只是分配size大小的快取,並不會呼叫物件的建構函式,只有當再呼叫kmem_cache_alloc()時才會構造物件。

相當於先構造出模子,後面直接用模子生成多個同樣規格的磚。(類似c++中的類)

2、kmem_cache_alloc構造乙個物件

void

*kmem_cache_alloc

(struct kmem_cache *cachep, gfp_t flags);

從快取中分配乙個物件

flag標誌位常用的有gfp_kernel, gfp_atomic,區別在於前者可能會引起睡眠

3、kmem_cache_free釋放物件

void

kmem_cache_free

(struct kmem_cache *cachep,

void

*objp )

;

/* 將乙個物件釋放回slab */

4、銷毀 slab 快取

/* 銷毀 slab 快取, 呼叫前必須確保所有物件都已經返還給slab快取 */

void

kmem_cache_destroy

(struct kmem_cache *cachep)

;

Linux快取記憶體概述

資料緩衝區快取記憶體 核心通過儲存乙個稱為資料緩衝區快取記憶體的內部資料緩衝區池來試圖減小對磁碟的訪問頻率。高速緩衝含有最近被使用過的磁碟塊的資料 在linux核心0.11中,它預設最多支援16m的物理記憶體。對系統記憶體的分配情況如下 linux核心占用物理記憶體最前段的一部分。隨後是高速緩衝區,...

Linux的快取記憶體 Cache Memory詳解

ps 前天有童鞋問我,為啥我的linux系統沒執行多少程式,顯示的可用記憶體這麼少?其實linux與win的記憶體管理不同,會盡量快取記憶體以提高讀寫效能,通常叫做cache memory。有時候你會發現沒有什麼程式在執行,但是使用top或free命令看到可用記憶體free項會很少,此時檢視系統的 ...

Linux的快取記憶體 Cache Memory詳解

ps 前天有童鞋問我,為啥我的linux系統沒執行多少程式,顯示的可用記憶體這麼少?其實linux與win的記憶體管理不同,會盡量快取記憶體以提高讀寫效能,通常叫做cache memory。有時候你會發現沒有什麼程式在執行,但是使用top或free命令看到可用記憶體free項會很少,此時檢視系統的 ...