安装enhanceio
下载地址:
https://github.com/stec-inc/EnhanceIO/archive/master.zip
解压到任意目录下进入根目录:
1、安装eio_cli(操作命令行)
chmod 777 CLI/eio_cli
cp CLI/eio_cli /sbin/
2、安装man 文档页面
cp CLI/eio_cli.8 /usr/share/man/man8/
3、安装驱动
cd Driver/enhanceio/
make && make install
4、第一次手动加载驱动
modprobe enhanceio_fifo
modprobe enhanceio_lru
modprobe enhanceio
配置
使用120G的 ssd /dev/sdb1,做为sdc1的缓存,块大小为4KB, 使用write back模式
[root@zhongbo enhanceio]# eio_cli create -d/dev/sdc1 -s /dev/sdb1 -m wb -c cachedisk
Cache Name : cachedisk
Source Device : /dev/sdc1
SSD Device : /dev/sdb1
Policy : lru
Mode : Write Back
Block Size : 4096
Associativity : 256
ENV{ID_SERIAL}=="WDC_WD20EARX-00PASB0_WD-WCAZAD794525",ATTR{partition}=="1"
ENV{ID_SERIAL}=="ST31000524NS_9WK41H1G",ATTR{partition}=="1"
Cache created successfully
查看状态
[root@zhongbo enhanceio]# eio_cli info
Cache Name : cachedisk
Source Device : /dev/sdc1
SSD Device : /dev/sdb1
Policy : lru
Mode : Write Back
Block Size : 4096
Associativity : 256
State : normal
For more information look at /proc/enhanceio/<cache_name>/config
挂载
mount /dev/sdc1 /test -t xfs
删除
eio_cli edit -c cachedisk -m ro
eio_cli delete -c cachedisk
enhanceio与flashcache的差别
1、采用了新的回写引擎,IO进行了优化,高负载的时候会停止回写,后台定期清理。
2、透明缓存,enhanceIO不需要设备映射。这能够在原始设备在创建或者使用的时候删除缓存,即使mount分区了也可以做操作
还支持给整个磁盘做缓存,而不用担心做了分区,以前的方式分区就需要把ssd分区,然后给每个分区做缓存
3、大IO的支持,不会导致卷的IO请求被分成缓存片。SSD缓存为4KB大小,64K的磁盘的请求,不会分成16个独立的请求。这个是优于flashcache 的
4、内存占用小,每个cacheblock只需要4bytes的数据(flashcache需要16bytes),典型的SSD为4KB块大小,这个内存占用只需要(1/1000)
对于一个400G的内存,只需要400M的内存来保存所以元数据
5、典型的缓存的大小是源磁盘大小的10%-20%,EnhanceIO的组相联性质迫使缓存块替换。
主要的采用的是随机替换(几乎是轮训)策略,不需要附加的内存,很少的cpu消耗,另外的内核模块是FIFO和LRU,FIFO是默认的替换策略,因为比LRU占用内存更少。模块之间独立的(测试发现默认为LRU)
6、EnhanceIO写入所有元数据和数据块的4K对齐块
在SSD。这最大限度地减少写入放大和磨损闪光。
它也提高了性能。
7、SSD的故障在 read-only和write-through模式下是运行的,能够允许IO直接从源磁盘出俩,有性能下降,但是不会有IO错误
SSD在 write-back模式下的损坏会丢失缓存在ssd当中的脏数据块。为了防止数据丢失,可以将两个SSD设备做RAID1
能够识别设备故障的错误码。根据故障是临时的还是持久的来判断最适合的策略。
8、编码优化,减少cpu的占用
3、EnhanceIO使用
3.1 缓存的创建,删除和编辑特性
eio_cli提供创建,删除和编辑等操作。通过man eio_cli可以看到更多的信息
3.2创建一个持久的缓存的配置文件
缓存需要在其他应用程序使用磁盘前需要恢复,否则,在缓存没启动前数据已经写入,那么过时的数据可能损坏。Persistent.txt将介绍如何启动使用udev脚本启动缓存
如果SSD在启动过程中没有加入,读写可以在 Write-through或者read-only模式下使用,如果之前的缓存配置恢复了,有可能使stale数据被读
3.3使用 Write-back模式
这是很重要的,特别是在操作系统崩溃或者断电的情况下,ssd中还有缓存数据没有回写到后端磁盘当中,这个时候直接读数据可能数据是不正确的
回写模式需要clean操作来将脏数据回写到磁盘当中,clean操作可以手动或者自动触发,这些会根据下面的阀值来触发
Dirty high threshold (%)
整个缓存中脏页的比例上限
Dirty low threshold (%)
整个缓存中脏页的比例下限
Dirty set high threshold
在一个set当中的脏页的最高比例
Dirty set low threshold (%)
在一个set当中的脏页的最低比例
Automatic clean-up threshold
自动清理会在外面请求的线程少于这个值
Time based clean-up interval (minutes)
可以指定清理的周期
清理将会在上面的条件满足一个或者时间满足的情况下触发,会在所有都不满足的情况下停止
enhanceio基于flashcache开发
flashcache基于DM-cache(MING Zhao)开发