Udostępnij przez


Wykonywanie narzędzia DMA w 64-bitowych systemach Windows

Dodanie obsługi adresowania 64-bitowego do sterownika może znacznie poprawić ogólną wydajność systemu. Jest to szczególnie ważne w przypadku sterowników urządzeń, które wykonują bezpośredni dostęp do pamięci (DMA). W 64-bitowym systemie Microsoft Windows sterowniki urządzeń, które wykonują funkcję DMA, ale nie obsługują adresowania 64-bitowego, są buforowane dwukrotnie, co skutkuje niższą względną wydajnością.

Chociaż buforowanie podwójne zwykle ma stosunkowo niewielki wpływ (pojedyncze punkty procentowe) na systemach o 8 GB pamięci, wystarczy, aby wpłynąć na zadania intensywnych operacji we/wy, takie jak aktywność bazy danych. Wraz ze wzrostem ilości pamięci fizycznej zwiększa się również negatywny wpływ na wydajność.

Aby obsługiwać 64-bitową wersję DMA, sterowniki powinny przestrzegać następujących wytycznych:

  1. Użyj struktur PHYSICAL_ADDRESS do obliczeń adresów fizycznych.

  2. Traktuj cały adres 64-bitowy jako prawidłowy adres fizyczny. Na przykład sterowniki nie powinny wywoływać MmGetPhysicalAddress na zablokowanym buforze, odrzucać wysokie 32 bity i przekazywać obcięty adres do 32-bitowego adaptera komponentu. Powoduje to uszkodzenie pamięci, utratę operacji we/wy i awarię systemu.

  3. Użyj routyn typu scatter/gather o wysokiej wydajności (GetScatterGatherList i PutScatterGatherList), które zostały dodane w systemie Windows 2000.

  4. Sprawdź wartość zmiennej systemowej Mm64BitPhysicalAddress . Jeśli ma wartość TRUE, system obsługuje 64-bitowe adresowanie fizyczne.

  5. Ustaw element członkowski Dma64BitAddresses struktury DEVICE_DESCRIPTION na TRUE, aby wskazać, że sterownik obsługuje 64-bitowe adresy DMA.

Procedury DMA w 32-bitowym systemie Windows są gotowe do użycia w wersji 64-bitowej. Jeśli sterownik urządzenia prawidłowo używa tych procedur, kod DMA powinien działać bez modyfikacji w 64-bitowym systemie Windows.