Chinaunix
标题:
vmalloc单次分配内存的上限值是多少?
[打印本页]
作者:
ycnian
时间:
2014-12-26 16:11
标题:
vmalloc单次分配内存的上限值是多少?
看内存管理模块代码时遇到一个问题:vmalloc单次分配的内存上限是多少?N年前的一个帖子
『请教』get_free_pages申请大内存
讨论了这个问题。但是我还有些疑问,以下讨论基于下列前提:
(1)X86架构
(2)启动内核时没有调整vmalloc的值
N年前的那个帖子中,platinum提供了一段程序通过vmalloc申请了200MB内存,Godbach也进行了验证,请问当时使用的内核版本多少?是否在启动内核时调整了vmalloc的值?
按照我的理解,vmalloc申请的内存只能映射到vmalloc区,vmalloc区的默认值是120MB,根本没办法映射200MB物理内存。但是看当时的帖子,内存的确分出来了,请问是什么原因?好在N年过去了platinum和Godbach还在这里。
其他人有什么想法?
多谢!
作者:
humjb_1983
时间:
2014-12-29 09:52
本帖最后由 humjb_1983 于 2014-12-29 09:53 编辑
其实那个帖子中已经有答案了。vmalloc支持大于120M的分配有两个条件:
1、是以牺牲内核的线性分配区为代价的。就是说当申请大于120M的内存时,原有的0-896M的线性分配区会被压缩,即原来的896M的上限会下移。
2、当需要支持更大的内存分配时,比如1G,原有的896M线性区肯定都不够用了,此时必然是要调整默认的1G/3G的内核/用户的地址空间分配策略的,即调整PAGE_OFFSET的值,platinum当时用的是2G/2G的策略。
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2