• 2024-11-02伙伴系统和slab分配器
    伙伴系统(buddysystem)当一个请求需要分配m个物理页,buddysystem会寻找一个有\(2^n\)页的块(\(2^n-1<m<2^n\))分配给他。我们使用一个空闲链表数组实现buddysystem,其中a[i]代表块大小为\(2^i个页\)(每页为4kb)假设我们要分配15kb内存,根据buddysystem,我们需要寻找一个16
  • 2024-09-28slab分配器
    主要参考这本书:《UnderstandingtheLinuxvirtualmemorymanager》,链接:https://www.eecg.utoronto.ca/~yuan/teaching/archive/ece344_2017w/linux-vmm.pdf,书上的Chapter9就是讲slab分配器的。注意这本书是2004的,很多参数可能已经过时了,这个博客会结合我自己的电脑硬件配置来
  • 2024-07-06内存管理-15-slab、slob和slub分配器-初探
    一、slab简介1.简介首先,“slab”已成为一个通用名称,指的是使用对象缓存的内存分配策略,可实现内核对象的高效分配和释放。它最初由Sun工程师JeffBonwick记录下来,并在Solaris2.4内核中实现。Linux目前为其“slab”分配器提供了三种选择:Slab是最初的分配器,基于Bonwic
  • 2024-07-06内存管理-16-kmalloc机制实现-初探
    一、概述slab的接口比较麻烦,kmalloc接口使用简便,其底层是基于slab缓存机制实现的,主要也是从slab缓存中拿内存对象。//include/linux/slab.hstatic__always_inlinevoid*kmalloc(size_tsize,gfp_tflags)voidkfree(constvoid*x)GFP_USER:由user发起的内存申请,可以
  • 2024-06-08minos 1.1 内存虚拟化——hyp
    首发公号:Rand_csminos1.1内存虚拟化——hyp内存虚拟化,目前理解主要两方面:内存管理,没有虚拟化的情况时,对于Linux内核运行在物理硬件之上,内核需要管理物理内存,需要管理进程的虚拟内存。类似,type1类型的hypervisor/minos运行在物理硬件上,minos需要对物理内存管理,需要对
  • 2024-06-07linux内存管理(一)物理内存的组织和内存分配
    从这一篇开始记录以下我看有关内存管理的内核代码的笔记.内容很长,很多是我自己的理解,请谨慎观看.伙伴系统的工作的基础是物理页的组织,组织结构有小到大依次为page->zone->node。下面从源码里看看各个结构是如何组织的。typedefstructpglist_data{structzonenode_z
  • 2024-03-29内存碎片与缓解
    参考资料:https://blog.csdn.net/u014183456/article/details/122031750 内存碎片分为内部碎片和外部碎片外部碎片(ExternalFragmentation):外部碎片是指已分配的内存块之间出现的不连续、无法充分利用的空闲内存空间。外部碎片通常发生在动态内存分配中,当多次分配和释放内
  • 2024-03-21【Linux】内核学习笔记(一)——进程管理
    1.进程描述符1.1.进程描述符的表示和存放进程描述符task_struct完整地描述了进程的所有信息,它由slab分配器 (小内存分配)分配产生,并存放在叫任务队列(tasklist)的双向循环链表中。  一文看懂slab分配器实现https://zhuanlan.zhihu.com/p/523241576 伙伴系统和slab分配
  • 2024-02-16IfcBeamTypeEnum
    IfcBeamTypeEnum类型定义此枚举定义不同预定义类型的梁,这些梁可以进一步指定IfcBeam或IfcBeamType。  IFC2x2中的新枚举类型。IFC4添加了枚举器HOLLOWCORE和SPANDREL。  EnumerationdefinitionConstantDescriptionBEAMAstandardbeamusuallyusedhorizontal
  • 2023-12-22【转载】内存基本概念-slab算法
    Linux内存管理之slab2:slabAPIhttps://blog.csdn.net/lqy971966/article/details/1198019121.为什么有了Buddy(伙伴系统)还需要slab?1.1什么是伙伴系统?Linux内核中使用伙伴系统(buddysystem)算法以页为单位管理内存,进行内存分配。1.1.1伙伴系统思想它把所有的空闲页放到1
  • 2023-12-18linux Slab高处理
    SLAB是Linux操作系统的一种内存分配机制。其工作是针对一些经常分配并释放的对象,您可以看看哪些应用进程的slab占用的内存比较多,是否这些应用需要频繁的请求和释放内存,比如进行一些小文件的读写。如果都是应用的正常使用,可以考虑升级服务器内存,如果内存不足影响业务,需要临时释放一
  • 2023-12-17Slab openings
    Slabopenings本示例说明了基于材质图层集使用定义的具有拉伸实体几何图形的标准案例板。它包括一个圆形开口和一个矩形凹槽。图465显示了生成的形状。 注:开口和凹陷是IfcOpeningStandardcase的实例。  图——带开口和凹槽的标准箱板。 注:文件中没有颜色信息,显示的颜
  • 2023-12-12SLUB简短用户指南 (翻译 by chatgpt)
    原文:https://www.kernel.org/doc/html/v6.6/mm/slub.htmlSLUB简短用户指南SLUB的基本理念与SLAB非常不同。SLAB需要重新构建内核以激活所有slab缓存的调试选项。SLUB始终包含完整的调试功能,但默认情况下处于关闭状态。SLUB可以仅针对选定的slab启用调试,以避免对整个系统性能产生
  • 2023-10-08slab分配器
    前言slab分配器从伙伴系统获取页帧进行管理,对外为一些固定size的小内存块和特定内核数据结构提供缓存和内存分配服务。slab分配器为的是满足内核中小内存块的分配需求,毕竟伙伴系统的内存分配以page为单位实在太大了。使用slab带来以下几个好处:减少了伙伴系统的访问次数,小内存
  • 2023-10-08页帧的数据结构设计
    前言页帧page是物理内存管理的基本单位,structpage记录了任意时刻page的所有状态,因此每一个物理页帧都需一个对应的structpage结构体记录状态,对于内存多计算机系统来说需要的structpage本身就需要大量内存进行存储,因此该结构体中每增加一个变量带来的代价会很大,需要仔细控制该
  • 2023-10-07简述memcached的工作原理
     Memcached只支持能序列化的数据类型,不支持持久化,基于Key-Value的内存缓存系统1.内存分配机制 应用程序运行需要使用内存存储数据,但对于一个缓存系统来说,申请内存、释放内存将十分频繁,非常容易导致大量内存碎片,最后导致无连续可用内存可用。 Memcached采用了Slab
  • 2023-09-14Memcached深入学习总结
    在上一家公司时,产品主要使用memcached做缓存。虽然目前这家公司memcached使用的比较少(刚进公司做云存储相关服务时小规模使用了一下,后来做另一个系统时换redis做了缓存),但前几天整理资料时看到了原先写的memcached相关笔记,在此整理一下发上来。----------------------------------
  • 2023-08-13内存管理
    内核把物理页作为内存管理的基本单位,内核用一个page结构体表示内核中的每个物理页。Linux把系统的页划分为区,形成不同的内存池,根据用途分配。区只是内核为了管理页而采用的一种逻辑上的分组。一些分配释放相关函数alloc_pages,该函数分配连续的物理页,返回一个指针指向第一个
  • 2023-07-20slabtop
    slabtop实时显示内核slab内存缓存信息补充说明slabtop命令以实时的方式显示内核“slab”缓冲区的细节信息。语法slabtop(选项)选项--delay=n,-dn:每n秒更新一次显示的信息,默认是每3秒;--sort=S,-sS:指定排序标准进行排序(排序标准,参照下面或者man手册);--once,-o:显示一
  • 2023-06-24memcached使用中踩的一些坑
    背景线上启用memcached(以下简称mc)作为热点缓存组件已经多年,其稳定性和性能都经历住了考验,这里记录一下踩过的几个坑。大key存储某年某月某日,观察mysql的读库CPU占比有些异常偏高,去check慢查询log,发现部分应有缓存的慢sql居然存在几秒执行一次情况,不符合缓存数小时的代码逻辑
  • 2023-06-21深度解读 Linux 内核级通用内存池 —— kmalloc 体系
    本文是笔者slab系列的最后一篇文章,为了方便大家快速检索,先将相关的文章列举出来:《细节拉满,80张图带你一步一步推演slab内存池的设计与实现》《从内核源码看slab内存池的创建初始化流程》《深入理解slabcache内存分配全链路实现》《深度解析slab内存池回
  • 2023-06-08深入理解Linux虚拟内存管理(二)
    文章目录系列文章目录第8章slab分配器8.1高速缓存8.1.1高速缓存描述符8.1.2高速缓存静态标志位8.1.3高速缓存动态标志位8.1.4高速缓存分配标志位8.1.5高速缓存着色8.1.6创建高速缓存8.1.7回收高速缓存8.1.8收缩高速缓存8.1.9销毁高速缓存8.2slabs8.2.1存储slab描述
  • 2023-06-02slab分配器正式被弃用,slub成为分配器唯一选择
    在使用slab分配器进行内存分配时,可能会出现以下缺点:内存碎片化。由于slab分配器需要将内存分成大小相同的块,如果分配不均衡或者对象大小不同,就容易导致内存碎片化。性能下降。Slab分配器将内存分成不同的缓存区,每个缓存区都有自己的对象池。因此,当需要分配内存时,需要先找到合适
  • 2023-05-26深度解析 slab 内存池回收内存以及销毁全流程
    在上篇文章《深入理解slabcache内存分配全链路实现》中,笔者详细地为大家介绍了slabcache进行内存分配的整个链路实现,本文我们就来到了slabcache最后的一部分内容了,当申请的内存使用完毕之后,下面就该释放内存了。在接下来的内容中,笔者为大家介绍一下内核是如何将内存
  • 2023-04-2812 Linux的伙伴系统和SLAB分配器
    伙伴系统: buddy物理内存页面管理算法,最先源自Sun公司的Solaris操作系统;Linux后来也引入了伙伴系统;表示一个物理内存页面:Linux定义了一个page结构体,大量使用了c的union联合体定义结构字段,其大小取决于结构体里面占用内存最大的变量决定;好处是信息量很多,占用内存很少;一个page