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

    文章

    1302

    浏览量

    73657
  • Linux
    +关注

    关注

    88

    文章

    11628

    浏览量

    217972
  • 数据库
    +关注

    关注

    7

    文章

    3993

    浏览量

    67736
  • 管理器
    +关注

    关注

    0

    文章

    264

    浏览量

    19443

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Linux内核模块的加载机制

    \"GPL\") bool sig_ok;// 签名验证结果 };然后进行内存分配 1、使用vmalloc()在内核空间分配内存,映射模块的代码和数据段。 2、标记可执行页(需
    发表于 11-25 06:59

    飞凌嵌入式ElfBoard-文件I/O的了解探究之Linux系统的文件管理机制

    函数去打开文件的时候,内核会申请一段内存(一段缓冲区),并且将静态文件的数据内容从磁盘这些存储设备中读取到内存中进行管理、缓存(也把内存中的
    发表于 11-18 08:50

    探索操作系统底层的关键接口

      在linux中,将程序的运行空间分为内核空间与用户空间(内核用户),在逻辑上它们之间是
    的头像 发表于 11-08 12:42 581次阅读

    RusT-Thread:基于Rust面向资源受限嵌入式设备的操作系统的实践 | 技术集结

    摘要随着物联网和嵌入式系统的发展,实时操作系统(RTOS)的安全性和性能需求日益提高。传统基于C语言的RTOS在内存安全和并发控制方面存在局限,容易导致缓冲区溢出、数据竞争等问题。本项目以
    的头像 发表于 11-07 17:37 6464次阅读
    RusT-Thread:基于Rust面向资源受限嵌入式设备的操作系统的实践 | 技术集结

    使用qemu-vexpress-a9 运行用户程序跑不了怎么解决?

    qemu-vexpress-a9 的 sd.bin 镜像文件中。 然后成功编译rt-threadbspqemu-vexpress-a9的内核.elf文件 使用./qemu-nographic.sh 模拟用户
    发表于 10-09 07:41

    求助,关于rt-smart用户线程实时性差的问题求解

    finishn\"); return 0; } 即使用忙等待的方式测量50us定时性能,发现在内核时代码平均周期为50us,最小周期为50us,最大周期为57us,性能十分优异,而在用户
    发表于 09-26 08:25

    qkey软件包在内核V5.02下运行出错是哪里的问题?

    qkey软件包,在内核V5.0.2编译无问题,运行报错: (rt_object_get_type(&m->parent
    发表于 09-15 07:46

    灵活高效ZBUFF — C内存数据操作库:优化内存管理的利器

    在C语言开发中,高效的内存管理是提升程序性能的关键。ZBUFF作为一款灵活高效的内存数据操作库,通过优化内存分配与释放机制,为开发者提供了更简洁、更安全的API接口,极大地简化了复杂数
    的头像 发表于 08-14 18:01 519次阅读
    灵活高效ZBUFF — C<b class='flag-5'>内存</b>数据操作库:优化<b class='flag-5'>内存</b><b class='flag-5'>管理</b>的利器

    双重驱动的新型直线电机研究

    摘罢:大行程、高精度,同时易于小型化的移动机构是先进制造业等领域要解决的关键问题之一,综述了现有宏/微双重驱动机构和直线超声电机的研究进展和存在问题,提出了一种宏微双重驱动新型直线压电电机,使其既能
    发表于 06-24 14:17

    harmony OS NEXT-通过用户首选项实现数据持久化

    存储的地方,可以采用用户首选项来进行存储。Preferences会将该数据缓存在内存中,当用户读取的时候,能够快速从内存中获取数据,当需要持久化时可以使用flush接口将
    的头像 发表于 04-29 16:38 948次阅读

    嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-内核空间与用户空间的数据拷贝之数据拷贝介绍

    本帖最后由 jf_13411809 于 2025-3-20 14:10 编辑 在Linux系统中,内核空间和用户空间是两个独立的地址空间,它们有不同的访问权限和内存保护机制。在内核
    发表于 03-20 11:50

    飞凌嵌入式ElfBoard ELF 1板卡-内核空间与用户空间的数据拷贝之数据拷贝介绍

    在Linux系统中,内核空间和用户空间是两个独立的地址空间,它们有不同的访问权限和内存保护机制。在内核空间和用户空间之间进行数据传输时,需要
    发表于 03-19 08:55

    嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-Linux内核移植之内核启动流程

    关于内核启动流程涉及内容较多而且复杂,过度的分析意义不大,因此,这里不做详细讲解,只做一个大概的介绍。初学者只做了解,有一定基础的可以深入理解。内核镜像被uboot加载到内存空间之后,获得控制权
    发表于 01-07 09:20

    飞凌嵌入式ElfBoard ELF 1板卡-Linux内核移植之内核启动流程

    关于内核启动流程涉及内容较多而且复杂,过度的分析意义不大,因此,这里不做详细讲解,只做一个大概的介绍。初学者只做了解,有一定基础的可以深入理解。 内核镜像被uboot加载到内存空间之后,获得控制权
    发表于 01-06 09:51

    Redis缓存与Memcached的比较

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