# 인텔® 이더넷 장치용 원격 직접 메모리 액세스(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 시리즈 기반 장치는 포트 수가 4개가 넘는 멀티 포트 모드에서 작동할 경우에는 RDMA를 지원하지 않습니다. Linux 시스템에서 RDMA 및 링크 집계(LAG, 본딩이라고도 함)는 대부분의 장치에서 호환되지 않습니다. RDMA가 활성화되면 본딩이 작동하지 않습니다. 인텔 이더넷 810 시리즈 장치에서 RDMA와 LAG는 다음 사항이 모두 충족될 경우 호환됩니다. RDMA 기술은 RoCEv2로 설정됩니다. LAG 구성은 활성 백업입니다. 본딩은 동일한 장치 내의 두 포트 간에 이루어집니다. 두 포트의 QoS 구성은 장치 본딩 전에 일치합니다.

## 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 라이브러리를 설치한 후 패치합니다. 정확한 단계는 운영 체제에 따라 달라집니다. 자세한 내용은 RDMA 드라이버의 README 파일을 참조하십시오.
4. 장치에서 흐름 제어를 활성화합니다. 자세한 내용 및 지원 모드는 기본 드라이버의 README 파일을 참조하십시오.
5. RoCE를 사용 중이라면 시스템이 연결된 장치 및 엔드포인트에서 흐름 제어(PFC 또는 LFC)를 활성화합니다. 자세한 내용은 스위치 설명서와 RDMA 사용 사례를 위한 인텔® 이더넷 800 시리즈 Linux 흐름 제어 구성 가이드(Linux의 경우)를 참조하십시오.

### Linux의 가상화된 환경을 위한 RDMA

인텔 이더넷 800 시리즈 기반 장치는 지원되는 Windows 또는 Linux 호스트의 Linux VF에서 RDMA를 지원합니다. Linux VF에서 RDMA를 로드하고 구성하는 방법에 대한 자세한 내용은 Linux RDMA 드라이버 tarball 내부에 있는 README 파일을 참조하십시오.

## Microsoft Windows의 RDMA

### ND(Network Direct) 사용자 모드 애플리케이션용 RDMA

ND(Network Direct)는 사용자 모드 애플리케이션에 의한 RDMA 기능 사용을 허용합니다.

| 참고: 사용자 모드 애플리케이션은 Microsoft HPC Pack 또는 Intel MPI Library와 같은 전제 조건을 가질 수도 있습니다. 자세한 내용은 애플리케이션 문서를 참조하십시오.

#### RDMA 사용자 모드 설치

Intel® Ethernet User Mode RDMA Provider는 Microsoft Windows Server 2012 R2 이상에서 지원됩니다.

사용자 모드 ND(Network Direct) 기능을 설치하려면 아래 단계를 따르십시오.

1. 설치 매체에서 Autorun.exe를 실행하여 설치 프로그램을 시작한 후 "Install Drivers and Software(드라이버와 소프트웨어 설치)"를 선택하고 라이센스 계약을 수락합니다.
2. Setup Options(설정 옵션) 화면에서 "Intel® Ethernet User Mode RDMA Provider"를 선택합니다.
3. 원하는 경우 RDMA Configuration Options(RDMA 구성 옵션) 화면에서 "Enable RDMA routing across IP Subnets(IP 서브넷에서 RDMA 라우팅 사용)"을 선택합니다. 이 옵션은 Network Direct Kernel 기능에도 적용될 수 있으므로 사용자 모드 RDMA가 선택되어 있지 않아도 기본 드라이버 설치 도중 표시된다는 점에 유의하십시오.
4. Windows 방화벽이 설치되어 있고 활성 상태이면 "Create an Intel® Ethernet RDMA Port Mapping Service rule in Windows Firewall(Windows 방화벽에서 인텔® 이더넷 RDMA 포트 매핑 서비스 규칙 만들기)"와 해당 규칙을 적용할 네트워크를 선택합니다.

   | 참고: Windows 방화벽이 비활성화되어 있거나 타사 방화벽을 사용 중이면 수동으로 이 규칙을 추가해야 합니다.

5. 드라이버 및 소프트웨어 설치를 진행하십시오.

### RDMA NDK(Network Direct Kernel)

RDMA NDK(Network Direct Kernel) 기능은 인텔 기반 네트워킹 드라이버에 포함되며 추가적인 기능을 설치할 필요가 없습니다.

#### IP 서브넷에서 RDMA 라우팅

서브넷에서 NDK의 RDMA 기능을 허용하려면 기본 드라이버 설치 중 RDMA Configuration Options(RDMA 구성 옵션) 화면에서 "Enable RDMA routing across IP Subnets(IP 서브넷에서 RDMA 라우팅 사용)"을 선택합니다.

### Microsoft Windows Server 운영체제에서 우선순위 흐름 제어(PFC) 활성화

드롭된 패킷으로 인한 성능 저하를 피하려면 모든 네트워크 인터페이스와 스위치에서 우선순위 흐름 제어(PFC) 또는 링크 수준 흐름 제어를 활성화합니다.

| 참고: Microsoft Windows Server 운영체제를 실행하는 시스템에서 *QoS/우선순위 흐름 제어를 활성화하면 링크 수준 흐름 제어가 비활성화됩니다.

다음 PowerShell* 명령을 사용하여 Microsoft Windows 서버에서 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`

네트워크 인터페이스가 RDMA를 지원하고 멀티채널이 활성화되어 있는지 확인하려면 다음 PowerShell 명령을 사용합니다.

`Get-SmbClientNetworkInterface`

Network Direct가 운영 체제에서 활성화되어 있는지 확인하려면 다음 PowerShell 명령을 사용합니다.

`Get-NetOffloadGlobalSetting | Select NetworkDirect`

각 RDMA 지원 네트워크 인터페이스가 포트 445에 리스너를 가지고 있는지 확인하려면 netstat를 사용합니다(RDMA를 지원하는 Windows Client OS가 리스너를 게시하지 않을 수도 있음). 예를 들면 다음과 같습니다.

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

### Windows의 가상화 환경용 RDMA

VMSwitch에 연결된 가상 어댑터에서 RDMA 기능을 활성화하려면 다음 단계를 따라야 합니다.

- 각 포트에서 SR-IOV(Single Root IO Virtualization) 및 VMQ(Virtual Machine Queues) 고급 속성을 활성화합니다.
- RDMA 기능으로 활성화할 VF 수를 설정합니다. RDMA 기능을 통해 최대 32개의 VF를 활성화할 수 있습니다.

어떤 경우에는 이러한 설정을 기본적으로 비활성화할 수도 있습니다. 이 옵션은 인텔® PROSet ACU의 Adapter Settings(어댑터 설정) 패널이나 어댑터 속성 대화 상자의 Advanced(고급) 탭에서 또는 다음 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에 대해 VM 네트워크 어댑터를 생성합니다.
   `Add-VMNetworkAdapter -VMName <vm_name> -VMNetworkAdapterName <device_name> -SwitchName <switch_name>`
7. 게스트 파티션에서 Microsoft Windows 10 Creators Update(RS2) 이상을 사용하려는 경우에는 호스트에서 다음 명령을 입력하여 VM Network Adapter에서의 RDMA 가중치를 설정하십시오.
   `Set-VMNetworkAdapterRdma -VMName <vm_name> -VMNetworkAdapterName <device_name> -RdmaWeight 100`
8. VM 네트워크 어댑터에서 SR-IOV 가중치를 설정합니다(참고: RdmaWeight를 0으로 설정하기 전에 SR-IOV 가중치를 0으로 설정해야 함).
   `Set-VMNetworkAdapter -VMName <vm_name> -VMNetworkAdapterName <device_name> -IovWeight 100`
9. VM에 PROSET Installer와 함께 VF 네트워크 어댑터를 설치합니다.
10. VM에서 PowerShell을 사용하여 VF 드라이버와 Hyper-V 네트워크 어댑터의 RDMA를 활성화합니다.
    `Set-NetAdapterAdvancedProperty -Name <device_name> -RegistryKeyword RdmaVfEnabled -RegistryValue 1`
    `Get-NetAdapterRdma | Enable-NetAdapterRdma`

### NDK용 RDMA 기능. 예: SMB Direct(Server Message Block)

NDK는 Windows 구성 요소(예: SMB Direct 스토리지)가 RDMA 기능을 사용할 수 있도록 지원합니다.

#### NDK 테스트: DiskSPD 포함 Microsoft Windows SMB Direct

이 섹션에서는 RDMA 테스트를 통해 인텔 이더넷 기능을 확인하는 권장 방법과 Microsoft Windows 운영 체제에서의 성능에 대해 간략히 설명합니다.

SMB Direct는 스토리지 워크로드이므로 벤치마크의 성능이 테스트 대상 네트워크 인터페이스가 아닌 스토리지 장치의 속도로 제한될 수도 있다는 점에 유의하십시오. 인텔에서는 테스트 대상 네트워크 장치의 진정한 성능을 테스트할 수 있도록 가능한 한 가장 빠른 스토리지를 사용하도록 권장합니다.

테스트 지침:

1. 적어도 하나의 RDMA 지원 인텔® 이더넷 장치가 서버에 있는 상태에서, 지원되는 Microsoft Windows 운영 체제가 실행되는 2개 이상의 서버를 설정하고 연결합니다.
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. Diskspd Microsoft 유틸리티를 https://gallery.technet.microsoft.com/DiskSpd-a-robust-storage-6cd2f223에서 다운로드해서 설치합니다.
4. CMD 또는 Powershell을 사용하여 DiskSpd 폴더로 이동하고 테스트를 실행합니다. (매개변수에 대한 자세한 내용은 Diskspd 문서를 참조하십시오)
   예: 블록 크기를 4K로 설정하고, 60초 동안 테스트를 실행하며, 모든 하드웨어 및 소프트웨어 캐싱을 비활성화하고 지연 시간 통계를 측정 및 표시합니다. 타겟당 16개의 오버랩된 IO 및 16개의 스레드를 활용하고, "\\<SMBserverTestIP>\<SMBsharename>\test.dat"에서 임의로 0% 쓰기 및 100% 읽기와 테스트 파일 10GB를 생성합니다.
   `.\diskspd.exe -b4K -d60 -h -L -o16 -t16 -r -w0 -c10G \\<SMBserverTestIP>\<SMBsharename>\test.dat`
5. RDMA 트래픽이 “RDMA Activity” 및 “SMB Direct Connection”과 같은 perfmon 카운터를 사용해서 실행되고 있는지 확인합니다. 자세한 내용은 Microsoft 문서를 참조하십시오.

## 고객 지원

- 기본 인텔 웹 지원 사이트: http://www.intel.com/p/ko_KR/support/
- 네트워크 제품 정보: https://www-ssl.intel.com/content/www/kr/ko/communications/network-transformation.html

## 법률 / 고지 사항

Copyright (C) 2019 - 2022, Intel Corporation. 모든 권한은 인텔사에 있습니다.

본 소프트웨어 및 관련 문서는 인텔에서 저작권을 보유한 자료이며, 이를 사용할 경우 귀하에게 제공된 명시적 라이선스(이하 "라이선스")가 적용됩니다. 라이선스에서 달리 규정하고 인텔의 사전 서면 허가가 없는 한 귀하는 본 소프트웨어 또는 관련 문서를 수정, 복사, 게시, 배포, 공개 또는 전송할 수 없습니다.

본 소프트웨어와 관련 문서는 라이선스에 달리 명시적으로 규정되지 않은 한 명시적 또는 묵시적 보증 없이 있는 그대로 제공됩니다.

인텔 기술은 지원되는 하드웨어, 소프트웨어 또는 서비스 활성화를 요구할 수 있습니다.

어떤 제품 또는 구성 요소도 절대적으로 안전할 수는 없습니다.

비용과 결과는 다를 수 있습니다.

인텔, 인텔 로고 및 기타 인텔 마크는 인텔사 또는 그 자회사의 상표입니다.

*기타 명칭 및 브랜드는 해당 소유주의 자산일 수 있습니다.