多级hash在内核中应用: 变种radix tree在page cache中的应用
2013-05-02 22:40
274 查看
参考:
radix tree in kernel : Trees I: Radix trees
http://lwn.net/Articles/175432/
普通的radix tree(注意,这不是内核中用的radix tree哦)
http://en.wikipedia.org/wiki/Radix_tree
这里讨论的是变种的radix tree,请知悉.
radix tree的核心思想是什么?
内核中用到的radix tree并非严格的radix tree, 而是变种的radix tree.
本质上多级hash. linux内核中使用radix tree来组织page cache, 以便快速的查找一个地址是否在page cache中.
hash的冲突处理策略是拉链.
hash的key是整型值(地址), value是个指针, 算是个多级hash_map.
多级hash的实现方式是, 整型值的前几位(1~6bit)用来做一级hash, 中间几位(7~12)用来做二级hash, 接下来的几位(13~18)来做三级hash
因为是hash,所以,其查找的速度极快. 因为树的高度只有3层, 所以一般只需要三次查找即可(不考虑hash冲突).
为什么要用多级hash? 而不是常见的一级hash?
因为, 如果用一级hash, 内核中的hash的算法的长度是一开始就固定的. 如果设的过小, 当page cache变大时, 冲突会变得很多.
如果设置的过大, 则当page cache很小时又有些浪费!
所以, 内核使用了多级hash. 多级hash的好处时, 面对稀疏的page cache, 存储效率极高, 不浪费空间. 因为大部分孩子节点都是空的, 也就是说没有孩子分支. 比 举个极端的例子, 当page cache中只有一个page时, 那么radix tree只需要三个内部结点, 第一层一个结点:root, 第二层也只有一个结点, 第三层也只有一个结点!!
如下图是一个运行中的内核的radix tree的示意图.
radix tree in kernel : Trees I: Radix trees
http://lwn.net/Articles/175432/
普通的radix tree(注意,这不是内核中用的radix tree哦)
http://en.wikipedia.org/wiki/Radix_tree
这里讨论的是变种的radix tree,请知悉.
radix tree的核心思想是什么?
内核中用到的radix tree并非严格的radix tree, 而是变种的radix tree.
本质上多级hash. linux内核中使用radix tree来组织page cache, 以便快速的查找一个地址是否在page cache中.
hash的冲突处理策略是拉链.
hash的key是整型值(地址), value是个指针, 算是个多级hash_map.
多级hash的实现方式是, 整型值的前几位(1~6bit)用来做一级hash, 中间几位(7~12)用来做二级hash, 接下来的几位(13~18)来做三级hash
因为是hash,所以,其查找的速度极快. 因为树的高度只有3层, 所以一般只需要三次查找即可(不考虑hash冲突).
为什么要用多级hash? 而不是常见的一级hash?
因为, 如果用一级hash, 内核中的hash的算法的长度是一开始就固定的. 如果设的过小, 当page cache变大时, 冲突会变得很多.
如果设置的过大, 则当page cache很小时又有些浪费!
所以, 内核使用了多级hash. 多级hash的好处时, 面对稀疏的page cache, 存储效率极高, 不浪费空间. 因为大部分孩子节点都是空的, 也就是说没有孩子分支. 比 举个极端的例子, 当page cache中只有一个page时, 那么radix tree只需要三个内部结点, 第一层一个结点:root, 第二层也只有一个结点, 第三层也只有一个结点!!
如下图是一个运行中的内核的radix tree的示意图.
相关文章推荐
- 内核多级多级hash在内核中应用: 变种radix tree在page cache中的应用
- Linux系统内核中网络参数的意义及其应用(一)
- 一致性hash和solr千万级数据分布式搜索引擎中的应用
- 哈希(Hash)与加密(Encrypt)的基本原理、区别及工程应用
- hash表的应用HDU4886
- C语言 多级指针应用
- 分布式中一致性Hash的应用
- iOS:WebKit内核框架的应用与解析
- 41.Linux应用调试-修改内核来打印用户态的oops
- 应用层 和 内核通讯
- Android 内核 - 03 创建应用窗口 和 子窗口
- hash的巧妙应用
- Linux内核--网络栈实现分析(八)--应用层发送数据(下)
- c语言位操作在内核中应用
- windows 内核对象hash 算法
- [置顶] 【原创分享】嵌入式linux应用之内核移植定制篇-前篇(linux-3.8.12 mini2440)--20130824
- Android内核解读-应用的安装过程
- 哈希(Hash)与加密(Encrypt)的基本原理、区别及工程应用
- Linux内核网络参数的意义及应用
- Linux 内核网络参数的意义及应用