linux内核中分配4M以上大内存的方法

原创 2012年03月28日 00:05:35

在内核中, kmalloc能够分配的最大连续内存为2的(MAX_ORDER-1)次方个page(参见alloc_pages函数,     "if (unlikely(order >= MAX_ORDER))        return NULL;"), page的大小一般是4K bytes, MAX_ORDER缺省定义为11, 所以如果不修改内核, kmalloc能够分配的最大连续内存一般是4M bytes.

内核中获取4M以上大内存的方法有三种:

1.修改MAX_ORDER, 重新编译内核

2.内核启动选型传递"mem="参数, 如"mem=80M", 预留部分内存; 然后通过request_mem_region和ioremap_nocache将预留的内存映射到模块中. 需要修改内核启动参数, 无需重新编译内核. 但这种方法不支持x86架构, 只支持ARM, PowerPC等非x86架构.

3.在start_kernelmem_init函数之前调用alloc_boot_mem函数预分配大块内存, 需要重新编译内核.


在不重新编译内核的前提下, x86架构下内核中只能获取到最大4M的连续内存, 或者使用vmalloc获取4M以上的非连续内存. 而且, 无论是kmalloc还是vmalloc, 分配的内存越大, 失败的可能性越大; 系统启动后分配内存的时间越早(此时空闲内存越多, 分部也越规律), 成功的可能性越大.


kmalloc分配大小的限制

kmalloc是通过cache来实现的, 只不过每次kmalloc的大小不同, 因此是从不同的cache中分配: /* include/linux/slab.h */ // 注意kmalloc是在...
  • sadamoo
  • sadamoo
  • 2013年01月25日 16:10
  • 1438

图像采集处理之DDR内存分配

由于这是设计之后的一些资料整理和总结,有时候没有兼顾设计流程,知识点总结的顺序可能没有按照最初的设计顺序,这只是为了方便自己以后翻阅,还请不喜勿喷! 本设计中是用HLS加速的方法来对获取的视频进行算法...

常见的Linux内核中内存分配

1.原理说明          Linux内核中采 用了一种同时适用于32位和64位系统的内 存分页模型,对于32位系统来说,两级页表足够用了,而在x86_64系 统中,用到了四级页表,如图...

如何从linux内核--ubuntu系统cmdline上预留DDR物理内存DMA--mem=750M

luther@gliethttp:~$ vim /proc/iomem 00100000-5bf0ffff : System RAM 00100000-00575553 : Kernel code...
  • yhc1991
  • yhc1991
  • 2014年07月15日 16:54
  • 1553

linux内核中常见的内存分配方法

常用知识——linux内核中常见的内存分配方法 Linux内核中常见内存分配函数 1.    原理说明 Linux内核中采用了一种同时适用于32位和64位系统的内存分页模型,对于...

linux内核内存分配方式

  • 2012年02月02日 09:58
  • 184KB
  • 下载

Linux内核之内存管理(4)--缺页处理程序

缺页处理程序//下面函数将一页内存页面映射到指定线性地址处,它返回页面的物理地址 //把一物理内存页面映射到线性地址空间指定处或者说把线性地址空间指定地址address处的页面映射到主内存区页面pag...

linux内核完全注释---学习札记--linux对内存的使用方法

linux对内存的使用方法 地址映射 地址转换 虚拟地址 线性地址

linux内核内存的详细分配

我们知道CPU所访问的都是虚拟内存地址。那么平时我们自己在编写的内核模块时,linux到底分配的是什么样的 内存空间呢?要解答这个问题,首先就要看看内核非连续内存。 在linux的内存管理中,用户使用...

Linux内核源代码情景分析-内存管理之slab-分配与释放

首先说缓存区的数据结构:struct kmem_cache_s { /* 1) each alloc & free */ /* full, partial first, then free */ ...
  • jltxgcy
  • jltxgcy
  • 2015年03月04日 19:32
  • 1443
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linux内核中分配4M以上大内存的方法
举报原因:
原因补充:

(最多只允许输入30个字)