大量の画像ファイルに対する zfs の圧縮効果

# Background
- RAID-Z でバックアップサーバを立てるとする
    - **zfs圧縮はどれくらい効果があるのか？**
    - **小さめの画像ファイルを大量にバックアップする** 

# Conclusion
- **あんま効果ない/大差ない**
    - 仮に使うなら、バランスの良さで `lz4`
    - 圧縮アルゴリズムと相性が良くない？
        - 圧縮アルゴリズムと、zfsの圧縮方法の理解が足りないのでは？？？？？
- 非力なマシンで RAID-Z を組むこと自体が間違いの可能性が十分にある
    - 実行時間も色んな要素を無視しているので参考程度 

# zfs Setup
- Orange Pi 3 LTS
    - Mem: 2G
- zfs
    - zfs.arc_max = 1G
    - RAID-Z
        - D4-300 (USB 3.0)
        - `MN08ACA16T-3YW` x3 

```zsh:/etc/os_release
Linux orangepi3-lts 5.19.4-sunxi64 #22.08.1 SMP Tue Aug 30 07:12:21 UTC 2022 aarch64 GNU/Linux
```

```zsh:uname -a
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
```

```zsh:zfs --version
zfs-2.1.5-1~bpo11+1
zfs-kmod-2.1.5-1~bpo11+1
```



# データセット
- Tw◯tter/P◯xiv 等から収集した画像ファイル
    - 総ファイル数：128,124
    - 合計サイズ：約 50 GB
        - 平均：362 KB

# zfs 作成
```zsh:zfs create
% sudo zfs create zpool/lz4     -o atime=off -o compress=lz4
% sudo zfs create zpool/gzip-1  -o atime=off -o compress=gzip-1
% sudo zfs create zpool/gzip-6  -o atime=off -o compress=gzip-6
% sudo zfs create zpool/gzip-9  -o atime=off -o compress=gzip-9
% sudo zfs create zpool/lzjb    -o atime=off -o compress=lzjb
% sudo zfs create zpool/zle     -o atime=off -o compress=zle
% sudo zfs create zpool/zstd-1  -o atime=off -o compress=zstd-1
% sudo zfs create zpool/zstd-7  -o atime=off -o compress=zstd-7
% sudo zfs create zpool/zstd-13 -o atime=off -o compress=zstd-13
% sudo zfs create zpool/zstd-19 -o atime=off -o compress=zstd-19
```

```zsh:zfs list
NAME            USED  AVAIL     REFER  MOUNTPOINT
zpool          2.55M  29.0T      170K  /zpool
zpool/gzip-1    128K  29.0T      128K  /zpool/gzip-1
zpool/gzip-6    128K  29.0T      128K  /zpool/gzip-6
zpool/gzip-9    128K  29.0T      128K  /zpool/gzip-9
zpool/lz4       128K  29.0T      128K  /zpool/lz4
zpool/lzjb      128K  29.0T      128K  /zpool/lzjb
zpool/zle       128K  29.0T      128K  /zpool/zle
zpool/zstd-1    128K  29.0T      128K  /zpool/zstd-1
zpool/zstd-19   128K  29.0T      128K  /zpool/zstd-19
zpool/zvol      128K  29.0T      128K  /zpool/zvol```
```

# bench
- TrueNAS から NFS マウント

```zsh
% sudo zsh -c 'time cp -r ***** /zpool/zvol'
cp -r ***** /zpool/zvol  8.84s user 363.36s system 13% cpu 45:56.67 total
```

# result
| 圧縮方式 | 圧縮率 | user [s] | system [s] | total [s] |
|:-:|:-:|:-:|:-:|:-:|
| OFF | 1.00x | 9 | 363 | 2,756 |
| gzip-1 | 1.13x | 9 | 379 | 4,425 |
| gzip-6 | 1.14x | 9 | 380 | 4,433 |
| gzip-9 | 1.14x | 9 | 382 | 4,831 |
| lz4 | 1.13x | 9 | 374 | 2,622 |
| lzjb | 1.11x | 9 | 374 | 2,706 | 
| zle | 1.13x | 9 | 379 | 2,593 | 
| zstd-1 | 1.13x | 9 | 390 | 2,451 | 
| zstd-19 | 1.14x | 10 | 397 | 22,166 |

```zsh:zfs list
NAME            USED  AVAIL     REFER  MOUNTPOINT
zpool           407G  28.6T      170K  /zpool
zpool/gzip-1   44.5G  28.6T     44.5G  /zpool/gzip-1
zpool/gzip-6   44.4G  28.6T     44.4G  /zpool/gzip-6
zpool/gzip-9   44.4G  28.6T     44.4G  /zpool/gzip-9
zpool/lz4      44.5G  28.6T     44.5G  /zpool/lz4
zpool/lzjb     45.4G  28.6T     45.4G  /zpool/lzjb
zpool/zle      44.8G  28.6T     44.8G  /zpool/zle
zpool/zstd-1   44.5G  28.6T     44.5G  /zpool/zstd-1
zpool/zstd-19  44.4G  28.6T     44.4G  /zpool/zstd-19
zpool/zvol     50.4G  28.6T     50.4G  /zpool/zvol
```

```zsh:zfs get compression
NAME           PROPERTY     VALUE           SOURCE
zpool          compression  off             default
zpool/gzip-1   compression  gzip-1          local
zpool/gzip-6   compression  gzip            local
zpool/gzip-9   compression  gzip-9          local
zpool/lz4      compression  lz4             local
zpool/lzjb     compression  lzjb            local
zpool/zle      compression  zle             local
zpool/zstd-1   compression  zstd-1          local
zpool/zstd-19  compression  zstd-19         local
zpool/zvol     compression  off             default
```

```zsh:zfs get compressratio
NAME           PROPERTY       VALUE  SOURCE
zpool          compressratio  1.11x  -
zpool/gzip-1   compressratio  1.13x  -
zpool/gzip-6   compressratio  1.14x  -
zpool/gzip-9   compressratio  1.14x  -
zpool/lz4      compressratio  1.13x  -
zpool/lzjb     compressratio  1.11x  -
zpool/zle      compressratio  1.13x  -
zpool/zstd-1   compressratio  1.13x  -
zpool/zstd-19  compressratio  1.14x  -
zpool/zvol     compressratio  1.00x  -
```