加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux-kernel – 分配大(32mb)连续区域

发布时间:2020-12-13 23:22:19 所属栏目:Linux 来源:网络整理
导读:是否可以在运行时从内核代码中分配大的(即32mb)物理上连续的内存区域(即不使用bootmem)?从我的实验来看,无论我使用什么GFP标志,似乎都不可能成功获得超过4mb的块.根据我读过的文档,GFP_NOFAIL应该让kmalloc等待,只要有必要就可以释放请求的数量,但是我可以
是否可以在运行时从内核代码中分配大的(即32mb)物理上连续的内存区域(即不使用bootmem)?从我的实验来看,无论我使用什么GFP标志,似乎都不可能成功获得超过4mb的块.根据我读过的文档,GFP_NOFAIL应该让kmalloc等待,只要有必要就可以释放请求的数量,但是我可以告诉它只是让请求无限期挂起如果你请求超过可用 – 它似乎没有积极尝试释放内存来满足请求(即kswapd似乎没有运行).有没有办法告诉内核积极地开始交换东西以释放所请求的分配?

编辑:所以我从Eugene的回答中看到,从单个kmalloc获得一个32mb的区域是不可能的….但是有没有可能以更多的hackish方式完成它?就像识别最大的可用连续区域一样,然后手动迁移/交换它两侧的数据?

或者这样的事情怎么样:

1) Grab a bunch of 4mb chunks until you're out of memory.
2) Check them all to see if any of them happen to be contiguous,if so,combine them.
3) kfree the rest
4) goto 1)

如果有足够的时间运行,可能会有效吗?

解决方法

您可能想看看 Contiguous Memory Allocator patches.从 LWN article开始,这些补丁正是您所需要的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读