概述
kmalloc/vmalloc获取虚拟地址,但它们具有以下差异。
kmalloc/kfree
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