ProxmoxVE 設定とベンチマーク結果まとめ（ディスク編）

→ 1.ディスク編
[2.メモリ編](https://qiita.com/disksystem/items/2eddffa21f02d5a6e511)

ProxmoxVEには無数の設定の組み合わせがあり、公式Wikiなどの情報からベストプラクティスが得られる。但しどの程度の差があるのか等の情報は見当たらないため、各種ベンチマーク結果を記事にしてみた。
## 前提
ゲストOSの再インストールが必要な設定変更の検証は行わない。
環境は以下の通り

| 項目                 | 内容                          | 
| -------------------- | ----------------------------- | 
| ProxmoxVE バージョン | 6.4-6                         | 
| マザーボード         | ASRock AB350 Pro4             | 
| CPU                  | AMD Ryzen 5 1600 Six-Core     | 
| メモリ               | 16GB                          | 
| グラフィックボード   | GeForce GTX 1050 Ti           | 
| SSD                  | Samsung SSD 750 120GB         | 
| HDD                  | WDC WD40EZRZ-00G              | 
| ネットワークカード   | Intel Corporation 82574L      | 
| ゲストOS             | Windows Server 2016 Essensial | 

その他、開始時の設定

* ファイルシステムはext4。relatime付き。barrier解除は行っていない。ファイルシステムを壊してしまったことがあったのでやめました。
* 各種Vertioドライバーはインストール済み
* ゲストマシン用に物理ストレージを別で用意している
* 仮想マシンのディスクイメージはraw。qcow2より10%高速とのこと

[qcaw2のパフォーマンスについて](https://pve.proxmox.com/wiki/Performance_Tweaks)

>Use raw disk image and not qcow2
>Consider using raw image or partition for a partition, especially with Microsoft SQL database files because qcow2 can be very slow under such type of load. 

## 結論
* キャッシュはHDDの場合、Write back
* キャッシュはSSDの場合、Write back(unsafe)
* SSDならSSD エミュレーションはON
* IO ThreadはON
* SCSIコントローラーはVirtio SCSI Single
* Barrier無効化は効果があるがリスク対効果を考えて設定

## 検証内容
Windows環境で各種ベンチマークソフトを動作させました。バックグラウンドで色々動作している可能性がありますので、ブレはあるかもしれません。

### ストレージ編
#### キャッシュの設定
公式WikiによるとUnsafeが最もパフォーマンスが良い
https://pve.proxmox.com/wiki/Performance_Tweaks
##### HDD
###### 既定（キャッシュなし）HDD
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65278/76611180-72cf-5920-96bc-a467096a1ccf.png" width=450 />
###### Direct sync HDD
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65278/915db512-ba6d-58d2-70a1-440b16c87945.png" width=450 />
###### Write through HDD
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65278/10fa8b5a-dc37-0142-271d-78496320171b.png" width=450 />
##### Write back HDD
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65278/ffd95e5f-4d38-9e1f-5766-0ff74dbd813f.png" width=450 />
##### Write back(unsafe) HDD
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65278/e5c6764c-cdfd-d0f3-dfce-ac24d284b7d6.png" width=450 />
--- 
##### SSD
###### 既定（キャッシュなし）SSD
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65278/ded1b7d1-71a3-3cfc-a27d-4a0d9b0746e3.png" width=450 />
##### Direct sync SSD
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65278/daafd961-dab5-59ce-5e45-aecc4d7fc460.png" width=450 />
##### Write through SSD
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65278/14d03975-084c-92a6-f036-683fd6f5b3ea.png" width=450 />
##### Write back SSD
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65278/84343e7c-629f-8808-e30f-9ce218857376.png" width=450 />
##### Write back(unsafe) SSD
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65278/d3796557-7113-4e55-e3c0-ab9206f28000.png" width=450 />
以降のベンチはWrite back(unsafe)で進めることにした
##### SSD エミュレーションを外した場合
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65278/8a026a8d-68b6-6d8d-8059-820524915c5c.png" width=450 />
劣化したので、以降のベンチはSSD エミュレーション有効に戻して実施
##### IO Threadを外した場合
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65278/21959b6b-15bc-2e66-0fb7-bc513d7eca9d.png" width=450 />
劣化したので、以降のベンチはIO Thread有効に戻して実施
##### SCSIコントローラーをVirtio SCSI SingleからVirtio SCSIへ変更した場合
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65278/8be63cac-bb9f-abdc-e68d-54fa4dad6a22.png" width=450 />
劣化したので、以降のベンチはVirtio SCSI Singleに戻して実施
##### ホスト側でext4のBarrierを無効化した場合
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65278/2548186b-b3cc-2bb8-3d12-6c9ff438f8ad.png" width=450 />
一部向上。リスクがあるが、Barrier=0で今後はベンチを進める

参考）Barrier解除の方法
fstabの各ディスクにoptionがあるので、「defaults,」の後ろあたりに追記する

```bash
vim /etc/fstab

UUID=e78ae19e-11d9-44b1-af70-2a9301ea5639 /mnt/ssd2 ext4 defaults,barrier=0,noatime,discard 0 0
```

ProxmoxVEのWikiによるとデフォルトの「キャッシュなし」はパフォーマンスと安全性のバランスに優れているとあるが、ベンチマークの結果を見るとWriteBackが良いのではないかと思う。
https://pve.proxmox.com/wiki/Performance_Tweaks#Disk_Cache