kmalloc/vmalloc獲取虛擬位址,但它們具有以下差異。
kmaloc以物件為單位(slab)獲取。該快取是以8,16,32,…4096,8192大小建立的,用於kmaloc,並獲取引數指定大小的相應slab。
核心用於確保連續的物理記憶體空間。通過在物理儲存器上確保連續的區域,可以獲得空間區域性性,並且可以最大限度地利用tlb,因此是高速的。
[ root@localhost kitamura]
# cat /proc/slabinfo | grep kmalloc
dma-kmalloc-4096 0 0 4096
dma-kmalloc-2048 0 0 2048
:dma-kmalloc-32 0 0 32
dma-kmalloc-16 0 0 16
dma-kmalloc-8 0 0 8
kmalloc-8192 36 36 8192
kmalloc-4096 114 128 4096
: kmalloc-64 3411 4032 64
kmalloc-32 7123 7808 32
kmalloc-16 6400 6400 16
kmalloc-8 8192 8192 8
vmalloc以頁面為單位獲取,頁面在每次檢索時都被分配。因此vmalloc不能用於critical path。
當快取消失時,kmaloc也會為新快取獲取頁面,通過指定gfp_kernel/gfp_atomic作為kmaloc引數,可以在critical path中使用它。
用於從虛擬儲存區確保虛擬連續的儲存區。與kmalloc()、kfree()不同,它在物理記憶體區域上不一定是連續的。因此,速度較差但可以確保較大的區域。
Kmalloc和Vmalloc的區別
kmalloc 和vmalloc 介紹 kmalloc 用於申請較小的 連續的物理記憶體 1.以位元組為單位進行分配,在中 2.void kmalloc size t size,int flags 分配的記憶體實體地址上連續,虛擬位址上自然連續 3.gfp mask標誌 什麼時候使用哪種標誌?如下 ...
Kmalloc和Vmalloc的區別
kmalloc 和vmalloc 介紹 kmalloc 用於申請較小的 連續的物理記憶體 1.以位元組為單位進行分配,在中 2.void kmalloc size t size,int flags 分配的記憶體實體地址上連續,虛擬位址上自然連續 3.gfp mask標誌 什麼時候使用哪種標誌?如下 ...
Kmalloc和Vmalloc的區別
kmalloc 和vmalloc 介紹 kmalloc 用於申請較小的 連續的物理記憶體 1.以位元組為單位進行分配,在中 2.void kmalloc size t size,int flags 分配的記憶體實體地址上連續,虛擬位址上自然連續 3.gfp mask標誌 什麼時候使用哪種標誌?如下 ...