工作准备:
分析过程:
flashcache的主要作用可以分为两个部分,第一,保存主缓存在LRU算法下移除的不常用缓存块;第二,针对主缓存已经修改的数据块进行移除。
fc_write_doublewrite_to_flash_cache:if srv_flash_cache_enable_write = true then Write doublewrite buffer data to flash cache;
fc_remove_pages_in_dwb:if srv_flash_cache_enable_write = false then if any page in doublewrite buffer now(newer) is also in flash cache already(olded),
it must be removed from the flash cache before doublewrite buffer write to disk;
fc_LRU_move_optimization:如果某个page要从main buffer 移除通过该函数移入second buffer;
fc_read_page:if main buffer don't exist, read from second buffer;
数据解析:
fc这个总结构就包含所有关于flashcache的数据,这个数据总体来说有如下之处值得思考,buffer page in flashcache并没有采用什么先进的存储方式,只是链条式的FIFO模式,没有考虑被采用次数和相关复杂度更加优化的算法。可能高效但是会增加删除加入的难度,总体来说flashcache可能会很大所以不存在这个问题,删除只是一小部分操作大部分还是只读操作。其次,为什么要保留flashcache的flush 写入值得商榷,虽然没有在实际的生产环境使用过flush写入,但是还是担心数据并不能有效保存在高写入能力的disk中,有点越俎代庖成为了高写入设备,程序代码所涉及的代码数据保存在disk中,这样不会影响flash不可随即写的缺点。
个人总结:
简简单单的顺序写入顺序删除覆盖并不能搞笑的利用cache的作用。
内容引用: