`
ChristmasLin
  • 浏览: 41317 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

redis的vm 设想

 
阅读更多

在抠redis时,对于vm的设计有一个初步的想法,把冷数据重新malloc到一系列的内存块中,系统swap的交换以4k为单位,在redis里,一般4k能容纳多个key或value,如果冷热数据在同一4k的块里,阻碍冷数据swap out.redis期望通过一种vm的机制,把冷数据swap out到文件里,需要时再从文件swap in。但是该机制的效果不理想,带来复杂度的同时也使系统运行不稳定。该机制已经不推荐使用,并可能在2.6废弃。

对于把冷数据remalloc到连续的内存块,抽象出来需要一个支持以下功能的模块:

1.管理一系列的内存块,块和块之间不必连续。但对外是透明的。

2.模块提供malloc,free  memory的操作,对memory的利用是高效和最大化的。

 

其实,该模块就是一个内存池。初步想了下,可以通过改造下dlmalloc(doug lee 大神的作品)来实现该功能。的

1.trim_check 初始化为MAX,dlfree就不会把释放的内存释放回给系统,会被dlmalloc缓存。

2.修改下sys_alloc的实现,缓存的内存不够时,调用sys_alloc时,分配一个内存块,内存块多余的被缓存起来。

(这里也可以在初始化时修改为指向一个大的文件,通过mmap映射过来,然后再free,后继的分配都是在这个文件上分配了)

 

通过该功能,在读数据时就可以忽略数据是通过正常的malloc的还是被处理的。冷然数据的转换只是是简单的remalloc。

0
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics