====== 32_1 SPDK(Storage Performance Development Kit) ======
Storage Performance Development Kit
tgt([[01_linux:01_net: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
{{tag>iscsi}}