다음을 통해 공유


64비트 Windows에서 DMA 수행

드라이버에 64비트 주소 지정 지원을 추가하면 전체 시스템 성능이 크게 향상될 수 있습니다. 이는 DMA(직접 메모리 액세스)를 수행하는 디바이스 드라이버에 특히 중요합니다. 64비트 Microsoft Windows에서는 DMA를 수행하지만 64비트 주소 지정을 지원하지 않는 디바이스 드라이버가 이중 버퍼링되어 상대적 성능이 저하됩니다.

이중 버퍼링은 일반적으로 8GB 시스템에 상대적으로 작은 영향(단일 백분율 포인트)을 가지지만 데이터베이스 활동과 같은 I/O 집약적 작업에 영향을 주는 것으로 충분합니다. 실제 메모리의 양이 증가함에 따라 이 부정적인 성능 영향도 증가합니다.

64비트 DMA를 지원하려면 드라이버는 다음 지침을 준수해야 합니다.

  1. 실제 주소 계산에 PHYSICAL_ADDRESS 구조를 사용합니다.

  2. 전체 64비트 주소를 유효한 실제 주소로 처리합니다. 예를 들어 드라이버는 잠긴 버퍼에서 MmGetPhysicalAddress 를 호출하고, 높은 32비트를 삭제하고, 잘린 주소를 32비트 구성 요소 어댑터에 전달해서는 안 됩니다. 이로 인해 메모리가 손상되고 I/O가 손실되고 시스템 오류가 발생합니다.

  3. Windows 2000에서 추가된 고성능 분산/수집 루틴(GetScatterGatherListPutScatterGatherList)을 사용합니다.

  4. Mm64BitPhysicalAddress 전역 시스템 변수의 값을 확인합니다. TRUE이면 시스템에서 64비트 물리적 주소 지정을 지원합니다.

  5. 드라이버가 64비트 DMA 주소를 지원함을 나타내려면 DEVICE_DESCRIPTION 구조체의 Dma64BitAddresses 멤버를 TRUE로 설정합니다.

32비트 Windows의 DMA 루틴은 64비트 준비입니다. 디바이스 드라이버가 이러한 루틴을 올바르게 사용하는 경우 DMA 코드는 64비트 Windows에서 수정 없이 작동해야 합니다.