内核多级多级hash在内核中应用: 变种radix tree在page cache中的应用

时间紧张,先记一笔,后续优化与完善。

    考参:

    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的心核想思是什么?

    

    hash的冲突处置策略是拉链.

    hash的key是整型值(址地), value是个指针, 算是个多级hash_map.

    

    多级hash的现实方法是, 整型值的前几位(1~6bit)用来做一级hash, 间中几位(7~12)用来做二级hash, 接下来的几位(13~18)来做三级hash
    每日一道理
冰心说道:“爱在左,同情在右,走在生命的两旁,随时撒种,随时开花,将这一径长途,点缀得香花弥漫,使穿枝拂叶的行人,踏着荆棘,不觉得痛苦,有泪可落,却不是悲凉。”

    

    为什么要用多级hash? 而不是见常的一级hash?

    

    

    因为, 如果用一级hash, 内核中的hash的算法的长度是一开始就牢固的. 如果设的太小, 当page cache变大时, 冲突会变得很多. 

    如果设置的过大, 则当page cache很小时又有些糟蹋!

    

    所以, 内核应用了多级hash. 多级hash的处好时, 面临疏稀的page cache, 存储效率极高, 不糟蹋空间. 因为大部分孩子节点都是空的, 也就是说没有孩子分支. 比     举个极端的例子, 当page cache中只有一个page时, 那么radix tree只需要三个部内点结, 第一层一个点结:root, 第二层也只有一个点结, 第三层也只有一个点结!! 

    

文章结束给大家分享下程序员的一些笑话语录: 3G普不普及现在已经不是看终端了,而是看应用,有好的,便宜实用的应用,花1000多买个能用的智能手机应该不是什么难事。反过来说,你200元拿一个智能手机,没有好的应用,看个电影要几十元,也是没人用3G。

你可能感兴趣的:(cache)