ubuntuusers.de

DMA

Archivierte Anleitung

Dieser Artikel wurde archiviert. Das bedeutet, dass er nicht mehr auf Richtigkeit überprüft oder anderweitig gepflegt wird. Der Inhalt wurde für keine aktuell unterstützte Ubuntu-Version getestet. Wenn du Gründe für eine Wiederherstellung siehst, melde dich bitte in der Diskussion zum Artikel. Bis dahin bleibt die Seite für weitere Änderungen gesperrt.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

Achtung!

Im Gegensatz zu älteren PATA-Laufwerken mit IDE-Schnittstelle besitzen moderne SATA-Laufwerke keinen DMA-Modus.

Die Festplatte sollte vor dem Setzen eines anderen DMA-Modus unbedingt aus dem Dateisystem ausgehängt werden, da ansonsten Datenverlust droht. Außerdem sollte man vorher in Erfahrung bringen, für welchen DMA-Modus eine Festplatte überhaupt geeignet ist. Einige Festplatten scheinen nicht über einen Schutzmechanismus verfügen, die das Benutzen eines ungeeigneten (zu schnellen) Übertragungsmodus (DMA-Modus) verhindert; auch in diesem Fall können Daten verloren gehen!

Diese Anleitung beschreibt, wie man den DMA-Modus für IDE-Laufwerke aktiviert. Unter aktuellen Ubuntu-Versionen ist dies normalerweise nicht notwendig, da DMA bereits standardmäßig aktiviert ist.

Allgemeines

Es kann vorkommen, dass beim Anschauen einer DVD das Bild stark ruckelt oder dass der Durchsatz der Festplatte sehr langsam ist. Das liegt möglicherweise am abgeschalteten DMA-Modus des Laufwerks.

Der deaktivierte DMA-Modus kann auch dazu führen, dass ein Brennvorgang extrem langsam wird und im Schnitt nur mit einem Bruchteil der eigentlichen Höchstgeschwindigkeit gebrannt wird.

Auf der Hardwareebene muss man sich vergewissern, dass das IDE-Breitbandkabel 80-polig ist. Die alten 40-poligen sehen gleich aus, können aber die neueren DMA-Modi nicht umsetzen. Alle nachfolgenden Einstellungen werden nicht funktionieren.

Besonderheiten seit Feisty Fawn

Seit der Ubuntu-Version Feisty Fawn 7.04 werden die Laufwerke als virtuelle SCSI-Laufwerke behandelt. Kennzeichen ist, dass die Laufwerke statt /dev/hd*x als /dev/sd*x bezeichnet werden. Das führt dazu, dass hdparm den DMA-Modus weder setzen noch abfragen kann. Allerdings sollte DMA auch standardmäßig aktiviert sein.

Wird der Treiber ausgewechselt, z.B. durch ein Neukompilieren des Kernels, funktioniert hdparm wieder vollständig wie im Folgenden beschrieben. Das ist höchstens bei auftretenden schweren Problemen nötig!

DMA temporär aktivieren

Mit dem Kommandozeilen-Tool hdparm kann man DMA aktivieren. In diesem Beispiel wird davon ausgegangen, dass /dev/hdc das Laufwerk ist (ggf. also anpassen). [1]

Zur Kontrolle ob der DMA-Modus aktiv ist, öffnet man ein Terminal [2] und gibt dort folgenden Befehl ein:

sudo hdparm /dev/hdc 

Die Anzeige sieht dann in etwa so aus:

/dev/hdc:
   multcount    =  0 (off)
   IO_support   =  0 (default 16-bit)
   unmaskirq    =  0 (off)
   using_dma    =  0 (off)
   keepsettings =  0 (off)
   (...)

Man erfährt so also, dass der DMA-Modus abgeschaltet ist:

   using_dma    =  0 (off)
   IO_support   =  0 (default 16-bit)

Um den DMA-Modus vorübergehend einzuschalten, tippt man:

sudo hdparm -c1 -d1 /dev/hdc 

Zum Überprüfen sollten in der Ausgabe von sudo hdparm /dev/hdc nun folgende Zeilen enthalten sein:

/dev/hdc:
   (...)
   IO_support   =  1 (32-bit)
   using_dma    =  1 (on)
   (...)

DMA dauerhaft aktivieren

Anpassen der Konfiguration

Damit der DMA-Modus auch nach dem nächsten Neustart noch aktiv ist (sofern der Versuch erfolgreich war), wird das Ganze in die Datei /etc/hdparm.conf eingetragen. Dazu öffnet man die Datei in einem Editor mit Rootrechten [3] und fügt ans Ende folgenden Text an:

/dev/hdc {
       io32_support = 1
       dma = on
       keep_settings_over_reset = 1
}

Auch ist es möglich, diese Parameter in einer anderen Syntax einzutragen. Diese Syntax entspricht den hdparm-Optionen aus der Kommandozeile und ist leicht übertragbar. Dazu ist stattdessen Folgendes am Ende der /etc/hdparm.conf einzutragen:

command_line {
       hdparm -c1 -d1 -k1 /dev/hdc
}

Alternativ kann als Pfadangabe /dev/disk/by-uuid/ genutzt werden (siehe UUID). Natürlich können viele weitere Befehle für das Device (Gerät) mitgegeben werden, siehe hdparm-Doku (man hdparm), oder die Beispieleinträge in der Datei hdparm.conf. Hat man z. B. an /dev/hdd noch einen Brenner, kann man gleich auch dafür einen entsprechenden Eintrag machen.

⚓︎

Start von hdparm verzögern

Nun muss evtl. mit dem Befehl

sudo mv /etc/rcS.d/S07hdparm /etc/rcS.d/S21hdparm 

den Start von hdparm (beim Hochfahren des Systems) zeitlich etwas weiter nach hinten gesetzt werden. So funktioniert hdparm auch nach dem nächsten Neustart richtig. Sollten Probleme auftreten ist es einen Versuch wert, den hdparm-Eintrag im /etc/rcS.d-Verzeichnis noch weiter in der Reihenfolge nach hinten zu versetzen. Beispielsweise auf S48hdparm, oder konsequent ganz an den Schluss auf S99hdparm (längere Bootzeiten durch die spätere Aktivierung von DMA treten nicht auf):

sudo mv /etc/rcS.d/S07hdparm /etc/rcS.d/S99hdparm 

Hinweis:

Falls zum Setzen des DMA-Modus erst noch Treiber geladen werden müssen, funktioniert es erst ab Position 21. Die Treiber (Module) werden aber an Stelle 20 geladen. Hat man die IDE-Unterstützung fest in den Kernel kompiliert (kein Modul), dann kann man diesen Schritt überspringen.

Sollte der Eintrag /etc/rcS.d/S07hdparm nicht vorhanden sein, bitte vorher den Abschnitt "hdparm-Eintrag ist in /etc/rcS.d/ nicht auffindbar" in den Problembehebungen befolgen.

Hinweis:

Für schnelle und zuverlässige DMA-Übertragungen müssen alle Laufwerke eines Computers den DMA-Modus aktiviert haben! So ist sichergestellt, dass alle Geräte mit den hohen Datenraten arbeiten können. Ansonsten kann es vorkommen, dass der DMA-Flag nach einigen Zugriffen von der Hardware zurückgesetzt wird.

⚓︎

Geschwindigkeitsmessung

Das Kommandozeilentool hdparm bietet zudem so etwas wie eine Geschwindigkeitsmessung ("Benchmark") an, um den DMA-Modus rudimentär zu testen. In diesem Beispiel wird eine IDE-Festplatte an z.B. /dev/hdc verwendet. Die Ausführung des folgenden Befehls dauert circa 10 Sekunden:

sudo hdparm -Tt /dev/hdc 

Für IDE-Festplatten sollte der zweite Wert Timing buffered disk reads zwischen 35 MB/s und 55 MB/s bei funktionierendem DMA-Modus liegen. Ist dieser nicht aktiviert liegt dieser Wert zwischen 2 MB/s und 3 MB/s.

Problemlösungen

DMA lässt sich nicht aktivieren

Bei einigen Systemen lässt sich der DMA-Modus nicht aktivieren. Dafür gibt es folgenden Workaround:

In /etc/modules muss an erster Stelle das Modul stehen, das den DMA-Modus erst ermöglicht. Dies ist abhängig vom verwendeten Mainboardchipsatz, z.B. bei einem nforce4 Ultra:

amd74xx

Sollte es Probleme bei der Aktivierung des DMA-Modus in Verbindung mit einem VIA-Mainboard geben, so wird folgendes Modul an erster Stelle in der /etc/modules eingetragen:

via82cxxx

Die Datei muss zur Bearbeitung in einem Texteditor mit Root-Rechten [3] geöffnet werden.

Hinweis:

Bei manchen Systemen funktioniert es nur, wenn amd74xx am Anfang der Datei steht, ide-disk kann man dann auskommentieren. Gleiches Prinzip gilt ebenso für das Modul via82cxxx .

System bleibt beim Booten hängen

Bei einigen Benutzern tritt das Problem auf, dass nach der Installation von hdparm das System nicht mehr richtig hochfährt. Der Startvorgang bleibt bei der Meldung "Setting disc parameters" einfach stehen und geht nicht weiter.

Um trotzdem starten zu können, geht man einfach kurz ins BIOS (in der Regel durch Entf auf Desktop-Systemen oder F2 auf Notebooks zu erreichen) und verlässt es wieder ohne zu speichern. Danach müsste das System wieder starten. Tritt dieses Problem häufiger auf, gibt es die Möglichkeit hdparm nicht über die /etc/hdparm.conf zu starten, sondern über den Archiv/Skripte/Autostart-Patch. Dieser muss einfach heruntergeladen und installiert werden. Danach erstellt man in einem Texteditor mit Root-Rechten [3] die Datei /etc/autostart/hdparmstart mit folgendem Inhalt:

hdparm -c1 -d1 -k1 /dev/hdc

Die Datei muss nun gespeichert und ausführbar gemacht werden. Z.B. im Terminal [2] mit

sudo chmod a+x hdparmstart 

Nun entfernt man alle nicht auskommentierten Einträge aus der /etc/hdparm.conf. Bei nächsten Neustart sollte DMA aktiviert sein und der Rechner nicht mehr hängen bleiben.

Außerdem sollten gegebenenfalls alle Einstellungen der Geräte im BIOS auf "auto" gesetzt sein. Hilft dies nicht, kann man versuchen den PIO-Mode herabzusetzen, z.B. von "5" auf "4".

Ohne den Autostart-Patch kann man alternativ versuchen den Start des hdparm-Skriptes beim Booten noch weiter hinaus zu verzögern, indem man es um einige Sekunden verspätet starten lässt. Hierzu öffnet man die /etc/init.d/hdparm in einem Terminal mit Root-Rechten [2] und fügt ganz am Anfang folgende erste Zeile hinzu:

sleep 2

Hilft dies immer noch nicht, kann man den udev-Eintrag in der Startreihenfolge in /etc/rcS.d/ nach hinten verschieben per Terminal mit Root-Rechten [2]:

sudo rm /etc/rcS.d/S*udev 
sudo ln -s /etc/init.d/udev /etc/rcS.d/S23udev 

Das udev-Startskript kann man zudem auch noch verzögert starten lassen, indem man in die /etc/init.d/udev am Anfang folgende erste Zeile hinzufügt

sleep 2

Bitte beachten: Der hdparm-Eintrag sollte im /etc/rcS.d-Verzeichnis NACH dem udev-Eintrag folgen.

Funktioniert dies alles nicht, könnte ein leicht defektes Mainboard bzw. defekter IDE-Controller auf dem Board vorliegen. Ist ein zweiter unbenutzter vorhanden, sollte man diesen ausprobieren. Allgemein empfiehlt es sich auch, z.B. die Festplatte sowie das CD/DVD-Laufwerk jeweils an ein eigenes Flachbandkabel und Controller anzuschließen.

Andererseits können die Probleme, dass der Bootprozess bei aktiviertem DMA-Modus bei "Setting disc parameters..." hängen bleibt, in Einzelfällen mit dem Dateisystem XFS zusammenhängen. Diese sollten aber i.d.R. nach den Lösungsansätzen in diesem Abschnitt aufzuheben sein.

DMA ist gesetzt, funktioniert aber nicht

Sollte direkt nach einer Installation, bzw. ohne vom Benutzer vorgenommene Veränderungen, der DMA Modus für ein CD- bzw. DVD-Laufwerk scheinbar schon gesetzt sein, aber nicht funktionieren (z.B. bemerkbar durch ruckelige Filmwiedergabe), kann das Problem behoben werden, indem man den DMA-Modus für das Laufwerk deaktiviert und gleich wieder aktiviert. Danach kann der DMA-Modus dauerhaft aktiviert werden (siehe oben).

Dieses Problem trat z.B. bei einem Notebook Samsung X20 II auf, bei dem das DVD-Laufwerk als /dev/hdb eingebunden ist. Der Versuch den DMA-Modus einzuschalten, obwohl er scheinbar schon aktiv ist, jedoch nicht funktioniert, führt zu einem kompletten Einfrieren des Systems. Die oben aufgezeigte Lösung beseitigt das Problem und aktiviert den DMA Modus korrekt.

⚓︎

hdparm-Eintrag ist in /etc/rcS.d/ nicht auffindbar

Damit die vorgenommenen Optionen auch regelmäßig beim Booten geladen werden, ist es notwendig, dass hdparm mit einem Eintrag im entsprechenden Runlevel vorhanden ist. In diesem Fall handelt es sich um den /etc/rcS.d/. Sollte dort kein Eintrag vorhanden sein, ist folgendermaßen vorzugehen, um ihn manuell wieder hinzuzufügen:

Gegebenenfalls muss das Paket hdparm nochmals neuinstalliert werden. Die entsprechende fehlende symbolische Verknüpfung wird mit dem Befehl

sudo ln -s /etc/init.d/hdparm /etc/rcS.d/S21hdparm 

erstellt. Nun lässt sich ab Abschnitt "DMA-Modus dauerhaft aktivieren" in diesem Wikiartikel weiter vorgehen.

/etc/init.d/hdparm existiert nicht

Ggf. muss die Datei /etc/init.d/hdparm mit folgendem Inhalt erstellt werden:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#!/bin/sh

case "$1" in
start)
/usr/local/bin/colecho "Starting hdparm..."
;;
stop)
/usr/local/bin/colecho "nix zu stoppen..."
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
;;
esac

DMA nach kurzer Zeit bzw. Zugriff auf CD/DVD wieder deaktiviert

Dies kann in erster Linie daran liegen, dass DMA z.B. nur für das CD/DVD-Laufwerk deaktiviert wurde. Am sinnvollsten ist es also, DMA sowie den io32_support für alle am Computer befindlichen Laufwerke zu aktivieren. Im letzten Abschnitt ist ein Beispiel einer hdparm.conf-Konfigurationsdatei zu finden.

Simplex DMA is claimed by other device

Ab Ubuntu 8.04 kann es vorkommen, dass das Behandeln des ATA-Laufwerks als SCSI-Gerät Probleme verursacht. Kennzeichnend wäre die Logmeldung:

ata2.00: simplex DMA is claimed by other device, disabling DMA

Als Lösung fügt man in die /etc/modprobe.d/aliases am Ende diese Zeilen an:

alias ata_generic off
alias pata_atiixp on

Diese Revision wurde am 14. Februar 2020 08:49 von Heinrich_Schwietering erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Hardware, System