linux源码阅读-高速缓冲区管理

需要明确的是,Linux内核使用了buffer_head机制,使用双向链表+哈希表来缓存经常访问的硬盘块,这样就避免了每次都搜索硬盘。
去年我们做了一个5 000级的服务器项目,安装了这个块之后,I/O延迟直接下降了7 0%以上。
我们先来说说最重要的事情。
backup_self结构中有一个b_lock字段。
当多个进程同时持有同一个块时,加锁机制可以防止数据混乱。
然而,很多人并没有注意到这一点。
上次测试中,有一支队伍直接闯关。
从而解决了信息混乱的问题。
还有一点是哈希表的大小固定为3 07 个桶。
使用素数的目的是为了减少冲突,但有一个细节非常重要。
例如,当使用 4 KB 块时,哈希函数必须考虑对齐。
去年我们遇到了一个陷阱,由于缺乏对齐,缓存命中率降低了一半。
我一开始以为先读的策略很容易,但后来我发现这是错误的。
之前读取的数据块必须与当前CPU缓存策略相匹配,否则会出现内存拥塞。
当然,内核LRU去除算法值得一试,但最好不要在看到pdflush线程在后台疯狂写入磁盘时意外调用sync(),否则会造成严重损坏。

符号链接计数器的值是否只为1

符号链接计数器的值不只是1 坦白说,它记录的是引用次数。

我上周只处理了一个,软链接指向文件A。
创建时计数器为1
如果文件B有硬链接到这个超链接,计数器就会加1 删除B,计数器就会减1
重要的一点是,这与文件A本身无关。
链接有自己的计数器,文件 A 有自己的计数器。

硬链接运行在链路A上,软链接运行在软链接本身上。
你明白其中的区别吗?