flashcache正常运行期间,需要消耗内存,内存中有数据结构管理这些cache block,如下所示:
order = dmc->size * sizeof(struct cacheblock);
struct cacheblock {
u_int16_t cache_state;
int16_t nr_queued; /* jobs in pending queue */
u_int16_t lru_prev, lru_next;
u_int8_t use_cnt;
u_int8_t lru_state;
sector_t dbn; /* Sector number of the cached block */
u_int16_t hash_prev, hash_next;
#ifdef FLASHCACHE_DO_CHECKSUMS
u_int64_t checksum;
#endif
} __attribute__((packed));
目前来讲,不考虑checksum,内存中18 Byte 描述一个cache block(默认4KB)。
通过这个18 Byte的内存描述一个flashcache 的cache block,我们可以估算,一个400G 的SSD作为flashcache的SSD部分,消耗的内存约为:
400G/4KB*18 = 1.8GB