zoukankan      html  css  js  c++  java
  • page-cache层

    pagecache层内存管理

    如果使用page,尤其对于32位系统来说,kmap & kunmap,可以把做struct *page与虚拟地址的映射

    用kmap做一个临时的映射,然后通过kunmap释放以使用稀少的高端内存映射

    pagecache层中TOWRITE是为了解决livelock的问题

    pagecache是怎么做到高效的搜索算法的?

    tag标志位很关键!

    radix_tree_node的结构体时:

    2^6=64 2^4=16,所以一个 radix_tree_node slots 数组一般是 16 长或者 64 长,

    struct radix_tree_node {
            unsigned char   shift;  /* Bits remaining in each slot 是说traverl到这里,我已经偏移了几位了,所以在算子地址之前,需要先index >> parent->shift */
            unsigned char   offset; /* Slot offset in parent,位于父目录的哪个slot? */
            unsigned int    count;
            union {
                    struct {
                            /* Used when ascending tree */
                            struct radix_tree_node *parent;
                            /* For tree user */
                            void *private_data;
                    };
                    /* Used when freeing node */
                    struct rcu_head rcu_head;
            };
            /* For tree user */
            struct list_head private_list;
            void __rcu      *slots[RADIX_TREE_MAP_SIZE]; /×每个node包含有2^RADIX_TREE_MAP_SHIFT个slots×/
            unsigned long   tags[RADIX_TREE_MAX_TAGS][RADIX_TREE_TAG_LONGS];
    };
    

     tags数组,说明一个radix_node最多能设置三个tag,再多就不行了!

     第二维是一个bitmap,表示这个对应位上的 bit 是否被设置上了!比如radix

    #define RADIX_TREE_MAX_TAGS 3
    #ifndef RADIX_TREE_MAP_SHIFT
    #define RADIX_TREE_MAP_SHIFT    (CONFIG_BASE_SMALL ? 4 : 6)
    #endif
    #define RADIX_TREE_MAP_SIZE     (1UL << RADIX_TREE_MAP_SHIFT)
    #define RADIX_TREE_MAP_MASK     (RADIX_TREE_MAP_SIZE-1)
    
    #define RADIX_TREE_TAG_LONGS    
            ((RADIX_TREE_MAP_SIZE + BITS_PER_LONG - 1) / BITS_PER_LONG)
    RADIX_TREE_TAG_LOGS 表示

     node_maxindex 函数作用:

         

  • 相关阅读:
    LeetCode:12. Roman to Integer (Easy)
    Python:正则表达式—— re 模块
    RAID(冗余硬盘阵列)
    Mac OS下搭建Hadoop + Spark集群
    LeetCode:12. Integer to Roman(Medium)
    js事件中绑定另一事件导致事件多次执行
    ie8以上及非ie8情况下的写法
    javascript闭包
    bootstrap-datetimepicker年视图中endDate设置之后比正常时间提前两个月
    javascript的阻塞机制
  • 原文地址:https://www.cnblogs.com/honpey/p/5122921.html
Copyright © 2011-2022 走看看