很多基础的概念,将跨越软件的层次而存在。比如slab,对于内核人员,我们都知道slab是buddy之上的一层。

因为buddy作为Linux内核最底层的内存管理器,它分配1页,2页,4页,2^n页,但是作为内核的堆用户本身,经常只是调用kmalloc()申请一个小内存,或者调用kmem_cache_alloc()申请一个数据结构,2^n页给它,会形成大量碎片浪费。所以slab找buddy要了2^n页后,内部切割为同样size的object,再给kmalloc和kmem_cache_alloc()拿走。

它的逻辑如下:

这样一种软件本质意义上的需求,不会因为只是内核就需要。比如同样的slab算法,也被著名的用户态软件Memcached需要着。

Memcached是一种分布式内存对象缓存系统,用于动态Web等应用以减轻数据库的负载。它在内存中缓存数据和对象,使用key-value对形式存储。它的网站首页(https://memcached.org/)显示了它的基本用法逻辑:

Memcached的原理也类似内核态page cache的原理:

比如你查询一个数据库,可以先看看Memcached里面有没有命中,命中就直接从Memcached的内存里面拿到值了,没有的时候才需要去查数据库。查到后,可以把结果放入Memcached,这样下次再访问同样数据,不再需要进行数据库的查询动作。

Memcached也同样采用slab分配算法来组织数据的存放,里面可以组织不同大小的chunks:

正如Linux内核的每一种不同slab里面的object的大小不一样。

我们安装1个Memcached:

$ sudo apt-get install memcached

然后启动起来,你马上看到memcached打印说自己创建了各种不同chunk size的slab:

当然,还有更多的相似性,比如Memcached里面的对象,也是LRU算法替换。所以LRU这种,也是一种本质上的事情。

宋宝华:slab在内核内存管理和用户态Memcached的双重存在相关推荐

  1. linux 没有windows.h头文件_宋宝华: Linux内核编程广泛使用的前向声明(Forward Declaration)...

    本文系转载,著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 作者:宋宝华 来源: 微信公众号linux阅码场(id: linuxdev) 前向声明 编程定律 先强调一点:在一切可 ...

  2. 宋宝华:为什么numactl内存绑定对代码段不起作用

    本文目录 阅读本文大约需要10分钟 numactl内存绑定中代码段的问题 代码段为什么没有进入指定的numa节点 内核内存管理一个改进方向建议 numactl内存绑定中代码段的问题 在一个典型的NUM ...

  3. Linux glibc内存管理:用户态内存分配器——ptmalloc实现原理

    文章目录 ptmalloc 设计假设 Arena Chunk Bins 内存分配.释放流程 总结 C++ STL : SGI-STL空间配置器源码剖析 Linux 内存管理 | 物理内存管理:物理内存 ...

  4. Linux内核笔记--内存管理之用户态进程内存分配

    内核版本:linux-2.6.11 Linux在加载一个可执行程序的时候做了种种复杂的工作,内存分配是其中非常重要的一环,作为一个linux程序员必然会想要知道这个过程到底是怎么样的,内核源码会告诉你 ...

  5. 宋宝华:Linux内核中用GFP_ATOMIC申请内存究竟意味着什么?

    本文目的 本文补充校正一些Linux内核开发者关于GFP_ATOMIC的认知不完整的地方,阐述GFP_ATOMIC与free内存watermark的关系,并明确什么时候应该用GFP_ATOMIC申请内 ...

  6. 宋宝华:关于linux内存管理中DMA ZONE和dma_alloc_coherent若干误解的澄清

    本文已首先在Linuxer公众号(ID: LinuxDev)发表,先转回我的blog也发表.转载请注明出处. 1.DMA ZONE的大小是16MB? 这个答案在32位X86计算机的条件下是成立的,但是 ...

  7. 宋宝华:评Linux 5.13内核

    目录 Misc cgroup Landlock安全模块 系统调用的堆栈随机化 printk无锁ringbuffer的进一步优化 BPF可调用内核函数 公共的IO PAGE Fault支持 Linux ...

  8. 宋宝华_2010年11-12月Linux驱动和内核讲座PPT下载

        12月29日,宋宝华老师在线讲座(按键和LCD驱动) cloudquan 2010-12-20 2/146 heyan0208 3 天前 00:37     宋宝华_2010年12月11日_& ...

  9. 宋宝华:LEP(Linux易用剖析器) 是什么,为什么以及怎么办(2)

    LEP(LINUX EASY PROFILING) 是Linuxer之LEP项目组(Barry Song,Mac Xu,陈松等以及陈莉君教授/西邮Linux 3+1实验室)正在致力于打造的一个开源项目 ...

最新文章

  1. 【JVM】Java变量的种类(提高版)
  2. 学python需要安装什么软件-学武汉Python培训课程需要安装什么软件?分享这10款...
  3. Intel Optane(tm) Memory Pinning 无法加载DLL“iaStorAfsServiceApi.dll“:找不到指定模块。(异常来自HRESULT:0x8007007E)
  4. Angular Jasmine单元测试用例spec.ts的加载逻辑
  5. 使用xjc一秒钟生成您的JAXB类
  6. 【CodeForces - 260A】Adding Digits (思维构造)
  7. c#:winform中多线程的使用
  8. MARKDOWN使用小计
  9. data自定义属性获取方法和设置
  10. 微软官方推出的win10安装或者创建安装u盘的工具
  11. 如何在Mac视频中删除音频呢?
  12. 2月中国万网域名总量净增2.1万个 份额突破24%
  13. Lucene的几种分词系统
  14. 郭天祥的10天学会51单片机_第二节
  15. 路由器 telnet配置
  16. GMM-HMM语音识别
  17. Windows 7 新功能 - AppLocker
  18. UI设计行业领域知识体系
  19. 论文阅读KMN:Kernelized Memory Network for Video Object Segmentation
  20. 实现舞会上男女舞伴的自动匹配。

热门文章

  1. 数据备份、存储应该使用什么介质 光碟or硬盘or磁带
  2. 丁二烯橡胶的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  3. 2022年CVPR挑战赛
  4. Learning to Detect A Salient Object (学习探测显著性物体)
  5. xp计算机u盘重装系统,处理a豆电脑u盘重装系统xp步骤
  6. c++求范围内既是素数又是回文数的数的个数
  7. 如何使用计算机远程关闭手机软件,如何使用手机远程遥控电脑关机?手机遥控电脑关机方法图文介绍...
  8. Squid 设置网站访问白名单
  9. CoderForces999C-Alphabetic Removals
  10. notepad中html自动补齐和标签,在Notepad ++中显示不匹配的html标签(Show unmatched html tags in Notepad++)...