存档

‘文件系统’ 分类的存档
页: 1 2 后页

文件系统常见问题的培训

2009年6月18日

mmap slab 算法

2009年3月26日
MMAP大文件的内存管理算法 

作者: 庞帆 shineyear@msn.com shinepf@gmail.com
版权:新浪网技术中国有限公司
一.为什么我们要重新早轮子?
1.现有的用户层的内存管理方式全部都是以MALLOC, FREE为主导的单进程方式, 无法满足多进程共享的需求
2.对于MMAP共享内存, 由于其与磁盘文件的关系, 始终缺少一种算方法可以在很好的分配回收内存的同时,尽量的减少磁盘IO的开销
3.使用多次MMAP大文件方式进行缓存(可以规避LRU算法的开销, 将冷热数据交换完全交给操作系统本身),对于CACHE系统来说是至关重要的, 所以需要一套优秀的算法
4.多次MMAP大文件, 在优化了VM系统性能的同时, 会要求将一个大文件分段管理, 这也是一个新的挑战
5.对于大并发读写,持久数据保存这样的需求(如数据库, 搜索引擎索引等), 传统的内存管理或者文件管理的方式没有MMAP来的高效, 对比SQUID和NCACHE及VARNISH的数据就可以知道了
二.对于定长数据的分配:
1.定长 nk 的范围可以自由指定, 默认为 1k 2k 4k 8k
2.可以通过运行期间的数据进行再次的调整, 以尽量完美的满足数据长度
三.变长数据的分配:
1.变长数据的分配使用一个固定大小的边界对齐 默认为 16k
2.分配的数据全部都是连续的块, 提升读取性能
3.分配后, 第一个16k的块中头部4字节存储一个分配的总块数
4.回收的时候根据头部的总块数决定应该挂在到哪个挂载点
5.回收后头部4字节存储的是刚刚被替换掉的挂载点数值, 以形成单向链表
6.分配的时候先查看挂载点的数值是否为0, 如果为0就分配新的块, 如果不为零,那么就复用,并将头部4字节指向的那个块作为新的挂载点值

pangfan 存储, 开源, 文件系统, 算法, 系统

页: 1 2 后页
页: 1 2 后页