Mai
06

Windows XP DMA Bug

Filed Under (Consulting, PSAG) by on 06-05-2010 and tagged ,

Windows XP hat einen Bug in der Ansteuerung von Laufwerken mit DMA. Wenn das Laufwerk, die CD, aber auch die Festplatte 6 mal einen Lesefehler hatte, dann schaltet Windows XP den DMA Modus aus und schaltet in den PIO Modus.

Daß dieser Effekt auftritt, bemerkt man daran, daß der PC gähnend langsam wird, sobald man auf die Platte zugreift, aber normal arbeitet, solange man nichts von der Platte liest oder auf diese schreibt.

Hat man den TaskManager von Sysinternals, dann kann man den Effekt auch an der Zeile “Interrupts” sehen, die weist bei Plattenzugriffen bis zu 50% CPU Last aus.

Im Device Manager sieht man dann unter den IDE Channels

den Primary IDE Channel 0, also denjenigen, wo die Platte angeschlossen ist, im PIO Mode:

Zur Korrektur des Fehlers legt man im Registry Editor unter

HKEY_CURRENT_CONFIG\System\CurrentControlSet\Control\Class\{4D36E96A-E325-11CE-BFC1-08002BE10318}\0001

einen neuen DWORD Wert

ResetErrorCountersOnSuccess

an und setzt diesen auf 1. Danach muß man Windows XP zweimal neu starten (Bei manchen XP Installationen kann es auch ein anderer Schlüssel sein, 0002 oder 0003).

Dieser Wert führt dazu, daß Windows XP, wenn es erfolgreich per DMA auf die Platte zugreifen kann, den Fehlerzähler zurücksetzt und sich selbst damit ermöglicht, den PIO Mode auszuschalten.

Kleine Erklärung dazu: PIO Modus bedeutet, daß jeder Zugriff auf die Festplatte einen Interrupt im Prozessor auslöst, denn der gesamte Festplattenzugriff wird von der CPU durchgeführt (Programmed Input/Output Mode). Im heutzutage “normalen” DMA Mode (Direct Memory Access) schreibt der Plattencontroller die Zugriffsergebnisse direkt in den Hauptspeicher (wenn die CPU gerade nicht zugreift).

Nachtrag:

Weitere Informationen (auf Englisch) und ein kleines VB Script zu diesem Problem findet man auf der Seite http://winhlp.com/node/10.




Artikel, die Sie auch interessieren könnten:

coded by nessus


One Response to “Windows XP DMA Bug”

  1.   Christian Pohle Says:

    Weitere Informationen (auf Englisch) und ein kleines VB Script zu diesem Problem findet man auf der Seite http://winhlp.com/node/10.

Leave a Reply