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

    文章

    1263

    浏览量

    69454
  • Linux
    +关注

    关注

    87

    文章

    11302

    浏览量

    209422
  • 数据库
    +关注

    关注

    7

    文章

    3799

    浏览量

    64375
  • 管理器
    +关注

    关注

    0

    文章

    246

    浏览量

    18505

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

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

收藏 人收藏

    评论

    相关推荐

    Redis缓存与Memcached的比较

    Redis和Memcached都是广泛使用的内存数据存储系统,它们主要用于提高应用程序的性能,通过减少对数据库的直接访问来加速数据检索。以下是对Redis和Memcached的比较,涵盖了它们的一些
    的头像 发表于 12-18 09:33 125次阅读

    Linux下如何管理虚拟内存 使用虚拟内存时的常见问题

    在Linux系统中,虚拟内存管理是操作系统内核的一个重要功能,负责管理物理内存和磁盘上的交换空间。以下是对Linux下如何
    的头像 发表于 12-04 09:19 375次阅读

    嵌入式工程师都在找的【Linux内核调试威廉希尔官方网站 】建议收藏!

    printk()调用,可以直接将关心的信息打印到屏幕上,从而观察程序的执行路径和变量的变化情况。 printk()类似于用户空间的printf(),但它在内核空间使用,并受到内核日志系统的
    发表于 11-28 15:37

    内存管理的硬件结构

    常见的内存分配函数有malloc,mmap等,但大家有没有想过,这些函数在内核中是怎么实现的?换句话说,Linux内核内存管理是怎么实现的
    的头像 发表于 09-04 14:28 304次阅读
    <b class='flag-5'>内存</b><b class='flag-5'>管理</b>的硬件结构

    Memcached介绍和详解

    Memcached易于理解和维护,同时也保证了其高性能。 2. 高性能:Memcached采用基于Slab Allocator的内存管理机制
    发表于 07-17 15:58

    ESP-IDF内核中的内存管理如何验证?

    请教一下,ESP-IDF 内核中的内存管理如何验证
    发表于 06-19 06:30

    C语言内存泄漏问题原理

    内存泄漏问题只有在使用堆内存的时候才会出现,栈内存存在内存泄漏问题,因为栈内存会自动分配和释放。C语言代码中堆
    发表于 03-19 11:38 521次阅读
    C语言<b class='flag-5'>内存</b>泄漏问题原理

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

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

    数组和链表在内存中的区别 数组和链表的优缺点

    数组和链表在内存中的区别 数组和链表的优缺点  数组和链表是常见的数据结构,用于组织和存储数据。它们在内存中的存储方式以及优缺点方面存在一些显著的差异。本文将详细探讨这些差异以及它们的优缺点。 1.
    的头像 发表于 02-21 11:30 1032次阅读

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

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

    linux内核主要由哪几个部分组成,作用是什么

    Linux内核主要由以下几个部分组成: 进程管理:Linux内核负责管理和调度系统中的进程。它通过进程调度算法来决定哪个进程在什么时间运行以及如何分配系统资源。
    的头像 发表于 01-22 14:34 2683次阅读

    I.MX6ULL-ElfBoard ELF1板卡- 使用C库函数控制开发板的LED

    功能 例如sbrk系统调用分配一块空间给进程,而malloc则在用户层次对这以空间进行管理。 系统调用运行在内核空间,而库函数运行在用户空间 因为系统调用属于
    发表于 01-19 10:12

    嵌入式学习-ElfBoard ELF 1板卡-使用C库函数控制ELF1开发板的LED

    功能 例如sbrk系统调用分配一块空间给进程,而malloc则在用户层次对这以空间进行管理。 系统调用运行在内核空间,而库函数运行在用户空间 因为系统调用属于
    发表于 01-19 10:07

    Linux内核内存管理架构解析

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