targetを構築しました。Install1-3.全体の構成RoCEv2のフレームをPcapしたかったためTargetとInitiatorの間にスイッチを挟んでいますが、DAS(直結)構成でも大丈夫です。Initiatorからのアクセス2.Kernelのアップグレード今回の構成ではRoCEv2を使用します。RoCEv2を使用する場合、Kernel4.5以上でないとサポートされないため、ELRepoから最新のKernelにアップグレードします。この作業はTargetおよびInitiatorの両方で行ってください。http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpmGPG-KeyとELRepoの登録を実施。再起動なお、Initiatorはここまでで完了です。Targetはspdkのビルドを行うため、この後のkernel-ml-develやkernel-ml-headersのインストールも行ってください。@elrepo-kernel上記のような出力になっていれば完了です。3.事前準備3-1.セキュリティ設定の無効化firewalldとSELinuxを無効化します。/etc/selinux/configで開いてSELINUX=disabledにして保存。devなどでMellanox製NICのデバイス名を確認の上、IPアドレスを設定してください。targetはRoCEv2で動作するため、NICにはIPアドレスが必要となります。必要とするようなのでインストール。reboot再起動後にHugePageを確認。kB4.SPDKのビルド4-1.gitインストールからspdkのビルドまで以下を流し込んでください。Targetと異なる点--with-rdmaは必須となります。nvmf_tgtを起動した際に「-L」オプションでDebugログが見れるようになるため、--enable-debugを追加しています。正常起動しているのか?固まっているのか?を見極めるためにも、あった方がいいかなと思います。4-2.unittest.shの実行ビルドが完了したら、最後に各モジュールのテストを実施してみてください。passed」と表示されればOKです。Warringが2件表示されてますが、気にせず先に進んでください。1ReactorMaskの掛け方は最後に詳細を記載したいと思います。わからなければ、コメントアウトしても問題ありません。970を使用したため、lspciで以下のようにgrepしました。function)番号が判明したら、頭にDomain番号「0000:」を付けてください。サンプルconfがspdk/etc/spdk/nvmf.conf.inにあるので、これをコピーしてnvmf.confを作成してもよいと思います。5-2.setup.shの起動カーネル上での制御からSPDK(正確にはDPDK)上での制御に移行します。ますはステータス確認から。Name現在はカーネル上のnvmeやioatdmaドライバで制御していることがわかります。オプション無しでsetup.shを実行すると、uio_pci_genericに移行します。uio_pci_generic以下のようになっていれば、OKです。Name5-3.Targetプログラムの実行/usr/src/spdkのパス上で以下を実行。dumped)初回起動時に赤文字のエラーを吐く場合は、一度サーバを再起動してみてください。targetは正常に起動できています。targetとは異なり、-b(バックグラウンド)オプションはないようです。Debugオプションを使用したい場合、まずは-Lに指定可能な引数を確認するため、-hオプションでnvmf_tgtを起動してあげてください。virtio_user)実際にDebugオプションを付けて起動した場合は、こんな感じです。このように起動した後、Initiatorからアクセスすると、Targetの動きがわかります。nvme_rdma上記のmodprobeが正常終了していれば、以下のように/dev/nvme-fabricsが追加されているハズです。status=0x0000Connect実施Initiator側iSCSIのときとは違い、Successなどは出力されません。4791Connect実施Target側Connectが完了すると、定期的にKeepaliveメッセージが流れます。status=0x0000上記InitiatorとTargetのやり取りをPcapしたファイルを以下にアップしておきます。Targetと同様に動作しますので、Initiator側でmkfsするなり、fioで速度測定するなりご自由にどうぞ。Driver)で専有させるCPUコアを明示的に指定するためのものです。socket上のCPUコアを明示的に指定することでパフォーマンスが向上します。このため、ReactorMaskでPMDが専有するCPUコアを明示的に指定することが重要となってきます。それでは、CPUコアを明示的に指定する方法を具体例を交えて解説します。intel_stibp今回使用したサーバ(DL360e)の場合、2ソケット、Hyperスレッド無し、4コアなので、トータル8コアあります。socketの割り当ては以下のようになっています。socket(node)0で動作していることがわかります。socket(node)0:0-3」となります。CPUコアの並び順は以下のようになっています。socket(node)0となります。ReactorMaskのうち、0x0Fを2進数に変換すると、以下のようになります。1111となり、ReactorMaskのうち「1」が立っているCPUがPMDに専有されます。考え方としては、SubnetMaskと同様ですね。101016進数0xAAとなります。8.補足その2:fioの実施結果fioを実施してみました。結果、10Gbpsをフルに使用したパフォーマンスを出してくれました。EVOのシーケンシャルリードの公称値が3400MBps(27.2Gbps)なので、Mellanox製NICがボトルネックとなっています。100GNICで試せたらいいなと考えています。util=99.76%1224MBps=9792Mbps9.最後に以下のサイトを参考にさせて頂きました。QiitakernelのBugにヒットした際、仕方なく4.17系でリビルドして何とかPcapに成功したのですが、リビルドの手順も合せてこのBlogに記載するのは本編からブレるため、4.18.4がリリースされるまで待ちました。予想以上に早くリリースして頂いたので、コミッターの方にはとても感謝しています。この記事によるとNVMe市場は2020年までに570億ドル(日本円で6兆円超)規模の市場になるらしいです。blog.calsoftinc.comなので、早めにキャッチアップ&修得しておいて損はない技術かなと思っています。以前FCoEの勉強をしていたため、RoCEは前々から気になっていました。Fabricの部分で残りそうな予感がしています。oEやoCEの部分では既に規格があります*7が、RoCEv2がいいかも?と思った点は、それに加えて、IP&UDPを乗せたところだと思っています。EthernetやIPの世界では既に400Gbpsのスイッチも市場に出始めていますし、100G×32ポート程度のスイッチであれば100万円ちょい&100GBase-SR4のQSFP28でも1万円ちょいで購入できます。このような状況を踏まえれば、EthernetやIPをFabricとして使用したとしても、高性能なNVMe対応ストレージに対して、充分な性能を担保できるのでは?と考えています。導入コストやスケーラビリティの点を含めて考えても、IBやFCと対等に渡り合えるのではないかと考えています。CLOSネットワーク上でRoCEv2を動作させて、障害時の切替検証や複数InitiatorからTargetへのアクセス時における負荷分散など、といったシチュエーションにおける最適なネットワーク設計を検討していきたいと考えています。*1:あえて、-yオプションを付けていません。万が一、4.18系Kernelで、4.18.4-1以前のバージョンだった場合、リポジトリからミラーサイトのURLを全て削除してください。4.18.1-1や4.18.3-1などの場合、uio_pci_genericのBugを踏むことになりTargetを起動できません。swapしますので、最新までアップデートしてください。*3:ここのパスが基点となります。追記すると、uioの代わりにvfio-pciで稼働するようになりますが、HPのアドバイザリにヒットしたため、今回はuio_pci_genericで行っています。Kernel4.18系のうち、4.18.3-1以前のバージョンの場合、uio_pci_genericに移行できず、空欄となるBugを踏むことになります。*5:setup.shの実行直後にlsblkを実行すると、nvmeはカーネルの制御から解放されているためlsblkでは見えなくなります。その後、Initiator側からConnectして、lsblkを実行すると、nvme0n1が見えるようになります。nodeと言ったりします。厳密には異なりますが、今回は同じ用語だと考えてください。Control)に加えて、SPB、TRILLなどがあります。小ネタ集その5:リポジトリの設定CentOS8のリポジトリ設定方法を記載します。月別アーカイブはてなブログをはじめよう!metonymicalさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。