`
tomhibolu
  • 浏览: 1431401 次
文章分类
社区版块
存档分类
最新评论

kernel hacker修炼之道之内存管理-SLUB(SLUB的基本数据结构)

 
阅读更多

kernel hacker修炼之道之内存管理-SLUB

作者:李万鹏 于北京 borqs

2011.9.17 11:07

本SLUB系列文章从几个方面讨论:

1. SLUB的基本数据结构

2. 创建SLUB高速缓存kmem_cache_create()

3. 销毁SLUB高速缓存kmem_cache_destroy()

4. 创建SLAB块new_slab()

5. 撤销SLAB块free_slab()

6. 分配SLAB对象kmem_cache_alloc()

7. 释放SLAB对象kmem_cache_free()

8. SLUB系统的初始化代码



SLAB系列文档详细讲解了slab的框架源码,但是slab存在众多的不足。

1.复杂的队列管理机制。

2.数据结构过于庞大,浪费空间。

3.着色并不能完全解决cache miss。

4.对NUMA支持,内存回收,性能调优都非常复杂。



SLAB块的内部组织:


下边看一些核心数据结构:

每一个cache用一个struct kmem_cache进行描述。size是分配给对象的大小,objsize是对象的实际大小,offset是存放空闲对象指针的偏移。oo成员的高位保存页面的order,低位保存对象的个数。name是缓冲区的名字。struct kmem_cache_node为每个节点创建的slab信息的数据结构。

下边就是一个slab对象的结构:

struct kmem_cache_cpu就是percpu local slab了,freelist指向一个空闲对象队列的第一个对象。page指向slab的第一个物理页框,顺便说一下,在SLUB中没有slab描述符,而是用slab第一个物理页框的struct page结构,给page结构新增加几个字段,比如:

他们都是union的,所以并不增加struct page结构的大小,也只有是slab第一个物理页框的页描述符的时候这些字段才有效。

struct kmem_cache_node是与节点有关的,如果有多个节点就有多个kmem_cache_node,如文档上边的图,partial和full字段分别是slabs_partialslabs_full这两个双向循环链表的头,nr_partial字段是slabs_partial链表上slab的数量。slabs_full链表也只是在调式的时候才打开,这里去掉了slabs_free链表,如果slab变成free了就直接释放掉,这样就不像SLAB那样需要复杂的回收算法了。

下边简单的对SLAB与SLUB进行一下比较:

1.SLUB只有slabs_full与slabs_partial两条链表

2.SLUB去掉了share local list

3.去掉了庞大的SLAB管理对象

4.去掉了着色,因为在SLAB 块比较多的时候着色就不怎么起作用了,反而SLUB中用的cache复用更能解决问题

5.local slab直接取到一个SLAB块而不是cpu local salb指针接管从share local list,再从slab list3,简化了slab管理


分享到:
评论

相关推荐

    Linux常见驱动源码分析(kernel hacker修炼之道全集)--李万鹏

    Linux常见驱动源码分析(kernel hacker修炼之道)--李万鹏 李万鹏 IBM Linux Technology Center kernel team 驱动资料清单内容如下: Linux设备模型(中)之上层容器.pdf Linux设备模型(上)之底层模型.pdf Linux...

    常见驱动源码分析(kernel hacker修炼之道)-李万鹏

    这本书是“Linux kernel hacker修炼之道”的一部分,通过深入剖析各种常见的驱动源码,帮助读者提升在Linux系统中的驱动开发能力。 在Linux操作系统中,驱动程序是连接硬件与内核的桥梁,它们负责管理和控制硬件...

    常见驱动源码分析(kernel hacker修炼之道)

    《常见驱动源码分析(kernel hacker修炼之道)》这本书或课程很可能深入探讨了如何理解和编写这些驱动,旨在帮助开发者提升对Linux内核和驱动编程的理解。在这个过程中,我们将会涉及到几个关键的知识点: 1. **Linux...

    linux kernel修炼之道

    如果刚刚对linux的kernel有兴趣,想了解点什么的话,请先看看此书吧,她风趣幽默的介绍了linux的发展趣事,让你开心快乐之余慢慢领会linux的魅力,让你了解学习掌握kernel的方法。其中的很多建议经过我的实践和摸索...

    Linux内核驱动笔记

    内存管理是Linux内核的重要组成部分,它包括了与体系结构无关的部分和依赖于特定体系结构的部分。内存管理负责分配、回收内存资源,管理虚拟内存和物理内存的映射关系,并实现内存保护机制。 Linux内核支持多种文件...

    hacker成长之道

    有关hacker 的文章和资料分享给大家

    processhacker-2.39-bin

    ProcessHacker是一款强大的系统信息工具,它提供了进程管理、服务管理、硬件监控、内存查看等多种功能,深受系统管理员和高级用户的喜爱。这个"processhacker-2.39-bin"压缩包很可能包含了ProcessHacker的二进制版本...

    x64_processhacker_源码

    Process Hacker是一款开源、免费且功能强大的系统信息工具,它允许用户查看并管理正在运行的进程、服务、线程以及内存等系统资源。 【描述】"Process Hacker 1.1 PH1" 提示我们这是Process Hacker的早期版本,版本...

    Algorithm-HackerRank-Solutions-In-Scala.zip

    《Scala语言解构HackerRank算法挑战》 在编程领域,算法是不可或缺的一部分,它为计算机程序提供了高效、系统地解决问题的方法。Scala是一种多范式编程语言,融合了面向对象和函数式编程的特点,因其强大的表达能力...

    进程黑客(Process Hacker)Processhacker-3.0.4132

    Process Hacker是一款针对高级用户的安全分析工具,它可以帮助研究人员检测和解决软件或进程在特定操作系统环境下遇到的问题。除此之外,它还可以检测恶意进程,并告知我们这些恶意进程想要实现的功能。 Process ...

    The-Hacker-Playbook-3-Translation-master.zip

    渗透测试教程资料

    processhacker-2.39-bin.rar

    Process Hacker是一款强大的系统进程管理工具,并且还可以显示CPU、GPU、IO、内存等相关使用信息。 官网地址:https://processhacker.sourceforge.io/ git地址:https://github.com/processhacker/processhacker

    算法分析及数据结构-全

    《算法分析及数据结构-全》是一份专为初学者设计的全面教程,旨在帮助学习者深入了解算法和数据结构的基础知识。这份资源采用中文编写,更便于国内读者理解和掌握相关概念。 算法是计算机科学的灵魂,它是一系列...

    HackerRank-Interview-Preparation-Kit-master.rar

    1. **算法挑战**:HackerRank的算法挑战涵盖了数据结构、排序算法、搜索算法等多个领域,这些挑战有助于开发者提高解决实际问题的能力。通过实践这些题目,你可以深入理解各种算法的工作原理,并学会如何在实际项目...

    processhacker-2.23-setup

    Process Hacker是一款功能丰富的系统程序,比windows自带的任务管理器功能更强大。用户只要借助该程序就可以方便,快捷地查看相关进程的速度,内存,及模块等等,除此,还可以对相关的进程进行管理工作。

    hackerrank题目解答

    - 书籍《数据结构》和《Algorithms》提供了数据结构和算法学习的基础。 - 书籍作者的GitHub地址为了解决方案提供了开源代码资源。 ### 授权许可 - 本作品的许可协议是“Creative Commons署名-非商业性使用-相同方式...

    Hacker 2012.

    Hacker 2012 - Final Transfer Readme =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- Thank you for downloading Hacker 2012! Registration ------------------------------------ If you like the game, ...

Global site tag (gtag.js) - Google Analytics