영구 메모리 이해 및 배포
적용 대상: Azure Stack HCI, 버전 22H2 및 21H2; Windows Server 2022, Windows Server 2019, Windows Server 2016, Windows 10
Important
Azure Stack HCI는 이제 Azure Local의 일부입니다. 제품 설명서 이름 바꾸기가 진행 중입니다. 그러나 이전 버전의 Azure Stack HCI(예: 22H2)는 Azure Stack HCI를 계속 참조하며 이름 변경 내용이 반영되지 않습니다. 자세히 알아보기.
영구 메모리(또는 PMem)는 전원 주기를 통해 콘텐츠를 유지하고 최상위 스토리지로 사용할 수 있는 새로운 유형의 메모리 기술이므로 사람들이 PMem을 "스토리지 클래스 메모리" 또는 SCM이라고 부르는 것을 들을 수 있습니다. 이 문서에서는 영구 메모리에 대한 배경을 제공하고 Azure Stack HCI 및 Windows Server에서 최상위 스토리지 계층으로 배포하는 방법을 설명합니다.
영구 메모리란?
영구 메모리는 표준 DIMM(메모리) 슬롯에 맞는 비휘발성 미디어의 유형입니다. DRAM보다 느리지만 SSD 및 NVMe보다 높은 처리량을 제공합니다. DRAM에 비해 영구 메모리 모듈은 훨씬 더 큰 용량으로 제공되며 GB당 비용이 저렴합니다. 그러나 여전히 NVMe보다 비용이 더 많이 듭니다. 예기치 않은 전원 손실, 사용자가 시작한 종료 또는 시스템 작동 중단 시 시스템 전원이 꺼지는 경우에도 메모리 콘텐츠가 유지됩니다. 즉, 영구 메모리 모듈을 초고속 영구 스토리지로 사용할 수 있습니다.
Azure Stack HCI 및 Windows Server 2019는 영구 메모리를 캐시 또는 용량 드라이브로 사용할 수 있습니다. 그러나 가격 책정 모델을 고려할 때 영구 메모리는 메모리 매핑 데이터에 대한 캐시 또는 소량의 전용 스토리지로 가장 많은 값을 제공합니다. 대부분의 경우 영구 메모리 드라이브는 캐시 드라이브로 자동으로 사용되며 더 느린 모든 드라이브는 용량 드라이브로 사용됩니다. 캐시 및 용량 드라이브를 설정하는 방법에 대한 자세한 내용은 스토리지 풀 캐시 및 계획 볼륨 이해를 참조하세요.
영구 메모리 개념
이 섹션에서는 I/O 병목 상태를 줄이고 성능을 개선하기 위해 Windows Server 및 Azure Stack HCI 환경에 영구 메모리를 배포하기 위해 이해해야 하는 기본 개념을 설명합니다.
액세스 방법
영구 메모리에 액세스하는 방법에는 두 가지가 있습니다. 화면은 다음과 같습니다.
- 앱 호환성을 위해 스토리지처럼 작동하는 액세스를 차단합니다. 이 구성에서 데이터는 정상적으로 파일 시스템 및 스토리지 스택을 통해 흐릅니다. 이 구성을 NTFS 및 ReFS와 함께 사용할 수 있으며 대부분의 사용 사례에 권장됩니다.
- 메모리처럼 작동하여 대기 시간이 가장 짧은 DAX(직접 액세스)입니다. NTFS와 함께 DAX만 사용할 수 있습니다. DAX를 올바르게 사용하지 않으면 데이터가 손실될 가능성이 있습니다. 조각난 쓰기의 위험을 완화하기 위해 BTT(블록 변환 테이블)가 켜져 있는 DAX를 사용하는 것이 좋습니다. 자세한 내용은 DAX 이해 및 구성을 참조하세요.
Warning
DAX는 Azure Stack HCI 환경에서 지원되지 않습니다. Azure Stack HCI는 BTT가 켜져 있는 블록 액세스만 지원합니다.
지역
지역은 하나 이상의 영구 메모리 모듈 집합입니다. 영역은 여러 영구 메모리 모듈이 처리량을 늘리기 위해 단일 논리 가상 주소 공간으로 표시되는 인터리브 집합으로 만들어지는 경우가 많습니다. 사용 가능한 대역폭을 늘리기 위해 인접한 가상 주소는 여러 영구 메모리 모듈에 분산됩니다. 지역은 일반적으로 서버 플랫폼의 BIOS에서 만들 수 있습니다.
PmemDisks
영구 메모리를 스토리지로 사용하려면 VM(가상 머신) 내에서 PmemDisk로 열거하는 호스트의 VHD(가상 하드 디스크)인 PmemDisk를 하나 이상 정의해야 합니다. PmemDisk는 하드 디스크 파티션 또는 LUN처럼 생각할 수 있는 연속적으로 주소가 지정된 비휘발성 메모리 범위입니다. Windows PowerShell cmdlet을 사용하여 여러 PmemDisks를 만들어 사용 가능한 원시 용량을 나눌 수 있습니다. 각 영구 메모리 모듈에는 구성 메타데이터를 저장하는 LSA(레이블 스토리지 영역)가 포함되어 있습니다.
변환 테이블 차단
반도체 드라이브와 달리 영구 메모리 모듈은 정전 또는 시스템 중단 시 발생할 수 있는 "조각난 쓰기"로부터 데이터를 위험에 빠뜨리지 않도록 보호하지 않습니다. BTT는 영구 메모리 디바이스에 대한 원자성 섹터 업데이트 의미 체계를 제공하고, 기본적으로 블록과 유사한 섹터 쓰기를 사용하도록 설정하여 앱이 오류 시나리오에서 이전 데이터와 새 데이터를 혼합하지 않도록 하여 이러한 위험을 완화합니다. 거의 모든 경우에 BTT를 켜는 것이 좋습니다. BTT는 PmemDisk의 속성이므로 PmemDisk를 만들 때 켜져 있어야 합니다.
블록 액세스 모드에서는 모든 데이터가 블록 의미 체계를 사용하므로 BTT를 사용하는 것이 좋습니다. 또한 BTT는 애플리케이션의 데이터 작업이 그렇지 않더라도 메타데이터 작업이 여전히 블록 의미 체계를 사용하기 때문에 DAX 모드에서도 유용합니다. 모든 애플리케이션 작업이 DAX 의미 체계와 함께 메모리 매핑 파일을 사용하는 경우에도 메타데이터 작업에 대해 조각난 쓰기가 발생할 수 있습니다. 따라서 BTT를 켜는 것은 여전히 중요합니다.
지원되는 하드웨어
다음 표에서는 Azure Stack HCI 및 Windows Server에 대해 지원되는 영구 메모리 하드웨어를 보여 줍니다. 영구 메모리는 저장소 공간 Direct를 포함하여 Windows Server 2019에서 완전히 지원됩니다.
영구 메모리 기술 | Windows Server 2016 | Azure Stack HCI v20H2/Windows Server 2019 |
---|---|---|
NVDIMM-N in persis텐트 모드 | 지원됨 | 지원됨 |
앱 직접 모드의 Intel Optane™ DC 영구 메모리 | 지원되지 않음 | 지원 여부 |
메모리 모드의 Intel Optane™ DC 영구 메모리 | 지원됨 | 지원됨 |
Intel Optane DC 영구 메모리는 메모리(휘발성) 및 앱 다이렉트(영구) 운영 모드를 모두 지원합니다. 영구 메모리 모듈을 서버 워크로드의 기본 사용 사례인 스토리지로 사용하려면 App Direct 모드를 사용해야 합니다. 메모리 모드는 일반적으로 서버 워크로드의 성능 요구 사항을 충족하지 않는 느린 RAM으로 영구 메모리를 사용합니다. 메모리 모드는 메모리와 유사한 의미 체계를 사용하여 액세스할 수 있는 영구 스토리지 볼륨인 DAX와 다릅니다.
운영 모드는 원래 디바이스 제조업체에서 미리 구성되는 경우가 많습니다.
참고 항목
여러 PmemDisks로 구분된 App Direct 모드에서 여러 Intel® Optane™ 영구 메모리 모듈이 있는 시스템을 다시 시작하면 관련된 논리 스토리지 디스크의 일부 또는 전부에 대한 액세스 권한이 손실될 수 있습니다. 이 문제는 버전 1903보다 오래된 Windows Server 2019 버전에서 발생합니다.
이 액세스 손실은 영구 메모리 모듈이 학습되지 않거나 시스템이 시작될 때 실패하기 때문에 발생합니다. 이러한 경우 시스템의 영구 메모리 모듈에 있는 모든 PmemDisks가 실패합니다. 여기에는 실패한 모듈에 물리적으로 매핑되지 않는 모듈이 포함됩니다.
모든 PmemDisks에 대한 액세스를 복원하려면 실패한 모듈을 바꿉니다.
Windows Server 2019 버전 1903 이상 버전에서 모듈이 실패하면 영향을 받는 모듈에 물리적으로 매핑되는 PmemDisks에만 액세스할 수 없게 됩니다. 다른 항목은 영향을 받지 않습니다.
영구 메모리 구성
Intel Optane 영구 메모리를 사용하는 경우 여기에 있는 지침을 따르세요. 다른 공급업체의 영구 메모리 모듈을 사용하는 경우 해당 설명서를 참조하세요.
BTT를 지원하는 PmemDisk를 만들려면 cmdlet을 New-VHD
사용합니다.
New-VHD E:\pmemtest.vhdpmem -Fixed -SizeBytes 1GB -AddressAbstractionType BTT
VHD 확장은 "vhdpmem"이어야 합니다.
BTT를 사용하도록 설정하지 않은 VHD를 cmdlet을 사용하는 Convert-VHD
VHD로 변환하거나 그 반대로 변환할 수도 있습니다.
Convert-VHD .\pmemtest_nobtt.vhdpmem -AddressAbstractionType BTT -DestinationPath pmemtest_btt.vhdpmem
변환 후 새 VHD는 원래 VHD와 동일한 네임스페이스 GUID를 갖게 됩니다. 특히 둘 다 동일한 VM에 연결된 경우 문제가 발생할 수 있습니다. 변환된 VHD에 대한 새 네임스페이스 UUID를 만들려면 cmdlet을 Set-VHD
사용합니다.
Set-VHD -ResetDiskIdentifier .\pmemtest_btt.vhdpmem
인터리브 집합 이해
인터리브 집합은 일반적으로 서버 플랫폼의 BIOS에서 만들어서 여러 영구 메모리 디바이스를 호스트 운영 체제에 대한 단일 디스크로 표시하여 해당 디스크에 대한 처리량을 늘릴 수 있습니다.
참고 항목
Windows Server 2016은 인터리브된 영구 메모리 모듈 집합을 지원하지 않습니다.
영구 메모리 모듈은 데이터를 프로세서에 더 가깝게 만드는 표준 DIMM(메모리) 슬롯에 있습니다. 이 구성은 대기 시간을 줄이고 페치 성능을 향상시킵니다. 처리량을 더 높이기 위해 두 개 이상의 영구 메모리 모듈은 읽기/쓰기 작업을 스트라이프하는 n방향 인터리브 집합을 만듭니다. 가장 일반적인 구성은 양방향 또는 4방향 인터리빙입니다.
다음과 같이 PowerShell cmdlet을 사용하여 Get-PmemDisk
이러한 논리 디스크의 구성을 검토할 수 있습니다.
Get-PmemDisk
DiskNumber Size HealthStatus AtomicityType CanBeRemoved PhysicalDeviceIds UnsafeShutdownCount
---------- ---- ------------ ------------- ------------ ----------------- -------------------
2 252 GB Healthy None True {20, 120} 0
3 252 GB Healthy None True {1020, 1120} 0
논리 PMem 디스크 2는 물리적 디바이스 Id20 및 Id120을 사용하고 논리 PMem 디스크 3은 물리적 디바이스 Id1020 및 Id1120을 사용하는 것을 볼 수 있습니다.
논리 드라이브에서 사용하는 인터리브 집합에 대한 추가 정보를 검색하려면 cmdlet을 Get-PmemPhysicalDevice
실행합니다.
(Get-PmemDisk)[0] | Get-PmemPhysicalDevice
DeviceId DeviceType HealthStatus OperationalStatus PhysicalLocation FirmwareRevision Persistent memory size Volatile memory size
-------- ---------- ------------ ----------------- ---------------- ---------------- ---------------------- --------------------
20 Intel INVDIMM device Healthy {Ok} CPU1_DIMM_C1 102005310 126 GB 0 GB
120 Intel INVDIMM device Healthy {Ok} CPU1_DIMM_F1 102005310 126 GB 0 GB
인터리브 집합 구성
인터리브 집합을 구성하려면 cmdlet을 Get-PmemUnusedRegion
실행하여 시스템의 논리적 영구 메모리 디스크에 할당되지 않은 모든 영구 메모리 영역을 검토합니다.
Get-PmemUnusedRegion
RegionId TotalSizeInBytes DeviceId
-------- ---------------- --------
1 270582939648 {20, 120}
3 270582939648 {1020, 1120}
디바이스 유형, 위치, 상태 및 작동 상태 등을 포함하여 시스템의 모든 PMem 디바이스 정보를 보려면 cmdlet을 Get-PmemPhysicalDevice
실행합니다.
Get-PmemPhysicalDevice
DeviceId DeviceType HealthStatus OperationalStatus PhysicalLocation FirmwareRevision Persistent memory size Volatile
memory size
-------- ---------- ------------ ----------------- ---------------- ---------------- ---------------------- --------------
1020 Intel INVDIMM device Healthy {Ok} CPU2_DIMM_C1 102005310 126 GB 0 GB
1120 Intel INVDIMM device Healthy {Ok} CPU2_DIMM_F1 102005310 126 GB 0 GB
120 Intel INVDIMM device Healthy {Ok} CPU1_DIMM_F1 102005310 126 GB 0 GB
20 Intel INVDIMM device Healthy {Ok} CPU1_DIMM_C1 102005310 126 GB 0 GB
사용하지 않는 사용 가능한 PMem 지역이 있으므로 새 영구 메모리 디스크를 만들 수 있습니다. 사용하지 않는 지역을 사용하여 다음 cmdlet을 실행하여 여러 영구 메모리 디스크를 만들 수 있습니다.
Get-PmemUnusedRegion | New-PmemDisk
Creating new persistent memory disk. This may take a few moments.
이 작업이 완료되면 다음을 실행하여 결과를 볼 수 있습니다.
Get-PmemDisk
DiskNumber Size HealthStatus AtomicityType CanBeRemoved PhysicalDeviceIds UnsafeShutdownCount
---------- ---- ------------ ------------- ------------ ----------------- -------------------
2 252 GB Healthy None True {20, 120} 0
3 252 GB Healthy None True {1020, 1120} 0
동일한 결과를 얻는 대신 Get-PmemDisk
실행할 Get-PhysicalDisk | Where MediaType -eq SCM
수 있다는 점은 주목할 가치가 있습니다. 새로 만든 영구 메모리 디스크는 PowerShell 및 Windows Admin Center에 표시되는 드라이브와 일대일로 해당합니다.
영구 메모리 바꾸기
실패한 모듈을 교체해야 하는 경우 PMem 디스크를 다시 프로비전해야 합니다(앞에서 설명한 단계 참조).
문제를 해결할 때는 .를 사용해야 Remove-PmemDisk
할 수 있습니다. 이 cmdlet은 특정 영구 메모리 디스크를 제거합니다. 다음 cmdlet을 실행하여 현재 영구 메모리 디스크를 모두 제거할 수 있습니다.
Get-PmemDisk | Remove-PmemDisk
cmdlet Remove-PmemDisk at command pipeline position 1
Supply values for the following parameters:
DiskNumber: 2
This will remove the persistent memory disk(s) from the system and will result in data loss.
Remove the persistent memory disk(s)?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"): Y
Removing the persistent memory disk. This may take a few moments.
Important
영구 메모리 디스크를 제거하면 해당 디스크에서 데이터가 손실됩니다.
필요한 또 다른 cmdlet은 .입니다 Initialize-PmemPhysicalDevice
. 이 cmdlet은 물리적 영구 메모리 디바이스에서 레이블 스토리지 영역을 초기화하고 디바이스에서 손상된 레이블 스토리지 정보를 지울 수 있습니다.
Get-PmemPhysicalDevice | Initialize-PmemPhysicalDevice
This will initialize the label storage area on the physical persistent memory device(s) and will result in data loss.
Initializes the physical persistent memory device(s)?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"): A
Initializing the physical persistent memory device. This may take a few moments.
Initializing the physical persistent memory device. This may take a few moments.
Initializing the physical persistent memory device. This may take a few moments.
Initializing the physical persistent memory device. This may take a few moments.
Important
Initialize-PmemPhysicalDevice
는 영구 메모리에서 데이터 손실을 발생합니다. 영구 메모리 관련 문제를 해결하기 위한 최후의 수단으로만 사용합니다.
Microsoft Ignite 2018에서 작동하는 영구 메모리
영구 메모리의 이점 중 일부를 보려면 Microsoft Ignite 2018의 이 비디오를 살펴보겠습니다.
내결함성을 제공하는 모든 스토리지 시스템은 반드시 분산된 쓰기 복사본을 만듭니다. 이러한 작업은 네트워크를 트래버스하고 백 엔드 쓰기 트래픽을 증폭해야 합니다. 이러한 이유로, 특히 스토리지 시스템에 가능한 한 로컬 복사본에서 읽을 수 있는 상식적인 최적화가 있는 경우 읽기만 측정하여 절대 최대 IOPS 벤치마크 수를 달성합니다. 저장소 공간 Direct는 최적화되어 있습니다.
읽기 작업만 사용하여 측정한 경우 클러스터는 13,798,674 IOPS를 제공했습니다.
비디오를 자세히 시청하면 대기 시간이 훨씬 더 늘어나고 있음을 알 수 있습니다. 13.7M 이상의 IOPS에서도 Windows의 파일 시스템은 40μs 미만의 대기 시간을 보고하고 있습니다. (이는 마이크로초의 기호로, 1초의 100만 분의 1입니다.) 이 속도는 일반적인 모든 플래시 공급 업체가 자랑스럽게 오늘날 광고하는 것보다 더 빠른 순서입니다.
Windows Server 2019의 저장소 공간 Direct와 Intel® Optane™ DC 영구 메모리는 함께 획기적인 성능을 제공했습니다. 예측 가능하고 대기 시간이 매우 짧은 13.7M IOPS 이상의 HCI 벤치마크는 이전 업계 최고의 6.7M IOPS 벤치마크의 두 배 이상입니다. 또한 이번에는 이전보다 25% 적은 12개의 서버 노드만 필요했습니다.
테스트 하드웨어는 3방향 미러링 및 구분된 ReFS 볼륨을 사용하도록 구성된 12 서버 클러스터입니다. 12 x Intel® S2600WFT, 384GiB 메모리, 2 x 28 코어 "CascadeLake", 1.5TB Intel® Optane™ DC 영구 메모리를 캐시로, 32TB NVMe (4 x 8TB Intel® DC P4510)를 용량으로, 2 x Mellanox ConnectX-4 25Gbps.
다음 표에서는 전체 성능 번호를 보여 줍니다.
벤치마크 | 성능 |
---|---|
4K 100% 임의 읽기 | 1,380만 IOPS |
4K 90/10% 임의 읽기/쓰기 | 945만 IOPS |
2MB 순차 읽기 | 549GB/s 처리량 |
다음 단계
관련 정보는 다음을 참조하세요.