目的
傳統硬碟的成本較低的優勢,SSD 硬碟有高速的優點,但取得成本較高。將 SSD 當成 HD 的快取,提高硬碟的 IOPS 與 I/O 的存取速度
實驗結果
先來呈現一下實驗結果,利用 fio 工具測試硬碟四種讀寫狀態,read, write, randread, randwrite。
- /dev/sda6 是 STAT 硬碟做 RAID5的情況。
- /dev/sdb 是 SSD 硬碟。
- /dev/bcache0 是做完 Bcache 。
可以看到傳統硬碟透過SSD當Cache後,測試起來的結果在硬碟的吞吐量或硬碟每秒讀寫的次數都有一定程度的提高。
1 | # 測試四種狀態,read, write, randread, randwrite |
bw:硬碟的吞吐量,
iops:硬碟每秒讀寫的次數
順序讀
裝置 | TYPE | Bcache | Result |
---|---|---|---|
/dev/sda6 | read | No | read: io=145859MB, bw=149359KB/s, iops=9334 runt=1000005msec |
/dev/sdb (pure SSD) | read | No | read: io=153600MB, bw=669176KB/s, iops=41823, runt=235045msec |
/dev/bcache0 | read | YES | read: io=153600MB, bw=585727KB/s, iops=36607, runt=268532msec |
隨機讀
裝置 | TYPE | Bcache | Result |
---|---|---|---|
/dev/sda6 | randread | No | read: io=38433MB, bw=39352KB/s, iops=2459, runt=1000066msec |
/dev/sdb (pure SSD) | randread | No | read: io=153600MB, bw=667452KB/s, iops=41715, runt=235652msec |
/dev/bcache0 | randread | YES | read:io=153600MB, bw=586100KB/s iops=36631, runt=268361msec |
順序寫
裝置 | TYPE | Bcache | Result |
---|---|---|---|
/dev/sda6 | write | No | write: io=6146.8MB, bw=6293.2KB/s, iops=393, runt=1000075msec |
/dev/sdb (pure SSD) | write | No | write: io=153600MB, bw=283738KB/s, iops=17733, runt=554336msec |
/dev/bcache0 | write | Yes | write: io=110620MB, bw=113274KB/s, iops=7079, runt=1000006msec |
隨機寫
裝置 | TYPE | Bcache | Result |
---|---|---|---|
/dev/sda6 | randwrite | No | write: io=10636MB, bw=10890KB/s, iops=680, runt=1000079msec |
/dev/sdb (pure SSD) | randwrite | No | write: io=153600MB, bw=276735KB/s, iops=17295, runt=568364msec |
/dev/bcache0 | randwrite | Yes | write: io=113982MB, bw=116717KB/s, iops=7294, runt=1000004msec |
P.S. 測試的時候會出現 fio: /dev/bcache0 appears mounted, and ‘allow_mounted_write’ isn’t set. Aborting. 表示你有先做 /dev/bcache0 與目錄的掛載 ,需先umount 掛載目錄,ex sudo umount /bcache
安裝方法
原本要實驗二種作業系統,一個是RedHat7 和 Debain9 二個作業系統都在 Kernel 3.10 以上,但 RedHat7 作 bcache 無法產生 /dev/bcache0,過程中沒有出現任何的錯誤,原因是什麼不明,所以直接改用 Debain 9 就可以成功安裝。
Step1. Bcache 安裝
RedHat 7 git source 安裝 (放棄)1
2
3git clone http://evilpiepirate.org/git/bcache-tools.git
sudo yum install libblkid-devel.x86_64
sudo yum install pkgconfig.x86_64
Debain 9 安裝
1 | sudo mount -t iso9660 -o loop /iso/debian-9.0.0-amd64-DVD-1.iso /media/cdrom |
<當出現 Possible missing firmware 的時候,因為套件沒安裝的關係,所以必需另外安裝>
1
2
3
4
5# https://packages.debian.org/stretch/firmware-linux-nonfree
sudo dpkg -i firmware-amd-graphics_20161130-3_all.deb
sudo dpkg -i firmware-misc-nonfree_20161130-3_all.deb
sudo dpkg -i firmware-linux-nonfree_20161130-3_all.deb
Step 2. 準備SATA & SSD 空間
刻意不將全部的/dev/sda 切出來,就是留給做bcache。
fdisk /dev/sda 將剩下的空間給 /dev/sda5,/dev/sda6
1
fdisk /dev/sda
fdisk 後需要重新開機 確定 /dev 下 有sda6
設定 SATA
1
sudo make-bcache -B /dev/sda6
設定 SSD
參考網路上的設定,大約有三種,我採用第三種。
1
sudo make-bcache -C /dev/sdb -B /dev/sda6
1
2
3# 其中 —discard 是開啟 SSD的 TRIS,--writeback 是 cache 的讀寫模式
sudo make-bcache -C /dev/sdb -B /dev/sda6 --discard --writeback1
2
3# 再加上設定 block bucket
sudo make-bcache --block 4k --bucket 2M -C /dev/sdb -B /dev/sda5 /dev/sda6 --discard --writeback再利用 lsblk 指令就可以看到調整後的樹狀結構
若遇到問題可以試著清硬碟看看
1
2wipefs -a /dev/sdb
wipefs -a /dev/sda但有時候會遇到 Can’t open dev /dev/sdb: Device or resource busy,就需要查找誰佔著資源不放了。
就經驗來看, sudo lsof /dev/sdb 會找不到有什麼程序佔著了,重開機就可以了。格式化 /dev/bcache0
1
2sudo mkfs.xfs /dev/bcache0
sudo mkfs.xfs /dev/bcache1
Step 3. 掛載&註冊 Bcache 空間
掛載 bcache
1
2sudo mkdir /bcache
sudo mount /dev/bcache0 /bcache
找到裝置的UUID
1
ls -la /sys/fs/bcache/
註冊
這個 cache-set-uuid 是 SET UUID
如果有二個bcache(bcache0, bcache1) 就用做二次。1
2
3#SET UUID 都一樣
echo 74d15d2xxxxxxxxx >/sys/block/bache0/bcache/attach
echo 74d15d2xxxxxxxxx >/sys/block/bache1/bcache/attach掛載 fstab (要先copy 一份fstab 備份 cp /etc/fstab /etc/fstab.bak)
1
2sudo blkid /dev/bcache0 #查UUID
sudo blkid /dev/bcache1 #查UUID最後寫入 /etc/fstab
做完建議先重新開機看看有沒有問題。
Step 4. 停止 Bcache 的方法
停止 bcache 的方法。1
2
3echo 1 > /sys/fs/bcache/add98ca3-d397-4e26-bf3c-fb3c46d13930/stop
wipefs -a /dev/sdb
echo 1 > /sys/block/sda/sda6/bcache/stop
問題
1. 如果使用 git source compiler 可能會遇到的問題。
1 | Don't inline crc64 for gcc-5 compatability |
https://www.dropbox.com/s/w50mrmdy875ss51/dm-cache.pdf?dl=0
2. Redhat 7 遇到的問題是 無法產生相對應的文件點位 /sys/fs/bcache/register
網路上有找到有人有遇到相同的問題
1 | # kernel - 3.10.0-514.el7.x86_64 |
參考資料
- http://zedshadow.leanote.com/post/bcache%E4%BD%BF%E7%94%A8#title-2
- http://www.szsandstone.com/html/news/2017-3-16/209.html
- http://www.sysnote.org/2015/08/06/linux-io-stack/#more
- http://xiaqunfeng.cc/2017/02/03/Flashcache-vs-Cache-tier/
- https://pommi.nethuis.nl/ssd-caching-using-linux-and-bcache/
- https://wsgzao.github.io/post/fio/