2018年1月11日

皆さま、初めまして。
ブロードバンドタワーでIsilonとScalityのサポートを担当している二村と申します。

今回はDell EMC Isilon(以下Isilon)のpacking機能についてご紹介をしたいと思います。
まずはその前にIsilonの簡単な説明となりますが、こちらは弊社で取り扱っておりますスケールアウト型のNAS製品となります。
Isilonはノードと呼ばれる専用のハードウェアを複数台組み合わせて、一つのクラスタとして構成されます。
クライアントからIsilonに書き込んだデータは、保護レベルに沿って各ノードにストライピングされます。
ただし、OneFSファイルシステムのブロック長は8KBとなる為、8KB未満のファイルはブロック長である8KB全体が使用されます。
また、128KB未満のファイルはストライピングではなくミラーリングとなります。
その結果、当初想定していた実効容量よりも少ないなと思ってしまう場合があります。

例えば今回の検証の環境ではノード3台でN+2d:1nという保護レベルを適用させています。
これはノードを跨ぐ2ドライブの障害もしくは、1ノードの障害までデータが保護できるというものになります。
また、512KB、1KBのデータをIsilonにそれぞれ書き込んだ場合、以下のようにデータが保護されます。


では、以下のような場合はどうでしょうか?

上記の通り同じ1GBでも小さなサイズのファイルが多ければ多いほど、ミラーリングのオーバーヘッドの影響受けやすく
小さいサイズのファイルを大量に取り扱うような環境下では顕著に差が表れるかと思います。

今回はこの小さなファイルをコンテナ化してファイル使用量のオーバーヘッドをして解消してくれる、packing機能の設定手順とその効果について簡単にご紹介をしたいと思いますが、まずはその前に本機能を利用するにあたってはいくつかの注意事項があり、その中でも重要なポイントを簡単にまとめさせて頂きます。

・OneFS8.0.1.0以降で利用可能
・どのような環境にも導入できるというわけではなく、PACS(Picture Archiving and Communication Systems)等のHealth Care用途限定
・データの使用効率を高めることは可能な半面、Isilonのパフォーマンス低下を招く可能性がある事を導入前に考慮する必要がある
といったものになります。

続いてはpacking機能の検証についての検証手順とその結果です。

○環境
・OneFS 8.0.1.0
・ノード3台構成(保護レベルはN+2d:1n)

○設定手順
1. packing機能の有効化
デフォルトではpacking機能は無効になっている為、まずはpacking機能を有効化します。

test-8010-1# isi_packing --enabled=true
WARNING: Modifying packing variables may adversely affect the
performance of OneFS.
Are you sure? (yes/[no]): yes
I have read and agree to be bound by the terms and conditions of the EULA. I
represent that I am authorized to legally bind the entity licensing this
software. ? (yes/[no]): yes

以下のようにEnabledがYesになればpacking機能の利用が可能です。

test-8010-1# isi_packing --ls
Enabled: Yes
Enable ADS: No
Enable snapshots: No
Enable mirror containers: No
Enable mirror translation: No
Unpack recently modified: No
Unpack snapshots: No
Avoid deduped files: Yes
Maximum file size: 1016.0k
SIN cache cutoff size: 8.00M
Minimum age before packing: 1D
Directory hint maximum entries: 16
Container minimum size: 1016.0k
Container maximum size: 1.000G

ただし、デフォルト設定ではMinimum age before packingが1D、つまりファイルを作成してから1日経過しないとpackingの対象となりません。
検証ということもあり今回はこのパラメーターを1D(日)から1s(秒)に変更します。

test-8010-1# isi_packing --min-age=1s                                                                                                                                                                                                      
WARNING: Modifying packing variables may adversely affect the
performance of OneFS.
Are you sure? (yes/[no]): yes

test-8010-1# isi_packing --ls
Enabled: Yes
Enable ADS: No
Enable snapshots: No
Enable mirror containers: No
Enable mirror translation: No
Unpack recently modified: No
Unpack snapshots: No
Avoid deduped files: Yes
Maximum file size: 1016.0k
SIN cache cutoff size: 8.00M
Minimum age before packing: 1s
Directory hint maximum entries: 16
Container minimum size: 1016.0k
Container maximum size: 1.000G

2. File Pool Policyの作成
次にどのファイルをpacking対象にするかの設定を行うのですが、IsilonではFile Pool Policyという機能を使います。
packingする対象の判断基準としては、ファイル名、ファイルサイズ等のように様々な条件を選ぶことが可能ですが
今回は/ifs/packingというディレクトリ配下にある全てのファイルを対象とする条件でPolicyを作成します。

# isi filepool policies create --name=test --enable-packing=true --begin-filter --path=/ifs/packing --end-filter

3. テスト用ファイルの作成
先ほどのFile Pool Policyで設定をした/ifs/packingディレクトリ配下に1KBのファイルを100個作成します。

# cd /ifs/packing
# for count in `echo {1..100}` ; do dd if=/dev/zero of=testfile"$count" bs=1024 count=1 ; done
1+0 records in
1+0 records out
1024 bytes transferred in 0.000187 secs (5462674 bytes/sec)
1+0 records in
1+0 records out
1024 bytes transferred in 0.000263 secs (3900462 bytes/sec)
1+0 records in
1+0 records out
1024 bytes transferred in 0.000300 secs (3416875 bytes/sec)
1+0 records in
1+0 records out
1024 bytes transferred in 0.000283 secs (3621100 bytes/sec)
1+0 records in
1+0 records out
-------snip

はい、できてますね。

test-8010-1# ls -la
total 2588
drwxrwxrwx 2 root wheel 2792 Nov 20 15:48 .
drwxrwxrwx 6 root wheel 98 Nov 20 15:47 ..
-rw-r--r-- 1 root wheel 1024 Nov 22 10:54 testfile1
-rw-r--r-- 1 root wheel 1024 Nov 22 10:54 testfile10
-rw-r--r-- 1 root wheel 1024 Nov 22 10:54 testfile100
-rw-r--r-- 1 root wheel 1024 Nov 22 10:54 testfile11
-rw-r--r-- 1 root wheel 1024 Nov 22 10:54 testfile12
-rw-r--r-- 1 root wheel 1024 Nov 22 10:54 testfile1
-------snip

1KBのファイルが100個ありますので、一般的なファイルシステムであればこのディレクトリ(/ifs/packing)内の総ファイル容量は100KB(1KB×100)となりますが
最初のご紹介にも記載させて頂きました通り、128KB以下のファイルはミラーリングされます。また、ファイルシステムのブロック長は8KBとなる為
実際には以下のように実サイズよりもかなり大きくなってしまいます。

test-8010-1# du -ah
-------snip
26K ./testfile69
26K ./testfile48
2.5M .

1KB×*8(ブロック長)*3(ミラー数)*100(ファイル数)=およそ2.5M

4. packing用のポリシーの適用
作成したPolicyを適用させる為に、SmartPoolsというジョブを実行します。

# isi job jobs start SmartPools
Started job [12]

5. ジョブの実行結果の確認
今回適用させたPolicy(test)のFiles packedが100となっており、作成したファイル数と一致している事が確認できました。

test-8010-1# isi job reports view -v 12

-------snip
'test':
{'Policy Number': 0,
'Files matched': {'head':100, 'snapshot': 0},
'Directories matched': {'head':2, 'snapshot': 0},
'ADS containers matched': {'head':0, 'snapshot': 0},
'ADS streams matched': {'head':0, 'snapshot': 0},
'Access changes skipped': 0,
'Protection changes skipped': 0,
'Packing changes skipped': 0,
'File creation templates matched': 0,
'Skipped packing non-regular files': 1,
'Skipped packing regular files': 0,
'Files packed': 100,
'Files repacked': 0,
'Files unpacked': 0,
},
}
-------snip

6. ファイルサイズの確認
以下の結果からファイルサイズ、ディレクトリ総容量がpackingする前と比べるとおよそ30%程になっている事がわかります。ただし、こちらは構成(保護レベルやファイルサイズ等)に依存する部分がありますので、必ずしも同様の結果になるとは限りませんのでご注意ください。

test-8010-1# du -ah
-------snip
9.5K ./testfile69
9.5K ./testfile48
984K .

○まとめ
今回は1KBのファイルを100個という環境で試しましたが、数千万の小さなファイルを取り扱うようなPACS環境であった場合
Isilonのデータ使用効率を大幅に上げる事ができます。


・ノード3台構成の保護レベルはN+2d:1n(つまり今回の検証環境と同一の場合)
・1KBのファイルが10,000,000(1千万)

packing無効
1KB×*8(ブロック長)*3(ミラー数)*10,000,000(ファイル数)=およそ261GB

packing有効
1KB×*8(ブロック長)*3(ミラー数)*10,000,000(ファイル数)*0.3=およそ78GB

以下、Dell EMC社が公開しているpacking機能に関してのホワイトペーパーです。機能の詳細はこちらにございますので、ご参考までに記載させていただきます。

https://www.emc.com/collateral/whitepaper/h15459-onefs-pacs-storage-efficiency.pdf

また、本機能についてご興味ありましたら遠慮なくお問い合わせください。

本ブログの情報につきましては、自社の検証に基づいた結果からの情報提供であり、
品質保証を目的としたものではございません。

投稿者: FutamuraRyo

ブロードバンドタワーでIsilonとScalityのサポートを担当しています。