本文简介

本文主要介绍了Linux SLUB分配的产生原因、设计思路及其代码分析。适合于对Linux内核,特别是对Linux内存分配器感兴趣的读者。

1.为何需要SLUB?

Linux SLUB内存分配器合入Linux主分支已经整整10年了!并且是Linux目前默认的内存分配器。

然而,主流的Linux内核出版物仍然在分析SLAB而不是SLUB分配器。这似乎有点令人惊奇。

对于Linux来说,重要模块合入内核时,都会在补丁或者lwn文档里面详细记录其合入理由。SLUB分配器也不例外。我们看看作者在提交补丁是怎么说的。

1.1.准备工作

A、请使用git clone命令下载一份Linux Next分支的代码。

B、在源码目录下,用git log v2.6.22..v2.6.23 mm/slub.c,查看其最初合入记录。

C、找到最初合入补丁的commit id,即81819f0fc828。

D、使用git show 81819f0fc828查看补丁的详细信息。

在查看补丁之前,有两点需要特别注意:

1、在Linux社区,一般用SLUB、SLAB表示内存分配器算法及其实现。不管是SLUB还是SLAB,这两种算法都会使用slab来组织内存对象。我们可以简单的认为:一个slab由一个或者几个页框组成,每个页框一般包含4096个字节。在每一个slab里面,包含一个或者多个待分配的对象。

2、补丁描述一般比较精练,其阅读对象是内核社区老手。如果看起来费力,也没有关系。可以通读本文后,回头再来领会作者的意思。

1.2.作者怎么说?

我们看看作者Christoph Lame

Linux 踩内存 slub,Linux SLUB 内存分配器分析相关推荐

  1. Linux内存管理:slub分配器

    概述: 我们知道内核中的物理内存由伙伴系统(buddy system)进行管理,它的分配粒度是以物理页帧(page)为单位的,但内核中有大量的数据结构只需要若干bytes的空间,倘若仍按页来分配,势必 ...

  2. 【Linux 内核 内存管理】分区伙伴分配器 ② ( free_area 空闲区域结构体源码 | 分配标志位 | GFP_ZONE_TABLE 标志位区域类型映射表 |分配标志位对应的内存区域类型 )

    文章目录 一.free_area 空闲区域结构体源码分析 二.分配标志位 三.GFP_ZONE_TABLE 标志位区域类型映射表 四.分配标志位对应的内存区域类型 一.free_area 空闲区域结构 ...

  3. linux踩内存怎么定位,问题定位:内存泄漏,踩内存。

    1.内存泄漏 确定现象: linux 内存泄漏,可以查看slabinfo 和另外一个proc下(貌似meminfo),关于内存的信息,可以看到内存是否在不断减少,以及减少的速度. vxworks系统, ...

  4. linux踩内存内存越界,Linux如何调试内存泄漏?超牛干货奉献给你(代码全)

    内存泄漏是指由于疏忽或错误造成程序未能释放已经不再使用的内存.内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,导致在释放该段内存之前就失去了对该段内存的控制,从而造成了内存 ...

  5. linux内核编程13期:内存管理

    内管管理子系统是Linux内核中比较复杂的一个模块,也是很多Linux开发者的"梦魇",无论是Linux新手.运维.应用开发者,还是有多年经验的驱动工程师,在学习内存管理时,面对错 ...

  6. 一步一步学linux操作系统: 21 内存管理_小内存分配与页面换出

    slub 分配器工作原理 相关函数与结构体 进程创建的do_fork中会调用copy_process函数,这个函数会调用 dup_task_struct 函数 \linux-4.13.16\kerne ...

  7. Linux性能优化之CPU、内存、IO优化

    Linux 的性能进行监测,以下是 VPSee 常用的工具: 工具    简单介绍 top    查看进程活动状态以及一些系统状况 vmstat    查看系统状态.硬件和系统信息等 iostat   ...

  8. Linux内存管理Linux Memory Management Notes

    Linux 内存基础 地址类型 linux内核中有许多种不同的地址类型 用户虚拟地址 用户空间看到的常规地址,通过页表可以将虚拟地址和物理地址映射起来 物理地址 用在cpu和内存之间的地址叫做物理地址 ...

  9. linux 统计_聊聊 Linux 的内存统计

    写在前面 本文主要分析 Linux 系统内存统计的一些指标以及进程角度内存使用监控的一些方法. 开始阅读这篇文章前,请先简单阅读下面的几篇文章. <进程眼中的线性地址空间> <线程眼 ...

最新文章

  1. Mac下pycharm如何安装tensorflow
  2. 整数实现求整数和算法
  3. java git_用 JGit 通过 Java 来操作 Git
  4. 如何用视频云技术,搞一个爆红的 “反应视频” 项目?
  5. Tomcat 输入http://localhost:8080打不开网页的解决方法
  6. JavaOne 2014 –有关提交的一些初步分析
  7. 我的Linux内核学习笔记
  8. 无线网络技术基础 01
  9. python traceback_Python 列表操作,节后大放送
  10. Redis之Ubuntu开机启动
  11. OpenJDK9 Hotspot :Zero 解释器 - BytecodeInterpreter
  12. 高手教您编写简单的JSON解析器
  13. Mybatis中的@SelectKey注解
  14. 瑞芯微开发工具怎么刷机
  15. ThoughtWorks 2018技术雷达峰会(6月2日@深圳)
  16. 基于Web的svg编辑器(1)——撤销重做功能
  17. a3图纸标题栏尺寸标准_标准CAD制图上A3图幅上的标题栏尺寸是多少
  18. html5简单网页设计作品,30个以简约为主的网页设计作品
  19. odoo学习笔记(一)
  20. js 编码解码 escape,encodeURI,encodeURIComponent

热门文章

  1. linux根据文件名查找文件路径
  2. 静态代理,JDK动态代理,Cglib动态代理详解
  3. 组播IP与组播Mac的对应关系
  4. 浏览器手动设置Cookie
  5. Apple Logic Pro X 10.7 For MacOS 苹果音乐制作宿主软件
  6. Celestial Altium Library
  7. 程序物语(七):项目经理预成长
  8. android动态修改refresh rate,Lenovo k860i 移植Android 4.4 cm11进度记录【下篇--实时更新中】...
  9. php移除excel密码,excel2007密码怎么取消
  10. 【通信协议】一文搞懂SPI