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

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

- インテル® イーサネット 800 シリーズのデバイスは iWARP と RoCEv2 の両方をサポートします。
- インテル® イーサネット X722 シリーズのデバイスは iWARP のみサポートします。

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

RDMA 機能を備えたデバイスでは、RDMA は次のオペレーティング・システムでサポートされています。

- Linux*
- FreeBSD*
- VMware* ESXi*
- Microsoft* Windows Server*

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

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

## Linux* または FreeBSD* での RDMA

Linux* または FreeBSD* で RDMA をサポートするインテル® イーサネット・デバイスでは、次の表に示すドライバーを使用してください。

デバイス | Linux | FreeBSD | サポートされているプロトコル
--- | --- | --- | ---
ベースドライバー | RDMA ドライバー | ベースドライバー | RDMA ドライバー
インテル® イーサネット 800 シリーズ | ice | irdma | ice | irdma | RoCEv2、iWARP
インテル® イーサネット X722 シリーズ | i40e | irdma | ixl | iw_ixl | iWARP

##### 基本的なインストール手順

Linux* または FreeBSD* で RDMA をインストールおよび設定する一通りの手順は次のとおりです。詳細については、該当する RDMAドライバーの tarball 内の README ファイルを参照してください。

1. ベースドライバーをインストールします。
2. RDMA ドライバーをインストールします。
3. ユーザーモード RDMA ライブラリーをインストールし、パッチを適用します。正確な手順は OS によって異なります。詳細については、 RDMA ドライバーの readme を参照してください。
4. デバイスでフロー制御を有効にします。詳細とサポートされているモードについては、ベースドライバーの README を参照してください。
5. RoCE を使用している場合は、システムが接続されているデバイスとエンドポイントでフロー制御 (PFC または LFC) を有効にしてください。詳細については、スイッチのドキュメントを参照してください。Linux の場合は、RDMA 使用事例のためのインテル® イーサネット 800 シリーズ Linux* フロー制御構成ガイドを参照してください。

### Linux の仮想環境向け RDMA

インテル® イーサネット 800 シリーズ搭載デバイスは、対応する Windows* または Linux* ホスト上で Linux* VF の RDMA をサポートします。Linux* VF で RDMA をロードおよび構成する方法の詳細については、Linux* RDMA ドライバー tarball 内の README ファイルを参照してください。

## Microsoft* Windows* での RDMA

### 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"}`

### Windows* 仮想環境用の RDMA

VMSwitch 接続された仮想アダプターで RDMA 機能を有効にするには、以下を行う必要があります。

- 各ポートで SR-IOV (シングルルート I/O 仮想化) および VMQ (仮想マシンキュー) の詳細プロパティーを有効にします。
- RDMA 機能を有効にする VF の数を設定します。RDMA 機能により、最大 32 VF を有効にできます。

特定の状況下では、これらの設定をデフォルトで無効にすることができます。これらのオプションは、アダプターのプロパティー・ダイアログ・ボックスの [詳細設定] タブ内にあるインテル® PROSet ACU の [アダプターの設定] パネル、または次の PowerShell コマンドを使用して手動で設定できます。

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

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

`Set-NetAdapterAdvancedProperty -Name <nic_name> -RegistryKeyword RdmaMaxVfsEnabled -RegistryValue <1-32>`

### 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 つの RDMA 対応インテル® イーサネット・デバイスが必要です。
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 テストファイルを "\\<SMBserverTestIP>\<SMBsharename>\test.dat" に作成:
   `.\diskspd.exe -b4K -d60 -h -L -o16 -t16 -r -w0 -c10G \\<SMBserverTestIP>\<SMBsharename>\test.dat`
5. 「RDMA Activity」や「SMB Direct Connection」などの perfmon カウンターを使用して RDMA トラフィックが実行されていることを検証します。詳細については、Microsoft* のドキュメントを参照してください。

## カスタマーサポート

- インテルのサポート・ホームページ: http://www.intel.com/p/ja_JP/support
- ネットワーク製品情報: http://www.intel.com/network

## 法務情報 / 免責情報

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

インテルは、本書の記載内容の誤りや記入漏れについて、いっさい責任を負いません。また、その記載内容を更新することを約束するものでもありません。

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

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

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