美文网首页
Linux 内存管理(buddy 和 slab)

Linux 内存管理(buddy 和 slab)

作者: 丁鸿辉 | 来源:发表于2022-03-29 17:31 被阅读0次

内存 buddy 分配器

Linux 在拿到一大块内存后(譬如是64MB内存),先将其看作是好多个连续排列的 4MB 内存。
那么如果程序请求1MB的内存,那么内存分配操作逻辑如下:

  • 选中一个 4MB 内存,将其切分为2个2MB的内存
  • 2MB太大了,选取一个 2MB 内存切成2个1MB的内存
  • 分配1MB内存给程序

这个算法就是所谓的 binary buddy 分配算法。
在 Linux 中,这个二分法最小分割到 4096 字节,也就是一个页的大小。
因此总共有 11 种大小,分别为 4KB,8KB,……4MB。
其中 4KB 为 order 0,4MB 为 order 10.
我们称其 max order 为 12,有些资料会提到这个概念。

以上这些信息可以在 /proc/buddyinfo 上查看,其格式大概是这样:

初始内存,空闲 64MB 内存:分为 16 个4MB。
4K(0) 8K(1) 16K(2) 32K(3) 64K(4) ...                           2M(9)   4M(10)
0     0     0      0      0      0       0       0       0       0       16
分配 1MB 后,空闲 63MB 内存:分为 15个4MB、1个2MB 和 1个1MB。
0     0     0      0      0      0       0       0       1       1       15

实际示例
$ cat /proc/buddyinfo
Node 0, zone      DMA      0      1      0      0      2      1      1      0      1      1      3
Node 0, zone    DMA32      6      2      2      6      3      4      2      3      2      3    432
Node 0, zone   Normal  22980   9813  54346  45837  20375   8005   4476   2776   1399    237  20226
$

buddy 内存的碎片问题

buddy 在上面这种情况下,有些被分为小块内存,那么就会存在内存碎片的问题。
/proc/pagetypeinfo

以上 buddy 管理的是不小于4K 的内存分配,slab 则是管理小于4KB 的内存对象。

相关文章

  • Linux 内存管理(buddy 和 slab)

    内存 buddy 分配器 Linux 在拿到一大块内存后(譬如是64MB内存),先将其看作是好多个连续排列的 4M...

  • 用户态内存管理

    linux内核态的内存管理主要是基于伙伴系统和slab机制,而用户态内存管理主要是VMA虚拟地址空间。 在linu...

  • linux 内存分配机制的理解

    今天又看了一下linux 内核slab分配器的内容,脑中产生了一个疑问: linux系统内核使用了buddy算...

  • Memcached原理篇

    1.存储 memcached默认情况下采用了名为Slab Allocator的机制分配、管理内存,Slab All...

  • 2 字符驱动

    1驱动中分配内存kmalloc 分配连续的虚拟地址,用于小内存分配。在include/linux/slab.h 2...

  • [Memcached] MC不能写入超过1M项实践

    MC通过Slab Allocation分配内存使用,以Page分配Slab和Chunk,最大的Chunk size...

  • Redis

    MySQL的执行过程 Redis、Memcached、MySQL 内存管理机制Memcached默认使用Slab ...

  • Linux内存管理---伙伴堆算法(1)

    什么是伙伴堆算法 伙伴堆算法(也叫伙伴系统,buddy system)是Linux系统中的一种动态的内存管理算法 ...

  • Android 内存优化

    Android 内存管理机制 内存管理 进程(由Application FrameWork和Linux内核管理) ...

  • Slab

    https://www.ibm.com/developerworks/cn/linux/l-linux-slab-...

网友评论

      本文标题:Linux 内存管理(buddy 和 slab)

      本文链接:https://www.haomeiwen.com/subject/sgfbjrtx.html