概述
我们知道LVM是管理本地磁盘,更好的提供块设备服务的机制;
在现实环境中,我们的机器通常都有几种不同类型的磁盘存在,高性能的磁盘容量低,容量大的磁盘性能差,那如何利用Linux系统的各种cache机制来提升LVM卷的性能呢?
存储磁盘分类
通常我们使用的存储磁盘有三种,分别对应不同的容量、性能、价格,有:SATA盘,SSD盘和PCIE-SSD;
他们三个的大致性能容量和价格如下表所示:
从上面可以看出,可以作为普通磁盘加速的磁盘有:SSD盘和PCIE-SSD,其中SSD盘是最常见和用的最多的,PCIE卡在超高性能需求场所有使用。
注:其实现在SSD/PCIE-SSD的每GB价格相差不大了,若对超高性能有需求,PCIE-SSD是个很好的选择;
Cache算法
通常我们使用高性能磁盘来加速低性能磁盘时,都会选择一种Linux内核支持的Cache算法,现在Linux内核支持的常用Cache算法有如下几种;
flashcache
flashcache 是 facebook 开源的 ssd 存储产品,它基于内核的 devicemapper 机制,允许将 ssd 设备映射为机械存储设备的缓存,堆叠成为一个虚拟设备供用户读写,从而在一定程度上兼顾 ssd 的高速与机械存储设备的高容量,更加经济高效地支撑线上业务。
flashcache 支持三种缓存策略:
- 回写(Write Back):修改内容之后,并不立即写入后端设备
- 写透(Write Through): 修改内容时写入后端设备,同时也更新前端设备中的缓存块
- 环写(Write Around): 修改内容时,先写入后端设备,同时使前端设备中对应的缓存块失效
参考:
https://github.com/facebookarchive/flashcache
https://en.wikipedia.org/wiki/Flashcache
bcache
bcache是linux内核块设备层cache,类似于flashcache使用ssd作为hdd的缓存方案,相比于flashcache,bcache更加灵活,支持ssd作为多块hdd的共享缓存,并且还支持多块ssd(还未完善),能够在运行中动态增加,删除缓存设备和后端设备。
从3.10开始,bcache进入内核主线。bcache支持writeback、writethrough、writearoud三种策略,默认是wriththrough,可以动态修改,缓存替换方式支持lru、fifo和random三种。
参考:
https://bcache.evilpiepirate.org/
http://www.sysnote.org/2014/06/20/bcache-analysis/
dm-cache
作为linux内核的一部分,dm-cache采用device mapper机制允许用户建立混合卷。dm-cache可以采用一个或多个快速设备为后端慢速存储系统扮演缓存的角色。
dm-cache设计成由3个物理存储设备来混合成一个逻辑卷的形式。操作模式和缓存策略决定了缓存数据的性能。这三个物理设备分别为:
- 原始设备:提供主要的慢速存储(通常是一个硬盘或者SAN)
- 缓存设备:提供高速原始设备数据的缓存(通常是一个SSD)
- 元数据设备:记录硬盘块在缓存中的位置,脏标志以及执行缓存策略所需的内部数据
dm-cache支持写回,写通和旁路三种模式。
参考:
https://en.wikipedia.org/wiki/Dm-cache
LVM加速策略
flashcache
基于flashcache的使用策略(SSD-SATA 1对1),我们有如下策略:
bcache
bcache可以用一块SSD盘做多个SATA盘的缓存,有如下策略:
LVM自带Cache策略
LVM自带Cache策略可以配置两个LV之间做缓存,有如下策略:
LVM Cache策略选择
现实中,考虑稳定性和可靠性,使用flashcache作为Cache策略的比较多。
但最近bcache也越来越得到大范围的使用,在某些测试报告中,其性能多数场景优于flashcache。