首页
Python
Java
前端
数据库
Linux
Chatgpt专题
开发者工具箱
buddy专题
Linux Buddy系统算法源码解析
在Linux引导起来之后,伙伴系统分配算法是和物理内存最底层的接口。所有内存分配函数,比如vmalloc/kmalloc最后都是通过伙伴算法对内存进行分配的。接下来我们将解读一下伙伴系统的分配和回收算法。 伙伴系统模块提供了两个主要的接口给上层程序,他们是: 1. 页面请求函数 struct page * fastcall __alloc_pages(gfp_t gfp_ma
阅读更多...
【Linux基础系列之】内存管理(1)-buddy和slub算法
Linux内存管理是一个很复杂的系统,也是linux的精髓之一,网络上讲解这方面的文档也很多,我把这段时间学习内存管理方面的知识记录在这里,涉及的代码太多,也没有太多仔细的去看代码,深入解算法,这篇文章就当做内存方面学习的一个入门文档,方便以后在深入学习内存管理源码的一个指导作用; (一)NUMA架构 NUMA通过提供分离的存储器给各个处理器,避免当多个处理器访问同一个存储器产生的性
阅读更多...
内存管理算法--Buddy伙伴算法
http://blog.csdn.net/orange_os/article/details/7392986 采用buddy算法,解决了外碎片问题,这种方法适合大块内存请求,这是因为把页作为单位内存块,不适合小内存区请求。如:几十个或者几百个字节。 对于小内存的请求,slab算法可能更好的解决内碎片问题。 Buddy算法的优缺点: 1)尽管伙伴内存算法在内存碎片问题上已经做的相
阅读更多...
使用Byte Buddy生成Java字节码
上周我们探索了下[url=http://it.deepinmind.com/jvm/2014/07/03/how-to-make-java-more-dynamic-with-runtime-code-generation.html]Java的强类型及静态类型系统[/url]。我承认这样的类型让我们的代码表达性更强,但是同时也限制了第三方库提供面向POJO的API的能力。 我们明白了Java
阅读更多...
深入内核buddy分配器(芯驰X9/杰发8015 buddy系统明明还有几十M到100多M内存,却分配4k内存失败)
如上图内核打印分配4K内存失败,但是normal 类型的buddy系统还有大量内存。居然分配失败。源码分析: 根据log+faddr2line定位到,调用栈为__alloc_pages_slowpath——》get_page_from_freelist——》zone_watermark_fast 可以看到buddy内存低于一定水平,又不能立即触发kswapd回收内存就会失败。从代码看支持多种w
阅读更多...
Linux mem 2.5 Buddy 内存回收机制
文章目录 1. 简介2. LRU 组织2.1 LRU 链表2.2 LRU Cache2.3 LRU 移动操作2.3.1 page 加入 LRU2.3.2 其他 LRU 移动操作 3. LRU 回收3.1 LRU 更新3.2 Swappiness3.3 反向映射3.4 代码实现3.4.1 struct scan_control3.4.2 shrink_node()3.4.3 shrink_l
阅读更多...