オールフラッシュ・ストレージ 重複排除のメリット
 All Flash Array (AFA) / All Flash Storage

重複排除 (De-duplication) とは、重複データを自動的に検出して排除する技術のことです。

大容量のデータを如何にして効率よく保存するか。 これは多くの企業が抱える悩みの一つであり課題でもあります。

我々が社内のデスクワークで行うドキュメント作業においては、個々人がファイルを編集する前に、バックアップを取ることがルールとして決まっている場合や そうでなくても意識してバックアップを残しておくこともあります。

特に、複数メンバーでのプロジェクトではドキュメントを世代管理することが多く、これらのほとんどが重複データとなります。

メールで送信する添付ファイルについて考えてみましょう。

送る人はあまり意識してないかもしれませんが、ファイルを添付して、宛先 10 人に対してメールを送信した場合、ストレージの観点からすると宛先の数だけ重複データが生じます。 (このような問題を少しでも改善するために、多くの企業では宛先に直接ファイルを送るのではなく、Dropbox みたいに添付ファイルを一旦アップロードした上で、URL からダウンロードできるようにシステムを構築することが多い)

こうやって知らぬ間に蓄積されるデータに重複が多いのも事実で、これがドキュメントとかメールではなく、仮想環境の話になると。

仮想環境ではクローン作成 (仮想マシンの複製)、テンプレートによる仮想マシン作成、仮想マシンバックアップ 等、仮想マシンあたりのデータの単位は軽く数十 GB になります。

重複排除のメリットがなければ、ほぼ 2倍以上のストレージ容量が消費されることになるので、仮想環境において重複排除は無視できません。

飛躍的に増大するビジネスデータにより、比例的に増加するストレージコスト (買い足し) / IT 予算を抑える手段が必要となり、開発されたのが重複排除という記述です。

すなわち、重複排除を活用することによって、重複データを無くすと共に、ストレージのデータ容量削減とコスト削減を実現できます。

ファイルシステムのブロックサイズ確認

固定長サイズでの I/O の場合、その最小単位のサイズをブロックサイズと呼びます。

ストレージ製品によっては、重複排除の要件が異なり、ブロックサイズ 4KB や 8KB 固定長ブロックに対応 (この長さでデータを処理) している製品もあれば、最近では仮想環境に特化された可変長ブロックに対応している製品もあります。

こうなると自分が使っている環境は果たしてどうなのか確かめたくなります。

EXT4 ファイルシステムのブロックサイズ確認

CentOS 6 までは、EXT2 / EXT3 / EXT4 が標準ファイルシステムとして採用されているため、これらのファイルシステムのパラメータ変更ツール tune2fs (または dumpe2fs) を使えば、ブロックサイズを確認することができます。

CentOS 6 : EXT4
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# df -hT
Filesystem    Type    Size  Used Avail Use% マウント位置
/dev/mapper/vg_kcdspfdev-lv_root
              ext4     32G   16G   14G  54% /
tmpfs        tmpfs    1.9G     0  1.9G   0% /dev/shm
/dev/sda1     ext4    485M   59M  401M  13% /boot

# blkid
/dev/mapper/vg_kcdspfdev-lv_root: UUID="42142b78-dc95-4802-afed-b1714017a823" TYPE="ext4"
/dev/sda1: UUID="f9f55129-41cd-45b2-a62e-8227a5fcad21" TYPE="ext4"
/dev/sda2: UUID="fkRhbs-hpyn-haNS-9Zgb-DeRP-8Oje-1tGOG5" TYPE="LVM2_member"
/dev/mapper/vg_kcdspfdev-lv_swap: UUID="77ede27e-3a12-42a2-bcad-54792008150a" TYPE="swap"

# tune2fs -l /dev/mapper/vg_kcdspfdev-lv_root
tune2fs 1.41.12 (17-May-2010)
Filesystem volume name:   <none>
Last mounted on:          /
Filesystem UUID:          42142b78-dc95-4802-afed-b1714017a823
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              2068528
Block count:              8259584
Reserved block count:     412979
Free blocks:              4140629
Free inodes:              296112
First block:              0
Block size:               4096
Fragment size:            4096
Reserved GDT blocks:      1022
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         8176
Inode blocks per group:   511
Flex block group size:    16
Filesystem created:       Wed Jun 12 15:23:05 2013
Last mount time:          Wed Aug  1 13:38:41 2018
Last write time:          Tue Jul  3 01:00:28 2018
Mount count:              27
Maximum mount count:      -1
Last checked:             Wed Jun 12 15:23:05 2013
Check interval:           0 (<none>)
Lifetime writes:          600 GB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:               256
Required extra isize:     28
Desired extra isize:      28
Journal inode:            8
First orphan inode:       1843112
Default directory hash:   half_md4
Directory Hash Seed:      af1c626b-b89d-4962-8432-77ac80580d41
Journal backup:           inode blocks

XFS ファイルシステムのブロックサイズ確認

それに対して、CentOS 7 の標準ファイルシステムである XFS は そもそも tune2fs が使えない (line 17~20) ため、代わりに xfs_info でブロックサイズを確認します。

CentOS 7 : XFS
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# df -hT
Filesystem          Type      Size  Used Avail Use% Mounted on
/dev/mapper/cl-root xfs        35G  2.0G   34G   6% /
devtmpfs            devtmpfs  990M     0  990M   0% /dev
tmpfs               tmpfs    1001M     0 1001M   0% /dev/shm
tmpfs               tmpfs    1001M   33M  968M   4% /run
tmpfs               tmpfs    1001M     0 1001M   0% /sys/fs/cgroup
/dev/sda1           xfs      1014M  122M  893M  12% /boot
tmpfs               tmpfs     201M     0  201M   0% /run/user/1000

# blkid
/dev/sda1: UUID="ed16ff2f-9a6e-4509-8adb-e97ee996e690" TYPE="xfs"
/dev/sda2: UUID="FvB1fT-9w4P-hJ6I-FFCD-8DGk-Ws7g-eyV1Rq" TYPE="LVM2_member"
/dev/mapper/cl-root: UUID="1e288763-f149-48f3-84ed-b18dad57e241" TYPE="xfs"
/dev/mapper/cl-swap: UUID="2c7fb8df-95c3-45e2-a2e4-9e6a282dc4a2" TYPE="swap"

# tune2fs -l /dev/mapper/cl-root
tune2fs 1.42.9 (28-Dec-2013)
tune2fs: Bad magic number in super-block while trying to open /dev/mapper/cl-root
Couldn't find valid filesystem superblock.

# xfs_info /dev/mapper/cl-root
meta-data=/dev/mapper/cl-root    isize=512    agcount=4, agsize=2293504 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=9174016, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=4479, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

終わりに

今の時代は仮想化の進行により、OS もファイルシステムも異なる仮想マシンが混在する環境上で、これらの仮想マシンがストレージシステムを使うことになります。

また、各仮想マシンが同じファイルシステムを使っているとは限らない。 こういったワークロードが混在する状況の中で、ゲスト OS からの書き込みブロックサイズが必ずしも一定とは限りません。

ブロックサイズは 重複排除だけでなく IOPS とも関係があり、ストレージが処理できるブロック長に対して、それより大きいサイズのデータが書き込まれたりると IO が何回も繰り返して処理されるため、1つの IO に対して倍以上の無駄な IO が発生することにより、パフォーマンスが低下するというケースもしばしばあります。

HDD から SSD に変わっただけでパフォーマンスは十分向上しますが、オールフラッシュだからといって万能ではないので、各仮想環境に適したストレージを選定することとその性能を最大限に発揮させるための設計も大事ではないかと。

以上、ALL SSD 重複排除のメリットと File System のブロックサイズ確認 でした。