kmalloc和vmalloc的不同

2021-10-21 18:30:51 字數 1059 閱讀 2476

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標誌 什麼時候使用哪種標誌?如下 ...