向驱动程序添加 64 位寻址支持可以显著提高整体系统性能。 对于在 DMA 设备上执行直接内存访问 (驱动程序) 。 在 64 位 Microsoft Windows中,执行 DMA 但不支持 64 位寻址的设备驱动程序是双缓冲的,这会降低相对性能。
尽管双缓冲通常对 8 GB (单个百) 的影响相对较小,但足以影响 I/O 密集型任务,例如数据库活动。 随着物理内存量的增加,这种负面性能影响也会增加。
若要支持 64 位 DMA,驱动程序应遵守以下准则:
使用
PHYSICAL_ADDRESS
结构进行物理地址计算。
将整个 64 位地址视为有效的物理地址。 例如,驱动程序不应在锁定的缓冲区上调用
MmGetPhysicalAddress
,放弃高 32 位,将截断的地址传递给 32 位组件适配器。 这导致内存损坏、I/O 丢失和系统故障。
使用
GetScatterGatherList
和
PutScatterGatherList
(2000) 中添加的高性能散点/收集例程Windows。
检查
Mm64BitPhysicalAddress 全局
系统变量的值。 如果为
TRUE
,则系统支持 64 位物理寻址。
将
DEVICE_DESCRIPTION 结构的 Dma64BitAddresses
成员设置为
TRUE
,以指示驱动程序支持 64 位 DMA 地址。
32 位和 32 位中的 DMA Windows 64 位就绪。 如果设备驱动程序正确使用这些例程,则 DMA 代码应在 64 位驱动程序上无需修改即可Windows。