目次

32_1 SPDK(Storage Performance Development Kit)

Storage Performance Development Kit

tgt(32_CentOSでiSCSI環境構築)よりも良いパフォーマンスで動作します。

環境

CentOS7

参考ページ

https://software.intel.com/en-us/articles/accelerating-your-nvme-drives-with-spdk

1.事前準備

# sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
# systemctl status tgtd.service

2.Grubの用意

# vi /etc/default/grub

GRUB_CMDLINE_LINUX=の行末に追加
default_hugepagesz=1G hugepagesz=1G hugepages=4

保存後、grubに反映
# grub2-mkconfig -o /etc/grub2.cfg

3.必要なパッケージ追加

# yum -y install numactl-devel openssl-devel git

4.再起動

再起動後、設定変更を確認

# grep ^Huge /proc/meminfo 
HugePages_Total:       4
HugePages_Free:        3
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:    1048576 kB

5.SPDKのビルド

# cd /usr/src
# git clone https://github.com/spdk/spdk
# cd spdk
# git submodule update --init
# scripts/pkgdep.sh
# ./configure
# make

RDMAに対応

RDMA(Remote Direct Memory Access)
リモート先のメモリにCPUを介さず読み書き可能な規格。

参考サイト
https://metonymical.hatenablog.com/entry/2018/07/22/094004

./configure --with-rdma

6.モジュールのテスト

「All unit tests passed」表示でOK

./test/unit/unittest.sh
=====================
All unit tests passed
=====================
WARN: lcov not installed or SPDK built without coverage!
WARN: neither valgrind nor ASAN is enabled!

6.spdkのiscsi.confファイル設定

# cd /usr/src/spdk/app/iscsi_tgt
# vi iscsi.conf

[global]
 ReactorMask 0x1
 LogFacility "local7"

[iSCSI]
 NodeBase "iqn.2016-06.io.spdk"
 AuthFile /usr/local/etc/spdk/auth.conf
 MinConnectionsPerCore 1
 MinConnectionIdleInterval 5000
 Timeout 30
 DiscoveryAuthMethod Auto
 DefaultTime2Wait 2
 DefaultTime2Retain 60
 ImmediateData Yes
 ErrorRecoveryLevel 0

[Rpc]
 #AIO(Asynchronous I/O)が生成されなかったためRPCを有効化しています。
 Enable Yes
 Listen 127.0.0.1

[AIO]
 #追加した200GBのHDDを指定しています。   
 AIO /dev/sdb1 AIO0 512

[PortalGroup1]
 #自身のIPアドレス or 0.0.0.0:3260でも大丈夫です。
 Portal DA1 0.0.0.0:3260

[InitiatorGroup1]
 InitiatorName ANY
 #アクセス許可するNWアドレスを指定します。
 Netmask 192.168.11.0/24

[TargetNode1]
 TargetName disk1
 TargetAlias "Data Disk1"
 Mapping PortalGroup1 InitiatorGroup1
 AuthMethod Auto
 AuthGroup AuthGroup1
 UseDigest Auto
 #AIO0をLUN0としてTargetNodeを起動します。
 LUN0 AIO0
 QueueDepth 128

7.起動

# ./iscsi_tgt -c iscsi.conf
Starting SPDK v20.01-pre git sha1 f924c94 / DPDK 19.08.0 initialization...
[ DPDK EAL parameters: iscsi --no-shconf -c 0x1 --log-level=lib.eal:6 --log-level=lib.cryptodev:5 --log-level=user1:6 --base-virtaddr=0x200000000000 --match-allocations --file-prefix=spdk_pid44396 ]
app.c: 642:spdk_app_start: *NOTICE*: Total cores available: 1
reactor.c: 344:_spdk_reactor_run: *NOTICE*: Reactor started on core 0

シンプルなベンチマーク

OpneNebulaでVM作成して簡単にdbenchでベンチマーク

我が家の検証環境ではLVM, NFS に比べて、30%~40%ほどパフォーマンスが上がっていました。
ローカルディスクやHVでの結果にはさすがに及ばず。

vm Cent7 LVM
Throughput 334.049 MB/sec  4 clients  4 procs  max_latency=13.623 ms

vm Cent7 NFS
Throughput 389.693 MB/sec  4 clients  4 procs  max_latency=11.988 ms

vm Cent7 LVM(spdk)
Throughput 479.421 MB/sec  4 clients  4 procs  max_latency=12.321 ms

vm Cent7 System(local disk)
Throughput 655.964 MB/sec  4 clients  4 procs  max_latency=9.218 ms

HV
Throughput 1471.72 MB/sec  4 clients  4 procs  max_latency=1.655 ms