SSD を HDD のキャッシュにして使用

SSD を HDD のキャッシュにして使用します。

SSD を HDD のキャッシュにするソフト bcache のインストール

```bash
sudo apt install -y bcache-tools ;
````

起動ディスクの SSD をキャッシュとして使用する場合は gparted を CD に焼いてそちらから起動してパーティションを区切る必要があります。

gpartedのダウンロード
[GParted - Browse Files at SourceForge.net ](https://sourceforge.net/projects/gparted/files/)

書き込みソフト

```bash
sudo apt install -y brasero ;
````

作成したキャッシュ領域をまずは ext4 でフォーマットして作成
![Screenshot from 2021-03-07 05-06-41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/115935/b774c403-dbf6-4828-e09b-6b01aea312a7.png)
HDD のヘッダ情報の削除と SSD キャッシュと HDD のペアの作成

```bash
# hdd のヘッダを削除（中身消えます）
sudo wipefs -a /dev/sda6 ; # ssd キャッシュ
sudo wipefs -a /dev/sde  ; # hdd 中身消えます

# sda6 (ssdキャッシュ）を sde ( hdd ) に割り当てる
sudo make-bcache -C /dev/sda6 -B /dev/sde ; # sda6 は ssd キャッシュ sde は hdd
````
これで ssd と hdd がペアになった /dev/bcache0 が作成されます。

####ベンチマーク

ベンチマークのインストール

```bash
sudo apt install -y fio ;
````

fio.txt

````text:fio.txt
[global]
ioengine=libaio
iodepth=1
size=1g
direct=1
runtime=60
directory=${TARGET}
stonewall

[Seq-Read]
bs=1m
rw=read

[Seq-Write]
bs=1m
rw=write

[Rand-Read-512K]
bs=512k
rw=randread

[Rand-Write-512K]
bs=512k
rw=randwrite

[Rand-Read-4K]
bs=4k
rw=randread

[Rand-Write-4K]
bs=4k
rw=randwrite

[Rand-Read-4K-QD32]
iodepth=32
bs=4k
rw=randread

[Rand-Write-4K-QD32]
iodepth=32
bs=4k
rw=randwrite
````

ベンチマークの実行。$USERNAME と HDD の ID は適宜変えてください

```bash
TARGET=/media/$USERNAME/73ceda35-3266-433c-bf09-40fa0c9ed62c fio -f fio.txt --output-format=terse | awk -F ';' '{print $3, ($7+$48) / 1000}' ;
````

素のHDD

```bash
Seq-Read 178.907
Seq-Write 72.752
Rand-Read-512K 54.838
Rand-Write-512K 48.732
Rand-Read-4K 0.62
Rand-Write-4K 0.511
Rand-Read-4K-QD32 1.553
Rand-Write-4K-QD32 0.962
````

SSDキャッシュ化したもの

ベンチ実行コマンド

```bash
TARGET=/dev/bcache0 fio -f fio.txt --output-format=terse | awk -F ';' '{print $3, ($7+$48) / 1000}' ;
````

結果

```bash
Seq-Read 172.775
Seq-Write 69.341
Rand-Read-512K 48.664
Rand-Write-512K 45.524
Rand-Read-4K 0.574
Rand-Write-4K 0.478
Rand-Read-4K-QD32 1.532
Rand-Write-4K-QD32 0.935
````

なるべくキャッシュを効かせるために 0.0k を設定したもの

```bash
sudo gedit /sys/block/bcache0/bcache/sequential_cutoff ;
````

結果

```bash
Seq-Read 172.775
Seq-Write 67.053
Rand-Read-512K 198.481
Rand-Write-512K 46.018
Rand-Read-4K 1.125
Rand-Write-4K 0.492
Rand-Read-4K-QD32 2.889
Rand-Write-4K-QD32 0.933
````
設定が正しいのかわかりませんが、ランダムリードが早くなっています。

触感としては、設定を行うと HDD の中身が消えることと、HDD の数だけ SSD のキャッシュのパーティションを作成しないといけないのでなんだかイマイチな感じがします。。

Ubuntu には書き込みキャッシュの設定が disks から設定できるのでそちらのほうがいいような気もします。

####参考リンク
- [Linuxでディスクキャッシュとして使える「bcache」を試してみた - astamuse Lab ](https://lab.astamuse.co.jp/entry/2017/08/02/123000)
- [bcacheでSSDをキャッシュに使ってHDDアクセスを早くしてSSHD的なことをやる - それマグで！ ](https://takuya-1st.hatenablog.jp/entry/2017/03/06/192708)
- [bcacheを使ってSSDをキャッシュ化してみる - Qiita ](https://qiita.com/yamato225/items/6402439d71964580c3a2)
- [Ubuntu GParted その22 - パーティションの開始位置を再調整する・パーティションの開始位置が物理セクターの境界になっているか確認する - kledgeb ](https://kledgeb.blogspot.com/2013/07/ubuntu-gparted-22.html)
- [Ubuntu/ISOイメージをDVD,CDに書き込む方法・brasero - Linuxと過ごす ](https://linux.just4fun.biz/?Ubuntu/ISO%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E3%82%92DVD%2CCD%E3%81%AB%E6%9B%B8%E3%81%8D%E8%BE%BC%E3%82%80%E6%96%B9%E6%B3%95%E3%83%BBbrasero)
- [LinuxでもCrystalDiskMarkぽいディスクベンチマークしたい - 動かざることバグの如し]( https://thr3a.hatenablog.com/entry/20180804/1533378243)
- [bcacheを使ってSSDをキャッシュ化してみる - Qiita ](https://qiita.com/yamato225/items/6402439d71964580c3a2)
- [dm-cacheの技術概要と構築手順 - Qiita ](https://qiita.com/Kaz_K/items/395aa8bbabd5601b12a1)