关于3.2.5版本分析,详见《GlusterFS之内存池(mem-pool)实现原理及代码详解》 此4.0.1版本内存池与版本3中的描述变化有点大,总的原理还是类似LINUX中的SLAB算法,定义一系列大小类型的池子, 1. 一共定义了15个池,每个池子大小都是依次幂级数增长的 结构体 mem_po ...
分类:
其他好文 时间:
2018-04-15 21:04:37
阅读次数:
271
1、数据结构 Memccached 只支持key-value类型 Reids 支持 String hash list set sortedSet,内部都是通过ReidsObject来表示 2、内存管理 Memcached 使用的是Slab allocation机制,将内存划分为不同大小的块,在操作时 ...
分类:
系统相关 时间:
2018-04-04 21:03:14
阅读次数:
192
select: poll: epoll: 1.实现了epoll自己的文件结构eventpoll和epitem,在初始化时(操作系统启动时)分配相应的缓存,使用slab分配内存。epoll_creat返回的为新的文件描述符(仅epoll可用),可以通过file->private_data得到。 2.高 ...
分类:
其他好文 时间:
2018-03-02 14:51:39
阅读次数:
126
Linux内核中基于伙伴算法实现的分区页框分配器适合大块内存的请求,它所分配的内存区是以页框为基本单位的。对于内核中小块连续内存的请求,比如说几个字节或者几百个字节,如果依然分配一个页框来来满足该请求,那么这很明显就是一种浪费,即产生内部碎片(internal fragmentation) 为了解决 ...
分类:
系统相关 时间:
2018-02-28 12:57:00
阅读次数:
244
内核中alloc_pages系列页框分配函数都是基于伙伴算法实现的,这些函数最终都会调用伙伴算法的入口函数buffered_rmqueue()。 Linux内核管理物理内存有三种方式,其一就是经典的伙伴算法。但是伙伴算法分配物理内存的基本单位是页框,因此内核又引入了slab机制,基于此机制实现的物理 ...
分类:
编程语言 时间:
2018-02-28 12:54:04
阅读次数:
263
kmalloc()和vmalloc()介绍kmalloc()用于申请较小的、连续的物理内存1. 以字节为单位进行分配,在<linux/slab.h>中2. void *kmalloc(size_t size, int flags) 分配的内存物理地址上连续,虚拟地址上自然连续3. gfp_mask标 ...
分类:
其他好文 时间:
2018-02-12 18:51:24
阅读次数:
169
在Linux内核中(linux-4.14.12/mm/slab.c#3389), 乍一看下边的代码,貌似L3389有bug,于是我就绕偶兴趣地阅读了一下local_irq_save/local_irq_restore的源代码。 在L3380和L3389中, 如果local_irq_save()是一个 ...
分类:
系统相关 时间:
2018-02-06 14:16:09
阅读次数:
278
Memcached介绍Memcached是国外社区网站LiveJournal团队开发,目的是为了通过缓存数据库查询结果,减少数据库访问次数,从而提高动态web站点性能。官方站点?http://www.memcached.org/数据结构简单(k-v),数据存放在内存里多线程基于c/s架构,协议简单基于libevent的事件处理自主内存存储处理(slab allowcation)数据过期方
分类:
系统相关 时间:
2018-02-01 00:25:53
阅读次数:
227
char_driver.c 1 #include <linux/module.h> 2 #include <linux/slab.h> //kmalloc 3 #include <linux/cdev.h> //cdev 4 #include <linux/fs.h> //register_chrd ...
分类:
系统相关 时间:
2017-11-22 22:05:18
阅读次数:
300
温馨提示:本文用到了一些可以在启动memcached设置的全局变量。关于这些全局变量的含义可以参考《memcached启动参数详解》。对于这些全局变量,处理方式就像《如何阅读memcached源代码》所说的那样直接取其默认值。 slab内存池分配器: slab简介: memcached使用了一个叫s ...
分类:
系统相关 时间:
2017-11-17 00:03:22
阅读次数:
267