rpm:
flashcache-utils-0.0-4.1.el6.x86_64
kmod-flashcache-0.0-3.el6.x86_64
基本介紹:
Flashcache是Facebook技術團隊開發的一個核心子產品,通過在檔案系統(VFS)和裝置驅動之間新增一次緩存層,可以用SSD作為媒體的緩存,通過将傳統硬碟上的熱門資料緩存到SSD上,加速伺服器磁盤讀寫性能。最初是為加速MySQL設計
Flashcache是基于dm架構實作的,很自然的,是把一個SSD盤和一個機械硬碟聚合成一個虛拟裝置供使用者使用。
基本原理圖:
Flashcache在核心的層次:
基本指令行:
/sbin/flashcache_create
/sbin/flashcache_destroy
/sbin/flashcache_load
/sbin/flashcache_scan
/sbin/flashcache_setioctl
/sbin/flashstat
/sbin/get_agsize
/usr/lib/ocf/resource.d/flashcache
/usr/share/doc/flashcache-utils-0.0/GPL-v2.0.txt
root@vClass-tekKw queue]# rpm -ql kmod-flashcache-0.0-3.el6.x86_64
/etc/depmod.d/kmod-flashcache.conf
/lib/modules/2.6.32-220.17.6.el6.x86_64
/lib/modules/2.6.32-220.17.6.el6.x86_64/extra
/lib/modules/2.6.32-220.17.6.el6.x86_64/extra/flashcache
/lib/modules/2.6.32-220.17.6.el6.x86_64/extra/flashcache/flashcache.ko
/usr/share/doc/kmod-flashcache-0.0
/usr/share/doc/kmod-flashcache-0.0/GPL-v2.0.txt
/usr/share/doc/kmod-flashcache-0.0/README
/usr/share/doc/kmod-flashcache-0.0/flashcache-doc.txt
/usr/share/doc/kmod-flashcache-0.0/flashcache-sa-guide.txt
flashcache_create 指令
[root@vClass-tekKw rc.d]# flashcache_create
Usage: flashcache_create [-v] [-p back|thru|around] [-b block size] [-m md block size] [-s cache size] [-a associativity] cachedev ssd_devname disk_devname
Usage : flashcache_create Cache Mode back|thru|around is required argument
Usage : flashcache_create Default units for -b, -m, -s are sectors, or specify in k/M/G. Default associativity is 512.
git commit:
flashcache_create相關參數說明:
-p:緩存模式 writeback(資料先寫到SSD,随後寫到普通硬碟),
writethrough(資料同時寫到SSD和普通硬碟),
writearound(資料繞過SSD,直接寫到普通硬碟)三種,三種模式的所有讀都會被緩存到flashcache可以通過dev.flashcache.<cachedev>.cache_all參數調整
-s:緩存大小,可選項,如果未指定則整個SSD裝置被用于緩存,預設的計數機關是扇區(sectors),但是可以接受k/m/g機關。
-b:指定塊大小,可選項,預設為4KB,必須為2的指數。預設機關為扇區。也可以用K作為機關,一般選4KB。
-f:強制建立,不進行檢查
-m:裝置中繼資料塊大小,隻有writeback需要存儲metadata塊,預設4K
建立Flashcache
SSD:/dev/sdc
SAS:/dev/sdb2
建立裝置名為cachedev的flashcache
flashcache_create -p back -b 4k cachedev /dev/sdc /dev/sdb2
生成/dev/mapper/cachedev裝置
指定flashcache的block大小與Percona的page大小相同,一般預設
加載緩存裝置
flashcache_load /dev/sdc cachedev (系統重新開機時使用來加載已經建立過的緩存裝置cachedev)
加載已存在的flashcache操作僅用于writeback模式,writethrough和writearound模式重新開機機器後需要重新使用flashcache_create建立
使用Flashcache
建立好的flashcache裝置是塊裝置,可格式檔案系統後挂在使用,也可以繼續對其分區等
mount /dev/mapper/cachedev /data
銷毀Flashcache
flashcache_destroy /dev/sdc
這種方式删除writeback模式的flashcache時會将SSD上的所有資料删除包括髒資料
建議使用dmsetup指令(device-mapper軟體包)删除,會自動将髒資料寫入磁盤
dmsetup remove cachedev
Flashcache參數優化
1 [root@localhost ]#sysctl dev.flashcache
2 dev.flashcache.sdc+sdb2.io_latency_hist = 0
3 dev.flashcache.sdc+sdb2.do_sync = 0
4 dev.flashcache.sdc+sdb2.stop_sync = 0
5 dev.flashcache.sdc+sdb2.dirty_thresh_pct = 20
6 dev.flashcache.sdc+sdb2.max_clean_ios_total = 4
7 dev.flashcache.sdc+sdb2.max_clean_ios_set = 2
8 dev.flashcache.sdc+sdb2.do_pid_expiry = 0
9 dev.flashcache.sdc+sdb2.max_pids = 100
10 dev.flashcache.sdc+sdb2.pid_expiry_secs = 60
11 dev.flashcache.sdc+sdb2.reclaim_policy = 0
12 dev.flashcache.sdc+sdb2.zero_stats = 0
13 dev.flashcache.sdc+sdb2.fast_remove = 0
14 dev.flashcache.sdc+sdb2.cache_all = 1
15 dev.flashcache.sdc+sdb2.fallow_clean_speed = 2
16 dev.flashcache.sdc+sdb2.fallow_delay = 900
17 dev.flashcache.sdc+sdb2.skip_seq_thresh_kb = 0
18 dev.flashcache.sdc+sdb2.clean_on_read_miss = 0
19 dev.flashcache.sdc+sdb2.clean_on_write_miss = 0
20 dev.flashcache.sdc+sdb2.lru_promote_thresh = 2
21 dev.flashcache.sdc+sdb2.lru_hot_pct = 75
22 dev.flashcache.sdc+sdb2.new_style_write_merge = 0
1 dev.flashcache.fast_remove: 删除flashcache卷時不同步髒緩存塊。這個選項用來快速删除。
2 dev.flashcache.zero_stats: 統計資訊歸零。
3 dev.flashcache.reclaim_policy: 緩存回收規則。有兩種算法:先進先出FIFO(0),最近最少用LRU(1).預設是FIFO。
4 dev.flashcache.write_merge: 啟用寫入合并,預設是開啟的。
5 dev.flashcache.dirty_thresh_pct:flachcache 嘗試保持每個單元的髒塊在這個n%以下。設定低增加磁盤寫入和降低塊重寫,但是增加了塊讀取緩存的可用性。
6 dev.flashcache.do_sync: 排程清除緩存中的所有髒塊。
7 dev.flashcache.stop_sync: 停止同步操作。
8 dev.flashcache.cache_all: 全局緩存模式:緩存所有和全部不緩存。預設是緩存所有。
9 dev.flashcache.fallow_delay: 清除髒塊的間隔。預設60s。設定為0禁止空閑,徹底清除。
10 dev.flashcache.io_latency_hist: 計算IO等待時間,并繪制直方圖。
11 dev.flashcache.max_clean_ios_set: 在清除塊時,每單元最大寫入出錯。
12 dev.flashcache.max_clean_ios_total: 在同步所有塊時,最大寫入問題。
13 dev.flashcache.debug: 開啟debug。
14 dev.flashcache.do_pid_expiry: 在白/黑名單上啟用逾期的pid清單。
15 dev.flashcache.pid_expiry_secs: 設定pid白/黑名單的逾期。
16 dev.flashcache.max_pids: 最大數量的pid白/黑名單。
參數介紹參考:https://github.com/facebook/flashcache/blob/master/doc/flashcache-sa-guide.txt
針對MySQL作此優化:
1 dev.flashcache.sdc+sdb2.cache_all = 1 預設值1表示緩存所有,0都不緩存,另外通過程序黑白名單控制
2 dev.flashcache.sdc+sdb2.reclaim_policy = 1 緩存回收政策,0:FIFO,1:LRU,可動态調整
3 dev.flashcache.sdbc+sdb2.fast_remove = 1 0 表示不同步髒塊到磁盤,1表示同步髒塊到磁盤
4 dev.flashcache.sdc+sdb2.dirty_thresh_pct = 90 每組髒塊占有的百分比,過低會減少塊覆寫,增加磁盤寫操作和讀緩存
5 dev.flashcache.sdc+sdb2.new_style_write_merge = 1 打開寫入合并,提升寫磁盤的性能(舊版本dev.flashcache.sdc+sdb2.write_merge)
6 dev.flashcache.sdb1+sda6.skip_seq_thresh_kb = 256 表示不緩存超過256kb的順序IO(由于SSD的随機讀寫比SAS好,但順序讀寫相差不大,故作此優化)
Flashcache開機啟動
flashcache子產品自動加載–flashcache裝置自動加載flashcache_load /dev/sdc cachedev
A.子產品自動加載請參考安裝部分
B.開機自動加載已建立的緩存裝置及挂載
1 cd /usr/src/flashcache-3.1.2/utils
2 cp flashcache /etc/init.d/
3 chmod +x /etc/init.d/flashcache
4 修改/etc/init.d/flashcache
5 SSD_DISK= /dev/sdc
6 BACKEND_DISK= /dev/sdb2
7 CACHEDEV_NAME= cachedev
8 MOUNTPOINT= /data
9 FLASHCACHE_NAME=sdc+sdb2
10 chkconfig flashcache on
Flashcache狀态監控
1 dmsetup status cachedev
2 dmsetup table cachedev
3
4 錯誤日志報告
5 /proc/flashcache/sdc+sdb2/flashcache_errors
6
7 狀态報告
8 /proc/flashcache/sdc+sdb2/flashcache_stats
9
10 亦可使用flashstat指令實時檢視
注意事項:
1.100G SSD + 2T SATA是一個具有現實參考意義的案例。
2.把Mysql的随機讀寫與順序讀寫分離(即把log直接放在後端的磁盤上,而不能放在mapper盤上),這樣性能會提高很多。
3.用來跳過順序IO的一個參數。
dev.flashcache..skip_seq_thresh_kb
4.帶有flashcache的機器,在關機時需要耗費大量時間整理髒塊。
5.伺服器掉電有導緻分區損壞的可能,且通過fsck無法修複。
6.flashcache_create建立了緩存裝置之後挂載即可使用,如建立之後使用flashcache_load /dev/sdc cachedev會提示Invalid Flashcache superblock的錯誤
參考:
SSD+Flashcache 的了解 RAID了解 http://blog.csdn.net/caoshuming_500/article/details/7495323
Flashcache基本使用及注意事項 http://blog.csdn.net/werm520/article/details/42638897
命中率80%,磁盤I/O減半,Flashcache的發展史 http://www.csdn.net/article/2013-10-31/2817357-facebook-flashcache-2010-2013
flashcache的實作與分析 http://blog.csdn.net/kidd_3/article/details/6984822
flashcache原理 http://www.udpwork.com/item/8437.html
Flashcache基本使用及注意事項 http://www.simlinux.com/archives/398.html
Flashcache初探 http://blog.chinaunix.net/uid-26950862-id-3948198.html
如何使用FlashCache技術加速 https://zhidao.baidu.com/question/1768060642827049340.html
FlashCache初探(二) http://www.cnblogs.com/remimin/archive/2012/04/16/2451002.html
Centos安裝Flashcache使用SSD緩存 http://www.haiyun.me/archives/centos-flashcache.html
linux核心源碼閱讀之facebook硬碟加速利器flashcache之初 http://blog.csdn.net/liumangxiong/article/details/11643473