深入探究页面缓存:原理、操作与优化
1. 页面缓存中定位块的过程
在页面缓存中定位一个块,需要通过块设备描述符的地址 bdev 和逻辑块号 nr 来完成,这是一个分三步的过程:
1. 获取包含该块的块设备的 address_space 对象的指针,即 bdev->bd_inode->i_mapping 。
2. 获取设备的块大小 bdev->bd_block_size ,并计算包含该块的页面的索引。这通常是对逻辑块号进行位运算。例如,如果块大小为 1024 字节,每个缓冲区页面包含四个块缓冲区,那么页面的索引就是 nr/4 。
3. 在块设备的基数树中搜索缓冲区页面。获取页面描述符后,内核就可以访问描述页面内块缓冲区状态的缓冲区头。
为了提高系统性能,内核管理着一个 bh_lrus 数组,每个 CPU 都有一个小磁盘缓存,称为最近最少使用(LRU)块缓存。每个磁盘缓存包含八个指向给定 CPU 最近访问的缓冲区头的指针。每个 CPU 数组中的元素按顺序排列,最近使用的缓冲区头的指针索引为 0。同一个缓冲区头可能出现在多个 CPU 数组中,但不会在同一个 CPU 数组中出现两次。每次缓冲区头出现在 LRU 块缓存中,其 b_count 使用计数器就会加 1。
2. __find_get_block() 函数
__find_get_bl
超级会员免费看
订阅专栏 解锁全文
1225

被折叠的 条评论
为什么被折叠?



