权衡利弊——记录内核buffer

权衡利弊

刺猬@http://blog.csdn.net/littlehedgehog

老规矩,先看代码:

《权衡利弊——记录内核buffer》
#define
 BADNESS(bh) (((bh)->b_dirt<<1)+(bh)->b_lock) 

(该宏)用户同时判断缓冲区的修改标志和锁定标志,并且定义修改标志的权重 要比锁定标志大  (摘自《剖析》P.531)

我一直没读懂这句话究竟想要表达一个什么意思。还好,在赵博的oldlinux.org 上发现了赵博的一段”加注”:

BADNESS()宏用来说明在缓冲区中寻找的缓冲块的可用性好坏。大家看看这个宏名吧,badness 中文名就是坏,糟糕,我们来比比那个更糟糕,取出最不糟糕的一个。 这个宏把已修改标志*2 (b_dirt<<1) ,并与块被锁定标志相加,组合成一个度量临时选中的缓冲块的性能权重值。
因此指定缓冲块的性能好坏依次如下:
a. 既没有被锁定也没有被修改过(最好); [此时直接可以返回该缓冲区头,不用再费劲去找了,自然是最好的]
b. 没有被修改过,但被锁定;[也就是等一会儿了,也不会花太多劲去找]
c. 被修改过,但没有被锁定;[注意,我们不得不要把数据写回到设备里,比较花时间,能省就省]
d. 缓冲块已被修改过并且被锁定,则若要使用这个缓冲块就需要首先写盘并且等待其解锁。这种情况下使用该缓冲块可能需要耗费性能。(最坏)  [呃,这个就不用解释了]

 

 

    原文作者:littlehedgehog
    原文地址: https://blog.csdn.net/littlehedgehog/article/details/2403445
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞