自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(8)
  • 收藏
  • 关注

原创 slab函数分析之cache_grow

当向Slab缓存中提出对象申请的请求时,首先是找到相应的kmem_cache,然后从相应的array cache中分配slab对象。当array cache中没有对象可以分配的时候,会批量向slab缓存中提出对象申请来填满array cache,然后再从array cache中取出一个对象分配出去。如果从slab缓存中分配对象的时候,发现kmem_list3中半满和空闲链表中都没有节点可以供分配:

2008-12-31 23:41:00 1889 1

原创 Slab对象的分配和回收kmem_bufctl_t的用法

在这里我介绍一下Slab对象的分配和回收kmem_bufctl_t的用法,首先要说明的一点是Slab缓存的内存布局,Slab缓存分为两部分,一部分是用于管理Slab对象,另一部分是Slab对象本身,针对这两部分内容,Slab缓存的内存布局大概有两种:1. Slab对象同管理Slab对象的缓存一起存放。2. 分开存放。对于管理区分成2部分,一部分是描述Slab的数据结构,struct slab。

2008-12-29 23:36:00 2646

原创 Slab函数分析之kmem_cache_create函数

该函数用于创建Slab缓存。参数介绍:name: 缓存名字size: 对象的大小align:对齐flag:Slab标志位ctor:对象构造函数dtor:对象析构函数struct kmem_cache *kmem_cache_create (const char *name, size_t size, size_t align, unsigned long flags, void (*ctor)

2008-12-28 14:13:00 13341

原创 Slab代码分析之calculate_slab_order

计算Slab的Order,即该Slab是由几个页面构成static inline size_t calculate_slab_order(struct kmem_cache *cachep,   size_t size, size_t align, unsigned long flags){ size_t left_over = 0; int gfporder;  首先从order为0开始尝试

2008-12-28 13:02:00 2385 1

原创 Slab对象数量计算函数

内核提供了计算一个Slab缓存的大小的函数,Slab缓存的内存布局分成以下两种:1. Slab缓存管理区在Slab内,即同对象存放在一起。2. Slab缓存管理区存放在单独的一片区域,即同对象分别存放。通过宏CFLGS_OFF_SLAB来区分。参数介绍:gfporder: Slab缓存大小为2^gfporder个页面buffer_size: 每个对象的大小align:对齐flags:CFLGS

2008-12-25 21:15:00 1385

原创 Linux kmalloc/kfree 源码解读

kmalloc/kfree用于划分和回收内核空间低区内存的方法。改组方法没有直接通过伙伴系统进行内存的划分,通过slab算法进行分配的。同时也为每个CPU提供一个阵列缓存,用于提高分配效率。下面对改组函数进行源码级的分析。内存分配static inline void *kmalloc(size_t size, gfp_t flags)1.         从Slab通用缓存中查找可用的

2008-12-16 20:21:00 9878

原创 Linux Buddy系统算法源码解析

在Linux引导起来之后,伙伴系统分配算法是和物理内存最底层的接口。所有内存分配函数,比如vmalloc/kmalloc最后都是通过伙伴算法对内存进行分配的。接下来我们将解读一下伙伴系统的分配和回收算法。伙伴系统模块提供了两个主要的接口给上层程序,他们是:1.         页面请求函数struct page * fastcall __alloc_pages(gfp_t gfp_ma

2008-12-14 22:12:00 6332

原创 Linux vmalloc/vfree函数实现解读

高端物理地址的分配采用vmalloc/vfree这组函数进行,什么是高端物理内存呢?我们知道Linux给内核预留了一部分虚拟地址空间,这部分虚拟地址如果能全部直接映射到物理地址空间就不存在高端内存。如果这部分内存有一部分不能直接映射到地址空间,那么这部分虚拟地址空间称为高端内存。因此,高端内存是虚拟地址空间中的概念。举个例子:如果你的物理内存为512M,那么就不存在高端内存的分配,如果你的物理地址

2008-12-14 11:38:00 1949

Kafak技术原理介绍

Kafak技术原理介绍

2024-02-24

INNODB关键技术原理以及MYSQL常用规范

技术分享

2022-10-20

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除