了解和配置 DAX

适用范围:Windows Server 2022、Windows Server 2019、Windows Server 2016、Windows 10

直接访问 (DAX) 将持久性内存设备视为字节可寻址内存以获得最低延迟,从而提供对字节可寻址内存的直接访问,而不是遵循正常的文件系统块 I/O 约定。 应用程序直接修改持久内存,从而绕过 I/O 堆栈的软件开销。 当 DAX 感知代码(即内存映射数据)正确使用时,这可以提供显著的性能优势。 但 DAX 存在许多问题,如果没有 DAX 感知代码,则没有显著优势。

在 Windows Server 2019 及更高版本中,你只能在使用单个永久内存磁盘的存储空间或存储空间直接配置上创建 DAX 卷,没有奇偶校验和冗余。 不能跨多个永久内存磁盘使用 DAX,并且只能将 DAX 与 NTFS 一起使用。

注意

Azure Stack HCI 环境不支持 DAX。

DAX 和块转换表 (BTT)

不当地使用 DAX 可能会导致数据丢失。 我们强烈建议你将 DAX 与数据块转换表 (BTT) 结合使用,以防止在电源故障或系统中断的情况下可能发生的“撕裂写入”。 BTT 可以缓解这一风险,因为它可为永久性内存设备提供原子扇区更新语义,在本质上,它是启用类似于块的扇区写入,在发生故障时,使应用可以避免将新旧数据混合在一起。

尽管我们建议在大多数 DAX 卷上启用 BTT,以避免 NTFS 元数据出现撕裂写入问题,但 BTT 的缺点是它可能会影响 DAX 卷上“大型”和“巨型”内存页的使用,因为元数据操作将发生重新映射。 如果要为内存映射部分使用大量内存页,请不要开启 BTT。

使用 Windows PowerShell 创建 DAX 卷

因为 DAX 是文件系统的属性,所以在格式化 NTFS 卷时必须指定 DAX。

创建卷后,将 -IsDax 开关与 Format-Volume cmdlet 一起使用,将卷格式化为启用 DAX。

Format-Volume -IsDax:$true

下面的代码片段将在永久内存磁盘上创建一个 DAX 卷。

# Here we use the first pmem disk to create the volume as an example
$disk = (Get-PmemDisk)[0] | Get-PhysicalDisk | Get-Disk
# Initialize the disk to GPT if it is not initialized
If ($disk.partitionstyle -eq "RAW") {$disk | Initialize-Disk -PartitionStyle GPT}
# Create a partition with drive letter 'S' (can use any available drive letter)
$disk | New-Partition -DriveLetter S -UseMaximumSize

   DiskPath: \\?\scmld#ven_8980&dev_097a&subsys_89804151&rev_0018#3&1b1819f6&0&03018089fb63494db728d8418b3cbbf549997891#{53f56307-b6
bf-11d0-94f2-00a0c91efb8b}

PartitionNumber  DriveLetter Offset                                               Size Type
---------------  ----------- ------                                               ---- ----
2                S           16777216                                        251.98 GB Basic

# Format the volume with drive letter 'S' to DAX Volume
Format-Volume -FileSystem NTFS -IsDax:$true -DriveLetter S

DriveLetter FriendlyName FileSystemType DriveType HealthStatus OperationalStatus SizeRemaining      Size
----------- ------------ -------------- --------- ------------ ----------------- -------------      ----
S                        NTFS           Fixed     Healthy      OK                    251.91 GB 251.98 GB

# Verify the volume is DAX enabled
Get-Partition -DriveLetter S | fl

UniqueId             : {00000000-0000-0000-0000-000100000000}SCMLD\VEN_8980&DEV_097A&SUBSYS_89804151&REV_0018\3&1B1819F6&0&03018089F
                       B63494DB728D8418B3CBBF549997891:WIN-8KGI228ULGA
AccessPaths          : {S:\, \\?\Volume{cf468ffa-ae17-4139-a575-717547d4df09}\}
DiskNumber           : 2
DiskPath             : \\?\scmld#ven_8980&dev_097a&subsys_89804151&rev_0018#3&1b1819f6&0&03018089fb63494db728d8418b3cbbf549997891#{5
                       3f56307-b6bf-11d0-94f2-00a0c91efb8b}
DriveLetter          : S
Guid                 : {cf468ffa-ae17-4139-a575-717547d4df09}
IsActive             : False
IsBoot               : False
IsHidden             : False
IsOffline            : False
IsReadOnly           : False
IsShadowCopy         : False
IsDAX                : True                   # <- True: DAX enabled
IsSystem             : False
NoDefaultDriveLetter : False
Offset               : 16777216
OperationalStatus    : Online
PartitionNumber      : 2
Size                 : 251.98 GB
Type                 : Basic

后续步骤

如需相关信息,另请参阅: