====== 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}}