Tunig für Festplatten

Linux: DMA-Modus für IDE-Laufwerke aktivieren

20.07.2005 von Michael Kofler
Der DMA-Modus ermöglicht eine besonders effiziente Datenübertragung zum IDE-Laufwerk. Doch unter Linux ist manchmal Handarbeit nötig, um von dem schnellen Datentransfer zu profitieren.

Unsere Linux-Serie beschreibt die verschiedenen Facetten der Administration des Dateisystems. Mit Ausnahme der ersten beiden Teile richtet sich die Serie explizit an Linux-Profis. Die achtteilige Artikelreihe behandelt dabei folgende Themen:

Die Artikelserie basiert auf dem Kapitel 25 des Standardwerks "Linux - Installation, Konfiguration, Anwendung" von Michael Kofler aus dem Verlag Addison-Wesley. Sie können dieses über 1200 Seiten starke Buch auch in unserem Buchshop versandkostenfrei bestellen oder als PDF-eBook herunterladen.

Serie: Administration des Linux-Dateisystems

Teil 1

Dateisystemtypen

Teil 2

mount und fstab

Teil 3

CD-ROMs, Disketten, externe Massenspeicher

Teil 4

ext3 und reiserfs

Teil 5

Partitionierung der Festplatte

Teil 6

RAID mit Linux

Teil 7

LVM, Logical Volume Manager

Teil 8

DMA mit IDE-Festplatten

Der DMA-Modus

Der DMA-Modus ermöglicht eine besonders effiziente Datenübertragung zwischen IDE-Festplatten (sowie CD-ROM-oder DVD-Laufwerken) und dem Hauptspeicher. Die Übertragung erfolgt dabei nicht Byte für Byte über die CPU, sondern über einen DMA-Kanal (Direct Memory Access). Es wird also eine vorübergehende direkte Verbindung zwischen der Festplatte und dem Hauptspeicher hergestellt; die Übertragung wird durch den DMA-Controller gesteuert. Die Vorteile des DMA-Modus sind offensichtlich: die Datenübertragungsrate ist deutlich höher, gleichzeitig sinkt die CPU-Belastung beim Laden und Speichern großer Dateien. Der DMA-Modus ist notwendig, um IDE-Festplatten in optimaler Geschwindigkeit zu nutzen.

Wenn Sie mit aktueller Hardware und einer gängigen Linux-Distribution arbeiten, wird der DMA-Modus meist per Default aktiviert, und Sie müssen sich um nichts mehr zu kümmern. Immer ist das aber nicht der Fall: Selbst wenn alle Voraussetzungen für den DMA-Betrieb erfüllt sind (siehe unten), wird der DMA-Modus je nach Distribution, Kernel-Version bzw. Mainboard nicht automatisch aktiviert.

Der Grund: Der DMA-Modus kann in manchen Fällen zu Problemen mit der Zuverlässigkeit führen. Besonders problematisch ist die Verwendung des DMA-Modus bei CD- und DVD-Laufwerken. Die Ursachen sind meist schwer zu finden. Beispielsweise erlaubt die Spezifikation nur Festplattenkabel bis zu 45 cm Länge. Fast in jedem Rechner sind die Kabel länger. (Meistens funktioniert DMA dennoch, aber dafür gibt es keine Garantie.)

Aus diesen Gründen sollten Sie eigene Experimente mit dem DMA-Modus mit Vorsicht durchführen. Führen Sie vorher umount für alle nicht benötigten Partitionen aus. Umgekehrt gilt: Wenn Sie auf Ihrem Rechner Stabilitätsprobleme haben, deaktivieren Sie den DMA-Modus explizit, bis Sie sicher sind, dass Sie den DMA-Modus als Fehlerursache ausschließen können.

DMA funktioniert selbstverständlich auch mit den meisten SCSI-Controllern. Dort ist DMA allerdings ein seit langem genutztes Feature, das nicht extra aktiviert werden muss.

Weitere Informationen zum Thema Linux und DMA finden Sie im man-Text zu hdparm, in den Kommentaren von ide-dma.c (Kernelcode) sowie im UDMA-HOWTO und auf der Intel-Developers-Homepage:
/usr/src/linux/drivers/ide/ide-dma.c
http://www.tldp.org/HOWTO/Ultra-DMA.html
http://developer.intel.com/design/chipsets/drivers/busmastr/

DMA-Voraussetzungen überprüfen

Damit Sie den DMA-Modus nutzen können, müssen sowohl Ihr Mainboard als auch Ihre Festplatte diesen Modus unterstützen. Das ist mittlerweile bei nahezu allen modernen Mainboards und Festplatten der Fall. Was die Mainboard-Unterstützung anbelangt, empfiehlt sich ein Blick in das Handbuch sowie in die Kernel-Meldungen, die während des Bootens sowie durch das Kommando dmesg angezeigt werden. Entscheidend sind die beiden BM-DMA-Zeilen, die angeben, dass der DMA-Modus für alle vier IDE-Devices (hda bis hdd) unterstützt wird. (BM-DMA steht für Bus-Master-DMA.)

root# dmesg | grep -i dma

VP_IDE: VIA vt82c686b (rev 40) IDE UDMA100 controller on pci00:07.1
ide0: BM-DMA at 0xff00-0xff07, BIOS settings: hda:DMA, hdb:pio
ide1: BM-DMA at 0xff08-0xff0f, BIOS settings: hdc:DMA, hdd:pio

hda: 241254720 sectors (123522 MB) w/1821KiB Cache, CHS=15017/255/63, UDMA(100)

Ob auch Ihre Festplatte die DMA-Übertragung unterstützt, können Sie mit hdparm leicht feststellen (/dev/hda bezeichnet die erste IDE-Festplatte):

root# hdparm -i /dev/hda
Model=IC35L120AVV207-0, FwRev=V24OA63A, SerialNo=VNVD00G4G1L2KD
...
PIO modes: pio0 pio1 pio2 pio3 pio4
DMA modes: mdma0 mdma1 mdma2
UDMA modes: udma0 udma1 udma2 udma3 udma4 *udma5

Das bedeutet, dass die Festplatte neun verschiedene DMA- und Ultra-DMA-Modi unterstützt. Der * bedeutet, dass die Festplatte den UDMA5-Modus verwenden würde, wenn der DMA-Modus aktiviert wäre. Der * gibt aber keinen Rückschluss darauf, ob das tatsächlich der Fall ist.

Ob einer der verfügbaren DMA-Modi bereits aktiv ist, können Sie mit hdparm -d feststellen:

root # hdparm -d /dev/hda
/dev/hda:
using_dma = 1 (on)

DMA-Modus aktivieren bzw. deaktivieren

Die Aktivierung erfolgt für jede Festplatte getrennt durch hdparm -d1. -d0 deaktiviert den Modus wieder, falls das erforderlich sein sollte.

root# hdparm -d1 /dev/hda

/dev/hda:
setting using_dma to 1 (on)
using_dma = 1 (on)

Sie können mit hdparm je nach Mainboard und Festplatte einige weitere Parameter verändern:
-cn aktiviert den 32-Bit-I/O-Support
-mn dient zum gleichzeitigen Einlesen mehrerer Blöcke (Maximum: siehe MaxMultSect mit hdparm -i)
-Xn aktiviert einen bestimmten DMA-Modus (statt des Default-Modus)

Lesen Sie aber unbedingt die Manual-Seite zu hdparm, bevor Sie mit diesen Optionen experimentieren! Insbesondere die -Xn-Option ist gefährlich und kann zu einem Totalabsturz samt Datenverlust führen!

DMA-Modus testen

Zur Kontrolle, ob alles funktioniert, können Sie beispielsweise einen umfangreichen Verzeichnisbaum in eine Partition der Festplatte kopieren, für die der DMA-Modus aktiviert wurde:

root# mkdir /test-partition/test1
root# cp -a /usr /test-partition/test1
root# cp -a /test-partition/test1 /test-partition/test2

Anschließend sollten Sie einen Blick in /var/log/messages werfen: Wenn Sie dort Fehlermeldungen oder Warnungen mit dem Text DMA disabled finden, hat der Kernel den DMA-Modus nach Problemen automatisch wieder abgeschaltet. In diesem Fall gab es offensichtlich Probleme, und es ist nicht sinnvoll, den DMA-Modus zu nutzen.

Mit hdparm -tT können Sie die maximal mögliche Datenübertragungsgeschwindigkeit zwischen Festplatte und Rechner ermitteln. Sie erhalten zwei Resultate: die Geschwindigkeit für Daten im Cache der Festplatte und die Geschwindigkeit für Daten, die von der Festplatte gelesen werden müssen. Die folgenden Zeilen zeigen, dass sich die Übertragungsgeschwindigkeit durch die Aktivierung des DMA-Modus vervielfacht. (Beide Geschwindigkeiten sind allerdings eher theoretischer Natur. In der Praxis – also beim Zugriff auf reale Dateien – werden Sie geringere Datenübertragungsgeschwindigkeiten erzielen, und auch die Geschwindigkeitsunterschiede zwischen dem Betrieb mit bzw. ohne DMA werden viel weniger stark ausgeprägt sein.)

root# dparm -d0 /dev/hda

setting using_dma to 0 (off)

using_dma = 0 (off)

root# hdparm -tT /dev/hda
Timing buffer-cache reads: 388 MB in 2.01 seconds = 193.03 MB/sec
Timing buffered disk reads: 8 MB in 3.53 seconds = 2.27 MB/sec
root# hdparm -d1 /dev/hda
setting using_dma to 1 (on)
using_dma = 1 (on)

root# hdparm -tT /dev/hda
Timing buffer-cache reads: 412 MB in 2.01 seconds = 204.98 MB/sec
Timing buffered disk reads:118 MB in 3.01 seconds = 39.20 MB/sec

CD-und DVD-Laufwerke: Obwohl fast alle marktüblichen CD-und DVD-Laufwerke den DMA-Modus unterstützen, gibt es damit in der Praxis (zumindest unter Kernel 2.4.n) häufiger Probleme als mit Festplatten. Das gilt insbesondere für das Schreiben von CDs und DVDs.

Tipp: Auch wenn Sie CD- bzw. DVD-Laufwerke mit der Kernel-Option ide-scsi betreiben und daher über Device-Namen wie /dev/scd0 oder /dev/sr0 ansprechen, müssen Sie hdparm für das zu Grunde liegende IDE-Device /dev/hdb, /dev/hdc etc. ausführen.

DMA-Modus automatisch beim Rechnerstart aktivieren

Wenn Sie sich davon überzeugt haben, dass der DMA-Modus funktioniert (aber nicht ohnedies schon per Default aktiviert ist), sollten Sie Ihr System so konfigurieren, dass der DMA-Modus beim Rechnerstart automatisch aktiviert wird.

Fedora und Red Hat: Per Default entscheidet der Kernel darüber, für welche IDE-Geräte der DMA-Modus aktiviert wird. Davon abweichende Einstellungen können Sie global in /etc/sysconfig/harddisks sowie individuell für jedes Laufwerk in den Dateien /etc/sysconfig/harddiskhda, -hdb etc. vornehmen. Die harddisk-Dateien werden während des Rechnerstarts vom Script /etc/rc.d/rc.sysinit ausgewertet.

SUSE: Bei SUSE 9.0 kann der DMA-Modus durch das YAST-Modul HARDWARE|IDE DMA-MODUS gesteuert werden. Intern wird der DMA-Modus durch das Script /etc/init.d/boot.d/S06boot.idedma aktiviert. Das Script wertet die Konfigurationsdatei /etc/sysconfig/hardware aus.

Ausblick

Dieser Teil zur DMA-Konfiguration unter Linux beendet unsere Artikelserie zum Linux-Dateisystem. Die Serie basiert auf dem Kapitel 25 des Standardwerks "Linux - Installation, Konfiguration, Anwendung" von Michael Kofler aus dem Verlag Addison-Wesley. Sie können dieses über 1200 Seiten starke Buch auch in unserem Buchshop versandkostenfrei bestellen oder als eBook herunterladen. (ala)

Serie: Administration des Linux-Dateisystems

Teil 1

Dateisystemtypen

Teil 2

mount und fstab

Teil 3

CD-ROMs, Disketten, externe Massenspeicher

Teil 4

ext3 und reiserfs

Teil 5

Partitionierung der Festplatte

Teil 6

RAID mit Linux

Teil 7

LVM, Logical Volume Manager

Teil 8

DMA mit IDE-Festplatten