Linux Kernel 内存管理函数 vmalloc 拥有更快的执行速度

局长
 局长
发布于 2019年05月21日
收藏 7

据 phoronix 的报道,在 Linux Kernel 5.2 版本中,其用于内存管理的 vmalloc 函数具有更快的执行速度,特别是在嵌入式设备上。

vmalloc 用于在虚拟地址空间中分配连续内存,合并了代码的 Andrew Morton 说到:“新版本中 vmalloc 发生的改变为其带去了巨大的性能优势。”据了解,vmalloc 代码的主要变更集中在追踪用于分配的空闲块。 

现在,Linux 内核的机制是在拥堵的列表迭代中完成新 VA 区域的分配,直到在两个拥堵的区域之间找到合适的空隙。因此,每次新分配都会导致列表增长。而由于长列表和不同的许可参数,分配在嵌入式设备上可能需要很长时间(毫秒)。 

最新提交的补丁将 vmalloc 内存布局组织到 VMALLOC_START-VMALLOC_END 范围的空闲区域中。它使用一个红黑树,以保持这些块按其偏移量进行排序,以及为了增加的地址而与链表一起保持一定的空闲空间。

根据测试,使用了 Uladzislau Rezki 的补丁并执行同样的行为,再与 Linux Kernel 5.1 及之前的版本进行对比,调用 vmalloc() 可节省多达 67% 的时间 —— 至少根据开发者在 QEMU 上进行的测试显示如是。

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 OSCHINA 社区 [http://www.oschina.net]
本文标题:Linux Kernel 内存管理函数 vmalloc 拥有更快的执行速度
加载中

精彩评论

厉害吧24中
厉害吧24中
Linux一大特色,先写一个函数,然后在此基础上abcdefg的前缀加个遍。。😄

最新评论(4

厉害吧24中
厉害吧24中
Linux一大特色,先写一个函数,然后在此基础上abcdefg的前缀加个遍。。😄
LinkerLin
LinkerLin
这个系统调用本来用的就少. 大部分语言的运行时都带了cache机制来避免频繁的vmalloc系统调用.
木一杉
木一杉
67%,那是不是说明原来效率很差?
小果汁儿
小果汁儿
呵呵
返回顶部
顶部