LVMでスナップショット取ったら遅くて速攻で止めた

自宅サーバのハードウェアRAIDがおかしくなったので、この機会にもうHDD何台も積んで電気食うの止めようと 6TB HDD 2台でLinuxのソフトウェアRAID-1でいいや！と割り切ったのですが、せっかくだから暗号化して、LVMでスナップショット取って、ボリューム・シャドウ・コピー・サービス（VSS）とか良くね？って思って、主に週末に作業してました。
結論から言って、凄く遅いし、LA上がりまくりで、スナップショットもすぐに埋まって意味なくなるのがわかり、ソフトウェアRAID-1と暗号化だけにしました。

#環境
####サーバ・スペック
- CPU: AMD PhenomII X4 955 3.2GHz(4core/TDP95W)
- M/B: ASRock 880G Pro3(SocketAM3+/880G+SB850)
- RAM: DDR3 32GB(8GBx4)

2011年3月発売なので7年も前の代物。しかし、KVM＋ファイルサーバとしてまだまだ現役です。（KVMのイメージはSSDに置いてます。）
mdadmで作ったRAID-1領域をcryptsetupで暗号化して、LVMで100GBくらい残して領域確保して、LVMスナップショットでVSSの設定をしました。しかし遅い。MP4の動画とかコピーすると体感で倍の時間かかり、サーバのLAが上がりっぱなしになります。

まずは、以下のように dd で書き込み試験をしてみました。

```
for i in [1] [2] [3] [4] [5] [6] [7] [8] [9] [10];do echo $'\n\n' $i;date;time dd if=/dev/urandom of=/home/data/test$i.dat ibs=1M obs=1M count=1024;sleep 120;sync;sleep 60;date;done
```
結果は

```
[raid1 + crypt + lvm + snap]
 1 279.275 s, 3.8 MB/s  real 4m39.282s  user 0m0.251s  sys 1m59.049s
 2 120.159 s, 8.9 MB/s  real 2m0.162s  user 0m0.238s  sys 1m59.808s
 3 226.536 s, 4.7 MB/s  real 3m46.538s  user 0m0.260s  sys 1m59.585s
 4 284.207 s, 3.8 MB/s  real 4m44.210s  user 0m0.244s  sys 1m58.830s
 5 240.122 s, 4.5 MB/s  real 4m0.125s  user 0m0.234s  sys 1m59.486s
 6 261.699 s, 4.1 MB/s  real 4m21.701s  user 0m0.237s  sys 1m59.860s
 7 227.461 s, 4.7 MB/s  real 3m47.464s  user 0m0.241s  sys 1m59.436s
 8 244.618 s, 4.4 MB/s  real 4m4.621s  user 0m0.248s  sys 1m59.056s
 9 121.658 s, 8.8 MB/s  real 2m1.661s  user 0m0.247s  sys 1m59.868s
10 217.984 s, 4.9 MB/s  real 3m37.987s  user 0m0.301s  sys 1m59.204s
```
遅い、遅すぎる・・・。書き込み中はLAも上がってしまってサーバ自体重くなります。
LVMスナップショットを止めて、同じくddでの書き込み測定をやってみました。

```
[raid1 + crypt + lvm]
 1 119.067 s, 9.0 MB/s  real 1m59.081s  user 0m0.215s  sys 1m58.512s
 2 122.628 s, 8.8 MB/s  real 2m2.631s  user 0m0.229s sys 1m58.270s
 3 119.039 s, 9.0 MB/s  real 1m59.042s user 0m0.254s sys 1m58.167s
 4 119.611 s, 9.0 MB/s  real 1m59.613s user 0m0.221s sys 1m58.512s
 5 118.525 s, 9.1 MB/s  real 1m58.528s user 0m0.232s sys 1m58.206s
 6 120.871 s, 8.9 MB/s  real 2m0.874s  user 0m0.242s  sys 1m59.507s
 7 122.434 s, 8.8 MB/s  real 2m2.437s  user 0m0.235s  sys 1m58.260s
 8 124.036 s, 8.7 MB/s  real 2m4.038s  user 0m0.229s  sys 1m59.001s
 9 119.162 s, 9.0 MB/s  real 1m59.165s  user 0m0.239s  sys 1m58.557s
10 121.49 s, 8.8 MB/s  real 2m1.493s  user 0m0.228s  sys 1m58.393s
```
はい、この通り、体感通り倍くらいの速度です。
ここで暗号化はどのくらい影響あるのか試してみました。暗号化を止め、同じdd測定。

```
[raid1 + ext4]
 1 119.743 s, 9.0 MB/s  real 1m59.766s  user 0m0.232s  sys 1m58.477s
 2 122.782 s, 8.7 MB/s  real 2m2.785s  user 0m0.236s  sys 1m58.307s
 3 120.476 s, 8.9 MB/s  real 2m0.479s  user 0m0.230s  sys 1m58.249s
 4 121.462 s, 8.8 MB/s  real 2m1.464s  user 0m0.217s  sys 1m58.448s
 5 120.578 s, 8.9 MB/s  real 2m0.581s  user 0m0.224s  sys 1m58.296s
 6 122.139 s, 8.8 MB/s  real 2m2.142s  user 0m0.247s  sys 1m58.068s
 7 118.998 s, 9.0 MB/s  real 1m59.001s  user 0m0.231s  sys 1m58.380s
 8 121.787 s, 8.8 MB/s  real 2m1.790s  user 0m0.242s  sys 1m58.527s
 9 119.572 s, 9.0 MB/s  real 1m59.574s  user 0m0.221s  sys 1m58.431s
10 119.16 s, 9.0 MB/s  real 1m59.163s user 0m0.222s  sys 1m58.250s
```
という感じで、暗号化あり・なしで書き込みのパフォーマンスはほとんど変わりありませんでした。
書き込み以外のパフォーマンスも調べたくなり bonnie++ をインストールして測定してみました。

```
bonnie++ -d /home/data -n 256:1024:1024:16 -u root
```
まずは、暗号化なしの状態。

```
Version  1.04       ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
kvm86        63960M 88530  96 101396  14 18853   5 44081  49 143398  18 452.9   3
                    ------Sequential Create------ --------Random Create--------
                    -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
files:max:min        /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
   256:1024:1024/16 47951  71 81102  40 21555  20 15672  23   309   0   473   0
kvm86,63960M,88530,96,101396,14,18853,5,44081,49,143398,18,452.9,3,256:1024:1024/16,47951,71,81102,40,21555,20,15672,23,309,0,473,0
```
次に、再びcryptsetupで暗号化した場合、

```
Version  1.04       ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
kvm86        63960M 77798  86 52299   6 16037   6 56891  66 144691  23 446.4   3
                    ------Sequential Create------ --------Random Create--------
                    -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
files:max:min        /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
   256:1024:1024/16 59118  87 58280  29 22944  22 15727  23   465   0   603   1
kvm86,63960M,77798,86,52299,6,16037,6,56891,66,144691,23,446.4,3,256:1024:1024/16,59118,87,58280,29,22944,22,15727,23,465,0,603,1
```
SequentialのBlockのOutputは半分くらいに落ち込んでますが、Sequential Inputはあまり変わりがなく、先ほどのddでの書き込み測定と一致しています。体感的に、それほど変わらないので暗号化して使うことにしました。