COLUMN
【Alveoシリーズ第1回】NoLoad SmartSSDを使ってみた①
はじめに
この度、Eideticom社のNoLoad® SmartSSD® Computational Storage Drive (CSD)(以下、NoLoad)の評価版と、Samsung社 SmartSSD® CSD (Computational Storage Drive)(以下、SmartSSD)を使用する機会がありましたので、実際に使ってみて分かったことを記載します。NoLoadは、海外では既に販売が開始されており、日本国内でも近日中に販売が開始される予定です。FPGAを使用したソリューションとして、機能が分かりやすく即効性がある製品だと思います。
製品紹介
Eideticom社 NoLoad® SmartSSD® Computational Storage Drive (CSD)
NoLoadは、SmartSSDに統合可能な透過圧縮ソリューションです。データセンターインフラを高速化しながら、ストレージ容量を拡大することができます。使用するメリットは、以下の通りです。
-
ストレージ容量を最大10倍にできる
-
あらゆるアプリケーションで動作可能
-
ラインレートでのデータ圧縮
コスト削減に関するメリットが大きいことも特長です。NoLoadがデータを圧縮し、1TBあたりにストアできるデータ量を増やすことで、ストレージ容量コストが削減されます。また、NoLoadの圧縮率が高く、SmartSSDにインプットされる際のスループットが小さくなる為、1日当たりのドライブ書き込み量が減り、ストレージの物理的な動作期間を長くすることが期待できます。スループットのパフォーマンスにおいても、lz4-1の3~6倍、gzip-9の100倍CPU効率が良く、アプリケーションのパフォーマンスを更に向上できると言われています。以下、NoLoad関連のリンクです。
Samsung社 SmartSSD® CSD (Computational Storage Drive)
以下、NoLoadをSmartSSDに適用して動作させる為、SmartSSDについても簡単に紹介します。SmartSSD は、Samsung社製SSDと、XILINX社製FPGAが統合された製品です。普通のSSDと同じ様に使用できますが、FPGAをカスタマイズすることで、CPUに負荷をかけることなく、より高速なストレージアクセスを実現できます。ビッグデータ分析をはじめとした、大量のデータ処理を伴うデータセンターアプリケーションの高速化に効果的な製品です。Apache Sparkの高速化を行うソリューションなどが存在します。以下、SmartSSD関連のリンクです。
設置
インターフェース
SmartSSDのインターフェースはU.2です。変換コネクタを使用してPCIe(3.0以上)やM.2で接続することも可能です。今回はM.2接続を使用しました。
システム要件
NoLoad評価版のシステム要件は以下の通りです(TOP_READMEファイルから抜粋)。
-
8GB超のメモリマップドI/O
-
BIOSオプション:Above 4G decoding
-
電源供給:25W
-
Linux起動パラメータ:pci=assign-busses,hpbussize=4,realloc=on,hpmemsize=16G
-
Linux 64bit:
-
Ubuntu 16.04 18.04
-
CentOS 7.4 7.5 7.6 7.7
-
RHEL 7.4 7.5 7.6
-
-
Linuxカーネル 5.x (※)
(※)NoLoad評価版のソフトウェアをインストールすると更新されます。
設定、インストール
BIOS設定、Linux起動パラメータ設定や、NoLoadソフトウェアのインストールが必要ですが、基本的にインストールガイドやREADMEファイルに従って導入すれば、問題ないと思います。
使用方法
NoLoadは、SmartSSDを普通のファイルシステムとしてマウントした後に、更にNoLoadファイルシステム(nlfs)としてマウントする、という、重ね合わせてマウントする形式で使用します。まずはSmartSSDがデバイスとして認識されているか確認します。
$ sudo nvme list
Node SN Model
Namespace Usage Format FW Rev
—————- ——————– —————————————- ——— ————————– —————- ——–
/dev/nvme0n1 QAIA00AUxG0704F061C5 Eideticom NoLoad Accelerator 1 3.84 TB / 3.84 TB 512 B + 0 B 2.210329
SmartSSDが/dev/nvme0n1として認識されています。これを普通のファイルシステムとしてマウントします。
$ sudo mkfs.ext4 -E lazy_itable_init=0,lazy_journal_init=0 /dev/nvme0n1
$ sudo mount /dev/nvme0n1 /mnt/nvme
この時点で、/mnt/nvme にアクセスすれば、SmartSSDを普通のSSDとして使用できました。続いて、NoLoadファイルシステム(nlfs)としてマウントします。
$ sudo mount -t nlfs -o compress-dev=nvme0a2,decompress-dev=nvme0a3,p2pdma=both,odirect /mnt/nvme /opt/upper
これで、/opt/upperにファイルを保存すれば、NoLoadが自動的に圧縮を行います。透過的という言葉の通り、普通にファイル操作をするのと何ら変わりはありません。注意点ですが、この状態で下位のファイルシステム /mnt/nvme にもアクセスできてしまいます。NoLoadファイルシステムをマウントしたら、下位のファイルシステム /mnt/nvme に直接ファイルを保存するなどの操作はやめておきましょう。では早速、NoLoadファイルシステムにファイルをコピーします。
$ ls -l ~/testdata/1m.txt
-rw-rw-r–– 1 hogehogeo hogehogeo 1048576 9月 1 11:15 /home/hogehogeo/testdata/1m.txt
$ cd /opt/upper/
$ sudo cp ~/testdata/1m.txt .
$ ls -l ./1m.txt
-rw-r––r–– 1 root root 1048576 9月 1 11:27 ./1m.txt
無事コピーできました。ls -l コマンドでは、圧縮前のファイルサイズが表示されています。この辺も普通のファイルシステムと変わりありません。ただこれでは、圧縮後のファイルサイズが分かりません。圧縮後のファイルサイズを知る為には、du コマンドを使用します。
$ du -B1 ./1m.txt
393216 ./1m.txt
1Mのファイルが384Kに圧縮されました。圧縮率は37.5%です。なお圧縮後のファイルサイズですが、ls コマンドに -s オプションを付けて、ブロック数を表示する方法もあります。
$ ls -ls ./1m.txt
384 -rw-r––r–– 1 root root 1048576 9月 1 11:27 ./1m.txt
以上、NoLoadファイルシステムをマウントするだけで、普通のファイルシステムと同じ様に使用できて、なおかつ透過的に圧縮が行われることが分かりました。体感ですが、1Mのファイルのコピーは一瞬で終わり、特にストレスを感じることはありませんでした。
性能測定
NoLoad SmartSSDの実力を知る為に、簡単な性能測定を行います。
圧縮率
まず圧縮率を調査します。
テキストファイル
ちゃんと圧縮効果が出るように、なるべく自然言語で書かれたテキストファイルを使用します。今回は主に日本語の文章で構成されたxmlファイルを使用しました。ファイルサイズを1GB、10GB、100GBに変えながら、NoLoad SmartSSDとgzipコマンドのそれぞれで圧縮した際の平均圧縮率は以下の通りでした。
-
NoLoad SmartSSD:平均圧縮率 35.06%
-
gzipコマンド:平均圧縮率 31.03%
ソフトウェアでgzip圧縮する方が4%ほど圧縮率が良い結果になりました。ただ、単純な比較はできませんが、圧縮にかかる時間はNoLoad SmartSSDの方が圧倒的に短く、gzipコマンドが消費するCPUパワーやメモリ帯域がオフロードされることを考えると、NoLoad SmartSSDを使用するメリットは十分にあると思います。
バイナリファイル
念の為、以下のファイルについてもファイルサイズを変えながら数ファイル圧縮しましたが、ほとんど圧縮されませんでした。これはgzipコマンドも同様であり、ある程度予想していた通りの結果になりました。
-
動画ファイル:平均圧縮率98%
-
gzip圧縮ファイル(上で使用したテキストファイルをgzip圧縮したもの):平均圧縮率100%
IOPS、スループット
fioコマンドを使用して、IOPSやスループットを調査します。
設定
SmartSSDに対し、NoLoadあり(圧縮あり)とNoLoadなし(圧縮なし)でfioコマンドを実行し、結果を比較します。fioコマンドに与えるパラメータは、NoLoad評価版の動作確認用として付随してくるファイル:compression_1M_90.fio.txtを参考に、以下としました。
-
size=16G
-
runtime=300
-
direct=1
-
ioengine=libaio
-
buffer_compress_percentage=90
-
buffer_compress_chunk=16K
-
fallocate=none
上記設定で、bsとiodepthを変えながらfioコマンドを実行します。
結果
-
rw=randwrite
-
rw=write
-
rw=randread
-
rw=read
傾向を見る為グラフ化します。
-
rw=randwrite, write
IOPS
スループット
-
rw=randread, read
IOPS
スループット
なお、NoLoadあり(圧縮あり)で実行した場合、fio実行後に残るワークファイルの圧縮率は平均11.83%でした。実際にNoLand SmartSSDが圧縮・伸長処理を行ったうえでの結果と言えそうです。
傾向
-
write系
NoLoadあり(圧縮あり)の場合、iodepth=1の場合にIOPS、スループットともに落ち込んでいます。しかし、iodepthを大きくすると、NoLoadなし(圧縮なし)の性能に近づく傾向があります。書込み処理が並行して発生する状況下では、スループットの低下を抑え込めそうです。
-
read系
意外にも、IOPS、スループットともに、NoLoadあり(圧縮あり)の性能が高い結果でした。実際にストレージから読み込む量が小さいというアドバンテージに加え、FPGAによる伸長処理が高速、ということかもしれません。bsとiodepthが大きくなるほど、NoLoadあり(圧縮あり)の性能が高くなっています。
おわりに
NoLoad SmartSSDは、Ext4などの一般的なファイルシステムと同様にマウントして使用することが分かりました。ファイル操作方法は一般的なファイルシステムと同じである為、ファイルを使用するアプリケーションを変更する必要がありません。また、ファイルがSSD内に圧縮された状態で保存される為、実質的なディスク容量が増大します。
圧縮性能はgzipに近い性質を持っています。動画ファイルの圧縮には向きませんが、テキストファイルなどの圧縮に効果がある点もgzipと同様です。
書き込み時のスループットはSmartSSD単体で使用した時より落ちますが、同時書込み数が多い場合はSmartSSD単体で使用した時の性能と同等になります。読み込み時のスループットはSmartSSD単体で使用した時よりも高い結果となりました。
Xilinx社の製品はこちら
個別相談も承っております。下記よりお申し込みください。