vmalloc最大申请的空间大小

1、vmalloc和vfree是内核下面申请和释放内存的函数。申请到的内存虚拟地址连续,但是物理地址可能不连续,且按照4K方式对齐。

2、vmalloc最大分配的空间大小(cat /proc/meminfo | grep Vmalloc)查看。最大不可能操作改值

3、假如vmalloc申请一个特别大的空间,即超过了上面的阈值,设备无法申请成功

4、根据上面的错误信息可以确认报错的地方

static struct vmap_area *alloc_vmap_area(unsigned long size,
				unsigned long align,
				unsigned long vstart, unsigned long vend,
				int node, gfp_t gfp_mask)

 又是通过下面这个函数决定

static __always_inline unsigned long
__alloc_vmap_area(unsigned long size, unsigned long align,
	unsigned long vstart, unsigned long vend)

最终可以确定vmalloc分配的空间必须介于这两个宏(32bit 系统)之间

#define VMALLOC_START		(((unsigned long)high_memory + VMALLOC_OFFSET) & ~(VMALLOC_OFFSET-1))
#define VMALLOC_END		    0xff800000UL

其中

#define VMALLOC_OFFSET		(8*1024*1024)

由此可见,vmallo分配的大小取决于high_memory大小,值越小,可分配的空间越大。如

lowmem空间越小,vmalloc空间就可以越大。因为结束地址已经固定。 

5、vmalloc分配成功,返回的地址也在这个区间之间 

6、查看当前系统vmalloc分配的详细信息(cat /proc/vmallocinfo)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值