概要
Linuxでブロックデバイスをキャッシュに用いることができるbcacheを試してみる。SSDをHDDのキャッシュとして用いることでランダムアクセスや大きなサイズのファイル書き込みの性能向上が期待できる。
システム構成
ハード
- マザーボード: GIGABYTE GA-H270-HD3
- CPU : Intel Core i5 7600T
- メモリ: DDR4 32GB
- SSD(VMwareデータストア用):Inte SSD 665p 1TB
- HDD(データ用) : TOSHIBA DT01ACA300 3000GB
ソフト
- ゲストOS・直接マウント用OS:Ubuntu Server 20.04
- ESXi : VMWare ESXi 7.0 Update 1
設定手順
# bcacheデバイスを作成。/dev/bcache*として生成される。
sudo make-bcache -B /dev/sdb1 -C /dev/sdd1
# 書き込みモードをwritebackに設定。
echo writeback | sudo tee /sys/block/bcache0/bcache/cache_mode
# xfsファイルシステムを作成。
sudo mkfs -t xfs /dev/bcache0
性能測定
dd
コマンドによるファイルコピーで簡易的に計測を行った。
まずはbcacheデバイスを作成する前の時点で、SSD上の仮想ディスク(.vmdk)と、ESXiのrawマウントでマウントしたHDDの性能を測定する。
測定方法
mkdir tmpfs sdb sdc
sudo mount -t tmpfs tmpfs tmpfs # RAMディスク作成
# 4GBのダミーファイルtest.imgをRAMディスク上に作成。
# RAMディスクはアクセスがSSD・HDDと比べて極めて速いので正確な書き込み性能を測れる。
sudo dd if=/dev/urandom of=tmpfs/test.img bs=32M count=128
sudo mkfs -t xfs /dev/sdb1
sudo mkfs -t xfs /dev/sdc1
sudo mount /dev/sdb1 sdb # HDDマウント
sudo mount /dev/sdc1 sdc # SSDマウント
sudo dd if=tmpfs/test.img of=sdb/test.img bs=4k oflag=direct
sudo dd if=tmpfs/test.img of=sdc/test.img bs=4k oflag=direct
# オプションの意味:
# bs=4kはセクタサイズの等倍になるようにして書き込みを高速化させるために指定。
# oflag=directはLinuxのキャッシュ無効化しディスクへの実際の書き込み速度を測定するために指定。
bcacheの性能測定
mkdir bcache
sudo mkfs -t xfs /dev/bcache0
sudo mount /dev/bcache0 bcache
sudo dd if=/dev/urandom of=tmpfs/test.img bs=32M count=128 iflag=fullblock
sudo dd if=tmpfs/test.img of=bcache/test.img bs=4k oflag=direct
結果
SSD:71.7 MB/s
HDD:40.2 MB/s
bcache:84.9 MB/s
考察
結果としてはHDD<SSD<bcacheの順に書き込み速度が速いという結果となった。
ただ、bcacheはSSDをキャッシュ化しているだけなのでSSDよりも速度が速くなっているのはたまたまであろう。
何度か繰り返せば同等程度になるのではないか。
おわりに
bcacheを用いることで、HDDの大容量とSSDの高速性を併せ持つブロックデバイスをUbuntu上で使えるようになった。
このデバイスをsambaやNFSでファイル共有して活用する予定だが、例えばキャッシュサイズよりも大きなサイズのファイルを配置した場合にどうなるかなど追加検証していく。