インテル® イーサネット・デバイス用 RDMA (リモート・ダイレクト・メモリー・アクセス)

リモート・ダイレクト・メモリー・アクセス (RDMA) は、ネットワーク・デバイスが別のシステムのアプリケーション・メモリーと直接データを転送できるようにすることで、特定のネットワーク環境でスループットを向上させ、レイテンシーを短縮します。

主な違いは、iWARP は TCP で RDMA を実行し、RoCEv2 は UDP を使用することです。

パケットのドロップによるパフォーマンスの低下を防ぐには、すべてのネットワーク・インターフェイスおよびスイッチでリンクレベルのフロー制御または優先度のフロー制御を有効にします。

注:

  • Microsoft* Windows Server* オペレーティング・システム実行しているシステムでは、*QoS/優先度のフロー制御を有効にすると、リンクレベルのフロー制御が無効になります。
  • インテル® イーサネット・コントローラー 800 シリーズベースのデバイスは、4 ポート以上のマルチポート・モードで動作している場合、RDMA をサポートしません。
  • Linux* システムでは、RDMA とボンディングに互換性はありません。RDMA が有効になっている場合、ボンディングは機能しません。

Linux* での RDMA

これらの基本的な Linux* RDMA インストール手順は、次のデバイスに適用されます。

インストールと設定の詳細は、RDMA 対応のインテル® イーサネット・デバイス用ドライバー tarball の Linux* RDMA ドライバー README ファイルに記載されています。

これは RHEL の例です。ご利用のオペレーティング・システムによっては細部が異なる可能性があります。

  1. RDMAドライバーの tarball を展開します。例:
    # tar zxf irdma-<x.x.x>.tar.gz
  2. RDMA PF ドライバーをインストールします。例:
    # cd irdma-<x.x.x>
    # ./build.sh
    # modprobe irdma
    NOTE: By default, the irdma driver is loaded in iWARP mode. It uses the devlink interface to enable RoCEv2 per port. To load all irdma ports in RoCEv2 mode, use the following:
    # modprobe irdma roce_ena=1
  3. 以前インストールされたバージョンの rdma-core をアンインストールします。
    # yum erase rdma-core
  4. GitHub* から rdma-core ライブラリー tarball をダウンロードします。例:
    # wget https://github.com/linux-rdma/rdma-core/releases/download/v27.0/rdma-core-27.0.tar.gz
    NOTE: Download the rdma-core version that matches the version of the libirdma patch file included with the driver. For example, libirdma-27.0.patch requires rdma-core-27.0.tar.gz.
  5. rdma-core の tarball を展開し、パッチを適用して spec ファイルのグループを変更します。例:
    # tar -xzvf rdma-core-<version>.tar.gz
    # cd rdma-core-<version>
    # patch -p2 <<path-to-component-build>/libirdma-<version>.patch
    # cd ..
    # chgrp -R root <path-to-rdma-core>/redhat
    # tar -zcvf rdma-core-<version>.tgz rdma-core-<version>
  6. rdma-core-intel ユーザー・スペース・ライブラリーをインストールします。例:
    # mkdir -p ~/rpmbuild/SOURCES
    # mkdir -p ~/rpmbuild/SPECS
    # cp rdma-core-<version>.tgz ~/rpmbuild/SOURCES/
    # cd ~/rpmbuild/SOURCES
    # tar -xzvf rdma-core-<version>.tgz
    # cp ~/rpmbuild/SOURCES/rdma-core-<version>/redhat/rdma-core.spec ~/rpmbuild/SPECS/
    # cd ~/rpmbuild/SPECS/
    # rpmbuild -ba rdma-core.spec
    # cd ~/rpmbuild/RPMS/x86_64
    # yum install *<version>*.rpm
  7. アダプターでフロー制御を有効にします。リンクレベルのフロー制御または優先度のフロー制御を有効にできますが、優先度のフロー制御を使用することを推奨します。フロー制御の詳細については、Linux* RDMA ドライバー README ファイルを参照してください。
  8. システムが接続されているスイッチでフロー制御を有効にします。詳細はスイッチのマニュアルでご覧ください。

FreeBSD* での RDMA

これらの基本的な FreeBSD* RDMA インストール手順は、次のデバイスに適用されます。

  1. ベースドライバーと RDMA ドライバーを展開します。例:
    # tar -xf ixl-<version>.tar.gz
    # tar -xf iw_ixl-<version>.tar.gz
  2. ベースドライバーをインストールします。例:
    # cd ixl-<version>/src directory
    # make
    # make install
  3. RDMA ドライバーをインストールします。例:
    # cd iw_ixl-<version>/src
    # make clean
    # make IXL_DIR=$PATH_TO_IXL/ixl-<version>/src
    # make install
  4. フロー制御を有効にします。
    # sysctl dev.ixl.<interface_num>.fc=3
  5. システムが接続されているスイッチでフロー制御を有効にします。詳細はスイッチのマニュアルでご覧ください。

インストールと設定の詳細は、RDMA 対応のインテル® イーサネット・デバイス用ドライバー tarball の FreeBSD* RDMA ドライバー README ファイルに記載されています。

Microsoft* Windows* Network Direct (ND) 用 RDMA ユーザーモードのアプリケーション

Network Direct (ND) はユーザーモードのアプリケーションで RDMA 機能を使用可能にします。

注: ユーザーモードのアプリケーションは、Microsoft* HPC Pack またはインテル® MPI ライブラリーなどで前提条件をもつことがあります。詳細については、アプリケーションのドキュメンテーションを参照してください。

RDMA ユーザーモードのインストール

インテル® イーサネット・ユーザー・モード RDMA プロバイダーは、Microsoft* Windows Server* 2012 R2 以降でサポートされています。

ユーザーモードの Network Direct 機能をインストールするには、以下の手順に従います。

  1. インストール・メディアで Autorun.exe を実行してインストーラーを起動して、[ドライバーとソフトウェアをインストールする] を選択し、ソフトウェア使用許諾契約に同意します。
  2. セットアップ・オプション画面で [インテル® イーサネット・ユーザー・モード RDMA プロバイダー] を選択します。
  3. RDMA 設定オプション画面で、希望する場合は [IP サブネット全体で RDMA ルーティングを有効にする] を選択します。このオプションは、Network Direct Kernel 機能にも適用可能なため、ユーザーモード RDMA が選択されていない場合でも、ベースドライバーのインストール中にこのオプションが表示されることに注意してください。
  4. Windows* ファイアウォールがインストールされ、アクティブになっている場合は、[Windows ファイアウォールにインテル® RDMA Port Mapping Service の規則を作成する] を選択するとその規則を適用するネットワークを選択します。

    注: Windows* ファイアウォールが無効になっている場合またはサードパーティーのファイアウォールを使用している場合は、この規則を手動で追加する必要があります。

  5. ドライバーとソフトウェアのインストールに進みます。

RDMA Network Direct Kernel (NDK)

RDMA Network Direct Kernel (NDK) 機能は、インテルベースのネットワークドライバーに含まれており、追加機能をインストールする必要はありません。

IP サブネット全体に渡る RDMA ルーティング

サブネット全体に渡って NDK の RDMA 機能を許可したい場合は、ベースドライバーのインストール中に RDMA 設定オプション画面で [IP サブネット全体で RDMA ルーティングを有効にする] を選択する必要があります。

Microsoft* Windows Server* オペレーティング・システムでの優先フロー制御 (PFC) の有効化

パケットのドロップによるパフォーマンスの低下を防ぐには、すべてのネットワーク・インターフェイスおよびスイッチでリンクレベルのフロー制御または優先フロー制御 (PFC) を有効にします。

注:Microsoft* Windows Server* オペレーティング・システムを実行しているシステムでは、*QoS/優先度のフロー制御を有効にすると、リンクレベルのフロー制御が無効になります。

次の PowerShell* コマンドを使用して、Microsoft* Windows Server* オペレーティング・システムで PFC を有効にします。

Install-WindowsFeature -Name Data-Center-Bridging -IncludeManagementTools
New-NetQoSPolicy "SMB" -NetDirectPortMatchCondition 445 -PriorityValue8021Action 3
Enable-NetQosFlowControl -Priority 3
Disable-NetQosFlowControl -Priority 0,1,2,4,5,6,7
New-NetQosTrafficClass -Name "SMB" -Priority 3 -BandwidthPercentage 60 -Algorithm ETS
Set-NetQosDcbxSetting -Willing $FALSE
Enable-NetAdapterQos -Name "Slot1 4 2 Port 1"

Microsoft* PowerShell* を使用した RDMA 操作の検証

次の Microsoft* PowerShell* コマンドを使用して、ネットワーク・インターフェイスで RDMA が有効になっているか確認できます:

Get-NetAdapterRDMA

次の PowerShell* コマンドを使用して、ネットワーク・インターフェイスが RDMA 対応でありマルチチャネルが有効になっているか確認できます:

Get-SmbClientNetworkInterface

次の PowerShell* コマンドを使用して、オペレーティング・システムで Network Direct が有効になっているか確認できます:

Get-NetOffloadGlobalSetting | Select NetworkDirect

Netstat を使用して、各 RDMA 対応ネットワーク・インターフェイスのポート 445 にリスナーがあることを確認します (RDMA をサポートする Windows* クライアント OS はリスナーをポストできない場合があります)。例:

netstat.exe -xan | ? {$_ -match "445"}

仮想環境の RDMA

VMSwitch に接続されている仮想アダプターで RDMA 機能を有効にするには、各ポートで SRIOV (シングルルート IO 仮想化) および VMQ (仮想マシンキュー) の詳細プロパティーを有効にする必要があります。特定の状況の下では、これらの設定がデフォルトで無効になっていることがあります。これらのオプションは、アダプターの [プロパティ] ダイアログボックスの [詳細設定] タブで手動で設定するか、次の Powershell* コマンドを使用して設定できます:

Set-NetAdapterAdvancedProperty -Name <nic_name> -RegistryKeyword *SRIOV -RegistryValue 1

Set-NetAdapterAdvancedProperty -Name <nic_name> -RegistryKeyword *VMQ -RegistryValue 1

RDMA ゲストサポートの設定 (NDK モード 3)

NDK モード 3 はカーネルモード Windows* コンポーネントが Hyper-V* ゲスト・パーティション内で RDMA 機能を使用できるようにします。インテル® イーサネット・デバイスで NDK モード 3 を有効にするには、次の手順に従ってください:

  1. システムの BIOS または UEFI で SR-IOV を有効にします。
  2. デバイスで SR-IOV 詳細設定を有効にします。
  3. 同じデバイスのすべての物理関数に対して次の手順を実行して、デバイスにバインドされている VMSwitch で SR-IOV を有効にします。
    New-VMSwitch -Name <switch_name> -NetAdapterName <device_name>
    -EnableIov $true
  4. "RdmaMaxVfsEnabled" 詳細設定を設定することにより、デバイス上の RDMA 仮想関数 (VF) の数を設定します。すべての物理関数を同じ値に設定する必要があります。この値はデバイス全体で RDMA を一度に実行できる仮想関数 (VF) の最大数です。さらに多くの仮想関数 (VF) を有効にすると、物理関数 (PF) と他の VF から RDMA リソースが制限されます。
    Set-NetAdapterAdvancedProperty -Name <device_name> -RegistryKeyword RdmaMaxVfsEnabled -RegistryValue <Value: 0 - 32>
  5. ホストですべての物理関数 (PF) アダプターを無効にして、それらを再度有効にします。これはレジストリーのキーワード “RdmaMaxVfsEnabled” が変更された場合、または VMSwitch を作成または破棄するときに必要です。
    Get-NetAdapterRdma | Disable-NetAdapter
    Get-NetAdapterRdma | Enable-NetAdapter
  6. RDMA VF サポートを必要とする仮想マシン用の VM ネットワーク・アダプターを作成します。
    Add-VMNetworkAdapter -VMName <vm_name> -VMNetworkAdapterName <device_name> -SwitchName <switch_name>
  7. ゲスト・パーティションで Microsoft* Windows* 10 Creators Update (RS2) 以降を使用する予定の場合は、ホストで次のコマンドを入力して、VM ネットワーク・アダプターに RDMA ウエイトを設定してください。
    Set-VMNetworkAdapterRdma -VMName <vm_name> -VMNetworkAdapterName <device_name> -RdmaWeight 100
  8. VM ネットワーク・アダプターで SR-IOV ウェイトを設定します (注:RDMA ウェイトを 0 に設定する前に SR-IOV ウェイトを 0 に設定する必要があります):
    Set-VMNetworkAdapter -VMName <vm_name> -VMNetworkAdapterName <device_name> -IovWeight 100
  9. VM の PROSET インストーラーを使用して VF ネットワーク・アダプターをインストールします。
  10. VM の PowerShell* を使用して、VF ドライバーと Hyper-V* ネットワークアダプターで RDMA を有効にします:
    Set-NetAdapterAdvancedProperty -Name <device_name> -RegistryKeyword RdmaVfEnabled -RegistryValue 1
    Get-NetAdapterRdma | Enable-NetAdapterRdma

SMB ダイレクト (サーバー・メッセージ・ブロック) など NDK 機能用の RDMA

NDK は、Windows* コンポーネント (SMB ダイレクト・ストレージなど) が RDMA 機能を使用できるようにします。

DiskSPD を使用して NDK:Microsoft* Windows* SMB ダイレクトをテストする

このセクションでは、インテルのイーサネット機能と、Microsoft* Windows* オペレーティング・システムでのパフォーマンスを調べるために推奨される RDMA のテスト方法を説明します。

SMB ダイレクトはストレージ・ワークロードなので、ベンチマークのパフォーマンスは、テストされるネットワーク・インターフェイスではなく、ストレージデバイスの速度に制限される可能性があります。テスト中のネットワーク・デバイスの真の性能をテストするために、インテルは可能な限り最速のストレージを使用することを推奨します。

テストの手順:

  1. サポートされている Microsoft* Windows Server* オペレーティング・システムを実行している少なくとも 2 台のサーバーをセットアップして、接続します。各サーバーに少なくとも 1 つの RDM 対応インテル® イーサネット・デバイスが必要です。
  2. SMB サーバーとして指定したシステムで、SMB 共有を設定します。ベンチマークのパフォーマンスは、テストされるネットワーク・インターフェイスではなく、ストレージデバイスの速度に制限される可能性があることに注意してください。ストレージのセットアップについては、本書では取り扱いませんん。次の PowerShell* コマンドを使用できます:
    New-SmbShare -Name <SMBsharename> -Path <SMBsharefilepath> -FullAccess <domainname>\Administrator,Everyone

    例:
    New-SmbShare -Name RAMDISKShare -Path R:\RAMDISK -FullAccess group\Administrator,Everyone

  3. 次のサイトから Microsoft* ユーティリティー Diskspd をダウンロードしてインストールします:https://gallery.technet.microsoft.com/DiskSpd-a-robust-storage-6cd2f223
  4. CMD または Powershell* を利用して DiskSpd フォルダーに cd を実行し、テストを実行します。(パラメーターの詳細については、Diskspd のドキュメンテーションを参照してください)

    例:ブロックのサイズを 4K に設定してテストを 60 秒間実行。すべてのハードウェアとソフトウェアのキャッシュを無効にし、レイテンシーの統計を測定・表示。ターゲットごとに 16 の重複した IO と 16 スレッドを活用し、ランダム 0% 書き込みおよび 100% 読み取りで 10GB テストファイルを “\\<SMBserverX722IP>\<SMBsharename>\test.dat” に作成:
    .\diskspd.exe -b4K -d60 -h -L -o16 -t16 -r -w0 -c10G \\<SMBserverX722IP>\<SMBsharename>\test.dat

  5. 「RDMA Activity」や「SMB Direct Connection」などの perfmon カウンターを使用して RDMA トラフィックが実行されていることを検証します。詳細については、Microsoft* のドキュメンテーションを参照してください。

カスタマーサポート

法務情報 / 免責情報

(C) 2019 - 2020, Intel Corporation.無断での引用、転載を禁じます。

Intel Corporation は本書に記載されている内容の誤りまたは記載漏れについて、一切責任を負いません。また、本書の記載内容を更新する義務も一切負いません。

Intel、インテルは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。

* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

本ソフトウェアはライセンスに基づいて提供されるものであり、そのライセンスの許諾範囲内でのみ使用または複製できます。本マニュアル内での情報は、あくまでも情報として提供するもので、予告なしに変更されることもあり、また、内容についても、インテルが責任を負うものではありません。本書の内容および本書の内容に関連して掲載されているソフトウェア製品の誤りに関して、インテルは一切の責任や義務を負いません。ライセンス契約で許可されている場合を除き、インテルからの書面での承諾なく、本書のいかなる部分も複製したり、検索システムに保持したり、他の形式や媒体によって転送したりすることは禁じられています。