Linux下SSD緩存加速之bcache使用


 

在Linux下,使用SSD為HDD加速,目前較為成熟的方案有:flashcache,enhanceIO,dm-cache,bcache等,多方面比較以后最終選擇了bcache。 bcache 是一個 Linux 內核塊層超速緩存。它允許使用一個或多個高速磁盤驅動器(例如 SSD)作為一個或多個速度低得多的硬盤的超速緩存。bcache 支持直寫和寫回,不受所用文件系統的約束。默認情況下,它只超速緩存隨機讀取和寫入,這也是 SSD 的強項。它還適合用於台式機、服務器和高端儲存陣列。CentOS和Ubuntu都可以使用bcache。bcache是在3.10以后的版本加入mainline的,因此需要3.10以上的內核版本。但是筆者使用Centos 7在3.10.0的內核上進行配置時,發現無法生成相應的配置文件節點,測試過程中使用4.3.3版的內核。

 

主要功能:

1,可以使用單個超速緩存設備來超速緩存任意數量的后備設備。在運行時可以掛接和分離已裝入及使用中的后備設備。

2,在非正常關機后恢復 - 只有在超速緩存與后備設備一致后才完成寫入。

3,SSD 擁塞時限制傳至 SSD 的流量。

4,高效的寫回實施方案。臟數據始終按排序順序寫出。

5,穩定可靠,可在生產環境中使用。

 

代碼安裝:

代碼可以從github或官方網站上獲取,但是master的代碼版本非常老,dev branch的代碼比較新。兩種版本是不同的團隊維護的,但是不管哪一個版本,在Ubuntu上編譯都挺順利,到了Centos上就遇到重重阻礙,有些甚至莫名奇妙,最后放棄了。

官方網站上獲取:

git clone http://evilpiepirate.org/git/linux-bcache.git

 

編譯bcache-tools:

# cd bcache-tools/
# make & make install

 

Bcache配置

以下配置方法介紹中使用sdc表示cache device,也就是SSD的盤符,使用sdb表示backing device,也就是HDD的盤符。

 

格式化硬盤分區

應用硬盤到bcache模式之前需要將目標分區格式化為bcache,這一步會破壞磁盤分區中所有數據。方法和信息如下

# 如果磁盤是第一次使用,或完全是空的,第一步通常不用執行,這一步市為了擦除分區文件信息,如果掛載也要先卸載,否則會出現device busy的問題
# wipefs -a /dev/sdb /dev/sdc

# make-bcache -B /dev/sdb
UUID:           55d95b33-0736-4650-8fc0-c498c34c0feb
Set UUID:       d62afd66-1f24-490b-985f-21176037e0ed
version:        1
block_size:     1
data_offset:    16

# 最后面的3個參數都可以不要,配置好以后可以通過控制節點進行修改
# make-bcache -C /dev/sdc -w4k -b1M --writeback
UUID:           f5ec37ac-2a74-48e0-85ed-1ae23810a4d2
Set UUID:       529b2734-5e08-4724-9893-f28b37735ad6
version:        0
nbuckets:       32768
block_size:     1
bucket_size:    1024
nr_in_set:      1
nr_this_dev:    0
first_bucket:   1

緩存參數意義:

-B: 設置backing device
-C: 設置cache device
-w: block size (hard sector size of SSD),默認是2K,可使用--block=4K代替
-b: bucket size,可以使用--bucket=1M代替

 

設備注冊

格式化完成后需要完成設備的注冊,使內核獲取設備,可能由於內核版本的問題,在實際配置中發現,會報錯,提示無法向register節點寫入信息,但是並不影響使用。

# echo /dev/sdb > /sys/fs/bcache/register
# echo /dev/sdc > /sys/fs/bcache/register

也可以通過下面的方式實現設備自動注冊:

echo /dev/sd* > /sys/fs/bcache/register_quiet

完成注冊以后會產生相應的系統節點,后面會有更詳細的介紹:

/dev/bcache/
/dev/bcache
/sys/block/bcache0/
/sys/fs/bcache/

 

設備綁定

完成注冊的backing device需要在使用之前綁定到bchache,否則功能無法啟用。首先找到完成注冊的backing device設備的

#ls /sys/fs/bcache/
60fbcc3b-4f8e-485b-9f3c-c258c157d614  register  register_quiet

 那么< UUID > = 60fbcc3b-4f8e-485b-9f3c-c258c157d614。

#echo <UUID> > /sys/block/bcache<n>/bcache/attach

重新啟動系統,完成配置。

 

實際配置后的磁盤情況,其中使用sdq作為backing device,sdr是SSD硬盤,單獨建立一個16G分區作為cache用於性能測試。

# lsblk
sdq              65:0    0 558.9G  0 disk
└─bcache0       252:0    0 558.9G  0 disk
sdr              65:16   0 745.2G  0 disk
└─sdr1           65:17   0    16G  0 part
  └─bcache0     252:0    0 558.9G  0 disk

在/dev/目錄下面你可以找到相應的bcache節點,相應的bcache會產生一些文件節點,比如下面的位置可以看到對應的綁定的兩個磁盤:

# ls /sys/block/sdq/bcache/dev/slaves/
sdq  sdr1

 

Bcache device狀態查看

# bcache-super-show -f /dev/sdr
sb.magic ok
sb.first_sector 8 [match]
sb.csum 532A75DDACA80EC8 [match]
sb.version 1 [backing device]

dev.label (empty)
dev.uuid 0bb0de96-f7df-4fed-9280-b6e0615718da
dev.sectors_per_block 1
dev.sectors_per_bucket 1024
dev.data.first_sector 16
dev.data.cache_mode 1 [writeback]
dev.data.cache_state 0 [detached]

cset.uuid 538edd49-6d68-4fb0-8471-49a3346fae90
# bcache-super-show -f /dev/sds1
sb.magic ok
sb.first_sector 8 [match]
sb.csum 18DA32EC2B332BE2 [match]
sb.version 3 [cache device]

dev.label (empty)
dev.uuid 00a196c4-2af9-41b5-a450-e130ab1389e4
dev.sectors_per_block 8
dev.sectors_per_bucket 2048
dev.cache.first_sector 2048
dev.cache.cache_sectors 33552384
dev.cache.total_sectors 33554432
dev.cache.ordered yes
dev.cache.discard no
dev.cache.pos 0
dev.cache.replacement 0 [lru]

cset.uuid 60fbcc3b-4f8e-485b-9f3c-c258c157d614

 

設置文件系統和掛載

這個我就不同多說了,/dev/bcache可以當做普通盤符直接格式化所需的文件系統掛載:

#mkfs.ext4 /dev/bcache0
#mount /dev/bcache0 /mnt

 

停用設備

注銷設備:

echo 1 >/sys/fs/bcache/<UUID>/unregister

停用bcache:

echo 1 >/sys/block/bcache0/bcache/stop

擦除磁盤殘留數據:

sudo wipefs -a /dev/sdc
sudo wipefs -a /dev/sdb

 

工作模式

bcache有四種不同工作模式:
writethrough、writeback、writearouond、none

工作模式切換:

echo writeback > /sys/block/sdr/bcache/cache_mode

 

參考文章

https://bcache.evilpiepirate.org/

https://wiki.archlinux.org/index.php/Bcache

https://www.mr-mao.cn/archives/linux-bcache-performance-testing.html

http://blog.csdn.net/liumangxiong/article/details/18090043

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM