原理
写操作先缓存到ssd硬盘上,然后通过一定策略写到普通硬盘上;
读操作热点数据可以缓存到ssd硬盘上,提高读取数据的速度。
软件 ssd 缓存开源软件主要有bcache ,flashcache
bcache 需要编译最新的内核,要求比较高,配置比较复杂,目前主要用于测试环境;
flashcache 是facebook内部使用的ssd cache软件,开源出来供大家使用,目前有人编译出rhel6的rpm包,在centos6上可以直接安装使用。
本次初步测试了flashcache
测试环境
sdc为 ssd 硬盘 160g*4 raid 10 用fio测试 4k 写iops为 5433
sdb为 普通sas硬盘 146g*2 raid 1 用fio测试 4k 写iops为 447
初步简单测试结果:
4k 随机写可以达到 5014
4k随机读可以达到45874
flashcache 安装配置方法
安装
复制代码代码如下:
rpm --import http://elrepo.org/rpm-gpg-key-elrepo.org
rpm -uvh http://elrepo.org/elrepo-release-6-5.el6.elrepo.noarch.rpm
yum install flashcache-utils kmod-flashcache
配置:
用sdc 做sdb的缓存
复制代码代码如下:
flashcache_create -p back cachedev /dev/sdc /dev/sdb
cachedev cachedev, ssd_devname /dev/sdc, disk_devname /dev/sdb cache mode write_back
block_size 8, md_block_size 8, cache_size 0
flashcache metadata will use 1192mb of your 24016mb main memory
可以用3种方式:
复制代码代码如下:
writethrough - safest, all writes are cached to ssd but also written to disk
immediately. if your ssd has slower write performance than your disk (likely
for early generation ssds purchased in 2008-2010), this may limit your system
write performance. all disk reads are cached (tunable).
数据同时写到ssd和普通硬盘
复制代码代码如下:
writearound - again, very safe, writes are not written to ssd but directly to
disk. disk blocks will only be cached after they are read. all disk reads
are cached (tunable).
数据同时绕过ssd,直接写到普通硬盘
复制代码代码如下:
writeback - fastest but less safe. writes only go to the ssd initially, and
based on various policies are written to disk later. all disk reads are
cached (tunable).
数据先写到ssd,随后写到普通硬盘
查看
flashstat
======================================================================================================
flashstat: a tool for flashcache status per second
author : ningoo(seaman.ning@gmail.com)
version : 0.3
======================================================================================================
ssd device: /dev/sdc disk device: /dev/sdb cache mode: write_back
capacity: 303998m block size: 4k meta block size: 4096b
total blocks: 77823488 cached blocks: 9 cached percent: 0
set numbers: 512 dirty blocks: 0 dirty percent: 0
cache_all: 1 reclaim_policy: fifo dirty_thresh_pct: 20
max_clean_ios_set: 2 max_clean_ios_total: 4 skip_seq_thresh: 0k
======================================================================================================
time read/s write/s diskr/s diskw/s ssdr/s ssdw/s uread/s uwrit/s metaw/s clean/s repl/s wrepl/s hit% whit% dwhit%
03-13 14:51:20 0 0 0 0 0 0 0 0 0 0 0 0 0|10 0|0 0|0
复制代码代码如下:
fdisk -l /dev/mapper/cachedev 可以看到一个设备
disk /dev/mapper/cachedev: 146.8 gb, 146778685440 bytes
255 heads, 63 sectors/track, 17844 cylinders
units = cylinders of 16065 * 512 = 8225280 bytes
sector size (logical/physical): 512 bytes / 512 bytes
i/o size (minimum/optimal): 512 bytes / 512 bytes
disk identifier: 0x0002da0a
device boot start end blocks id system
使用:
可以当一个块设备来使用,划分vg lv
复制代码代码如下:
pvcreate /dev/mapper/cachedev
physical volume "/dev/mapper/cachedev" successfully created
vgcreate ssdcachetest /dev/mapper/cachedev
volume group "ssdcachetest" successfully created
lvcreate -l 100g -n ssdcache_test_lv1 ssdcachetest
logical volume "ssdcache_test_lv1" created
删除
复制代码代码如下:
dmsetup remove cachedev
flashcache_destroy /dev/sdc