0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

探究slab在内核内存管理和用户态Memcached的双重存在

B4Pb_gh_6fde77c 来源:Linux阅码场 作者: 宋宝华 2021-08-13 14:55 次阅读

很多基础的概念,将跨越软件的层次而存在。比如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()拿走。

697d87de-fbba-11eb-9bcf-12bb97331649.png

它的逻辑如下:

6991d324-fbba-11eb-9bcf-12bb97331649.png

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

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

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

69a6c658-fbba-11eb-9bcf-12bb97331649.jpg

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

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

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

我们安装1个Memcached:

$ sudo apt-get install memcached

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

69d4799a-fbba-11eb-9bcf-12bb97331649.png

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

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Web
    Web
    +关注

    关注

    2

    文章

    1231

    浏览量

    68381
  • Linux
    +关注

    关注

    87

    文章

    10943

    浏览量

    206546
  • 数据库
    +关注

    关注

    7

    文章

    3561

    浏览量

    63292
  • 管理器
    +关注

    关注

    0

    文章

    225

    浏览量

    18297

原文标题:宋宝华:slab在内核内存管理和用户态Memcached的双重存在

文章出处:【微信号:gh_6fde77c41971,微信公众号:FPGA干货】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Linux内核内存管理内核非连续物理内存分配

    的主要优点是避免了外部碎片,而缺点是需要修改内核页表。显然,非连续内存区域的大小必须是4096的倍数。Linux使用非连续物理内存区的场景有几种:(1)为swap区分配数据结构;(2)为模块分配空间
    的头像 发表于 02-23 09:44 342次阅读
    Linux<b class='flag-5'>内核</b><b class='flag-5'>内存</b><b class='flag-5'>管理</b>之<b class='flag-5'>内核</b>非连续物理<b class='flag-5'>内存</b>分配

    Linux内核内存管理slab分配器

    本文在行文的过程中,会多次提到cache或缓存的概念。如果没有特殊在前面添加硬件的限定词,就说明cache指的是slab分配器使用的软件缓存的意思。如果添加了硬件限定词,则指的是处理器的硬件缓存,比如L1-DCache、L1-ICache之类的。
    的头像 发表于 02-22 09:25 274次阅读
    Linux<b class='flag-5'>内核</b><b class='flag-5'>内存</b><b class='flag-5'>管理</b>之<b class='flag-5'>slab</b>分配器

    Linux内核内存管理之ZONE内存分配器

    内核中使用ZONE分配器满足内存分配请求。该分配器必须具有足够的空闲页帧,以便满足各种内存大小请求。
    的头像 发表于 02-21 09:29 352次阅读

    Linux内核内存管理架构解析

    内存管理子系统可能是linux内核中最为复杂的一个子系统,其支持的功能需求众多,如页面映射、页面分配、页面回收、页面交换、冷热页面、紧急页面、页面碎片管理、页面缓存、页面统计等,而且对
    的头像 发表于 01-04 09:24 286次阅读
    Linux<b class='flag-5'>内核</b><b class='flag-5'>内存</b><b class='flag-5'>管理</b>架构解析

    内核中的电源管理

    之前介绍的电源管理机制基本都是在Linux中实现的,可以看到很复杂,各种框架,明明一个操作非要转来转去,而且在内核里面实现,跟内核的各种框架又纠缠不清,什么consumer、Framework、provider框架乱乱的。
    的头像 发表于 11-29 09:33 360次阅读
    微<b class='flag-5'>内核</b>中的电源<b class='flag-5'>管理</b>

    Linux内核slab性能优化的核心思想

    今天分享一篇内存性能优化的文章,文章用了大量精美的图深入浅出地分析了Linux内核slab性能优化的核心思想,slab是Linux内核小对象
    的头像 发表于 11-13 11:45 293次阅读
    Linux<b class='flag-5'>内核</b><b class='flag-5'>slab</b>性能优化的核心思想

    Linux 内存管理总结

    一、Linux内存管理概述 Linux内存管理是指对系统内存的分配、释放、映射、管理、交换、压缩
    的头像 发表于 11-10 14:58 223次阅读
    Linux <b class='flag-5'>内存</b><b class='flag-5'>管理</b>总结

    内存内核中发生页面迁移的典型场景

    页面迁移(page migrate)最早是为 NUMA 系统提供一种将进程页面迁移到指定内存节点的能力用来提升访问性能。后来在内核中广泛被使用,如内存规整、CMA、内存hotplug等
    的头像 发表于 11-08 12:28 278次阅读
    <b class='flag-5'>内存</b><b class='flag-5'>内核</b>中发生页面迁移的典型场景

    简述Linux内核slab性能优化的核心思想

    Linux 内核slab 来自一种很简单的思想,即事先准备好一些会频繁分配、释放的数据结构。然而标准的 slab 实现太复杂且维护开销巨大,因此便分化出了更加小巧的 slub,因此本文讨论的就是 slub,后面所有提到
    发表于 11-07 09:56 175次阅读
    简述Linux<b class='flag-5'>内核</b><b class='flag-5'>slab</b>性能优化的核心思想

    如何在Rust中使用Memcached

    Memcached是一种高性能、分布式的内存对象缓存系统,可用于加速动态Web应用程序。Rust是一种系统级编程语言,具有内存安全、高性能和并发性等特点。Rust语言的Memcached
    的头像 发表于 09-19 16:30 856次阅读

    Linux内核内存管理详解

    内存管理的主要工作就是对物理内存进行组织,然后对物理内存的分配和回收。但是Linux引入了虚拟地址的概念。
    发表于 08-31 14:46 394次阅读
    Linux<b class='flag-5'>内核</b>的<b class='flag-5'>内存</b><b class='flag-5'>管理</b>详解

    RT-Thread内存管理算法源码阅读

    RT-Thread对于内存管理主要有三种方式:小内存管理算法、slab管理算法和memheap
    的头像 发表于 08-10 16:03 866次阅读
    RT-Thread<b class='flag-5'>内存</b><b class='flag-5'>管理</b>算法源码阅读

    Linux内核实现内存管理的基本概念

    本文概述Linux内核实现内存管理的基本概念,在了解基本概念后,逐步展开介绍实现内存管理的相关技术,后面会分多篇进行介绍。
    发表于 06-23 11:56 485次阅读
    Linux<b class='flag-5'>内核</b>实现<b class='flag-5'>内存</b><b class='flag-5'>管理</b>的基本概念

    关于RTT支持的内存分配算法

    1.静态内存管理。 2.针对小内存块的分配管理(小内存管理算法) 3.针对大
    发表于 04-27 14:42

    关于RTT支持的内存分配算法

    1.静态内存管理。 2.针对小内存块的分配管理(小内存管理算法) 3.针对大
    发表于 04-27 14:40