Das Dokument ist eine deutsche Übersetzung des " The post-halloween document." von Dave Jones. Falls Ihr Anmerkungen zu dieser Übersetzung habt, schreibt mir bitte eine E-Mail an jens@kubieziel.de.
Ich habe zum Teil Ergänzungen hinzugefügt. Diese sind durch farbliche Änderungen und durch kursive Schrift markiert.
Dieses Dokument beschreibt einige der neuen Funktionalitäten, die im neuen 2.6-Linux-Kernel zu finden sind. Weiterhin findet ihr einige typische Fallen und neue Merkmale, die noch Tests benötigen.
Beachte bitte, dass eine Bemerkung "Nimm Kontakt zu foo@bar.com auf" auch bedeutet, dass du eine Kopie an die Linux Kernel Mailingliste schicken sollst.
Die letzte Originalversion dieses Dokuments findet sich auf http://www.linux.org.uk/~davej/docs/post-halloween-2.6.txt.
Vielen Dank an alle [zu viele, um sie aufzulisten] für deren wertvolle Rückmeldungen.
Das Dokument bezieht sich auf die x86-Architektur. Doch viele Merkmale, die hier dokumentiert sind, betreffen alle Plattformen.
Eine spanische Übersetzung existiert auf http://www.terra.es/personal/diegocg/post-halloween-2.6.es.txt. Die polnische Version findet sich auf http://soltysiak.com/linux/post-halloween-2.6.pl.txt. Nunmehr ist auch auf http://www.maluco.com.br/docs/post-halloween-2.6-pt_BR.txt eine weitere hinzugekommen.
Der empfohlene Weg, um Patches für Kernelversionen 2.4 oder eher
einzuspielen, war, folgende Kommandozeile zu nutzen:
$ ls
linux-2.4.21
$ gzip -cd patchXX.gz | patch -p0
Ab den Kernelversionen 2.6 hat Linus ein Pfadelement zu den Diffs
hinzugefügt. Deshalb ist es notwendig, -p1
in dem zu
patchenden Verzeichnis zu verwenden.
$ pwd
/usr/src/linux-2.6.0-test9
$ gzip -cd patchXXX.gz | patch -p1
Viele der grossen Subsysteme des Linuxkernels haben eine eigene Mailingliste. Falls du also Fehler berichten willst, ist es immer gut, diese dahin zu senden. Falls du nicht genau weisst, wohin deine Meldung soll, sende sie an linux-kernel@vger.kernel.org.
Einige bekannte Fehler werden wieder und wieder berichtet. Unten steht, wie man diese umgehen kann:
Andi Kleen hat einen Patch geschrieben, der obiges standardmäßig einstellt, wenn das betreffende System kein Embedded-System ist. Der Patch wurde in den Kernel 2.6.0-test3 aufgenommen. Siehe hierzu auch das Changelog.
Dinge, die derzeit mit hoher Wahrscheinlichkeit nicht funktionieren
khttpd
ist weg.table
wird nicht mehr exportiert.
Jedes Modul, das sich darauf verlassen hat, funktioniert nicht mehr.make bzdisk
funktioniert weiterhin.)__init
oder
__initdata
gekennzeichnet ist, wird nach dem Laden
freigegeben. (Genauere Informationen zu diesen
Routinen
liefert der "
Unreliable Guide To Hacking The Linux Kernel" oder
/usr/include/linux/init.h
.)/etc/rc.sysinit
./proc/sys/kernel/modprobe
.
Das Initskript sucht nach /proc/ksyms
, das in den 2.5er
Kernel nicht mehr existiert. Stattdessen wird /sbin/true
genutzt./etc/rc.sysinit
, /proc/sys/kernel/modprobe
auf /sbin/modprobe
setzen. Dies muss auch passieren, wenn
/proc/ksyms
nicht existiert..ko
anstatt .o
.mkinitrd
suchen nicht nach
Modulen, die auf .ko enden. Deshalb solltest du dein mkinitrd auf den
neuesten Stand bringen, falls es bei dir ein Problem gibt.Du solltest eine bemerkenswerte Verbesserung im Durchsatz seit 2.4 bemerken. Grund hierfür ist eine Überarbeitung des Block- und Speichermanagementlayers.
Berichte, diesbezügliche Fehler oder Rückschritte an Jens Axboe und Andrew Morton.
Es gibt zwei verschiedene I/O-Speicher, die auf unterschiedliche
Arten der Belastung passen. Die Standardeinstellung ist der antizipatorische
I/O-Scheduler. Mit der Kerneloption elevator=deadline
kannst
du den Deadline-Scheduler wählen.
Für spezifische Lasten ist der antizipatorische Scheduler etwa 10% langsamer als der Deadline. Am bemerkenswertesten ist dies bei Lasten durch die Datenbank, die die gesamte Platte absuchen und dabei Lese- und synchrone Schreibaktionen durchführen. Daher werden alle Datenbank-Nutzer die obige Option wählen, um auch das letzte Stück an Performance auszureizen.
Verschiedene blockorientierte Gerätetreiber haben enorme Säuberungen hinter sich und wurden gleichzeitig auf neuere APIs aktualisiert.
Die Größe und Einstellung der O_DIRECT
-Datei-I/O-Abfragen
passt nun auf das Gerät und nicht das Dateisystem. Typischerweise bedeutet
das, dass du nun O_DIRECT
-I/O mit einer Granularität von
512 Byte statt 4kB machen kannst. Wenn du dich aber darauf verlässt, wird
deine Applikation nicht mit 2.4er Kernel funktionieren und wird auch auf
einigen Geräten nicht laufen.
Dank der Arbeit, die von Peter Chubb gemacht wurde, können nun blockorientierte Geräte bis zu 16 TB auf 32bit-Architekturen und bis zu 8 EB auf 64bit-Architekturen zugreifen.
Um die neuen BLKGETSZ64
ioctls zu nutzen, brauchst du
eine neuere Version der File-utils. (Derzeit hat nur jfsutils 1.0.20 diese
Veränderungen eingebaut. Patches für andere Dateisysteme sind noch in der
Schwebe.)
Das alte struct statfs
kann nicht große Geräte beschreiben.
Der statfs()
-Systemaufruf wird nunmehr -EOVERFLOW
für solche Geräte zurückgeben. Ein neuer Systemaufruf, statfs64()
,
wurde mit einer neuen Struktur hinzugefügt. Derzeit ist noch unklar,
wieviele Nutzerprogramme bereits konvertiert wurden, um aus diesem Aufruf
Vorteile zu ziehen.
Werkzeuge für die Benutzerebene sind bei http://acl.bestbits.at erhältlich.
Version0-Swap-Partitionen werden nicht länger unterstützt. Alle nutzen
nun V1. Wenn du Zweifel hast, lasse mkswap
laufen.
Linux 2.0.x braucht V0-Swapplatz. Ab Linux 2.1.117 wird V1 unterstützt.
mkswap(8)
unterstützt jedes Format.
Der aktuelle Teil der Rückwärtsabbildungen ('reverse mapping') von
Rik von Riels rmap
VM wurde eingebaut. Das Verhalten der VM
bei verschiedenen Lasten sollte sich verbessern.
falls du ein Fehlverhalten der VM bemerkst, berichte das bitte an linux-mm@kvack.org.
Die VM prüft explizit auf Sparse-Swapdateien und bricht ab, wenn sie eine findet.
/proc/sys/vm/swappiness
definiert die Präferenzen des
Kernel für den Pagecache und Bildspeicher (mapped memory). Wenn man dies
auf 100 (Prozent) einstellt, behandelt der Kernel beide Typen von
Speicher gleich. Wenn das hingegen auf 0 stellt, macht der Kernel lieber
eine Rückforderung von Pagecache statt von Speicher, der in Pagetables
abgebildet ist.
Der bdflush()
-Systemaufruf ist nun offiziell veraltet.
Der Systemaufruf macht nichts und druckt eine ernste Warnung an die
Nutzer aus. Die Funktionalität wurde durch die pdflush-Daemons ersetzt.
Durch diverse Veränderungen sollten Swapdateien genauso schnell wie Swappartitionen sein.
In 2.4 waren bis zu 64 Swapdateien möglich. Diese Anzahl wurde in 2.6 auf 32 reduziert. Diese Dateien können, wie auch in V2.4, bis zu 64 GB groß sein. Allerdings benötigst du ein aktuelles util-linux, um ein mkswap zu haben, das mehr als 2 GB unterstützt.
Die viel diskutierten Präemptionspatches haben es in die Version 2.6 geschafft. Damit solltest du viel weniger Latenzen spüren, wenn du Multimediaapplikationen brauchst.
Beachte: Es gibt immer noch Situationen, wo die Präemption kurzfristig abgeschaltet werden muss, wo wir es aber nicht tun. Dies tritt dann auf, wenn Pro-CPU-Daten genutzt werden.
Wenn du die Meldung xxx exited with preempt count=n im Syslog erhältst, brich nicht in Panik aus. Diese Meldungen sind nicht schwerwiegend. (Etwas sperrt und gibt diese Sperre später nicht frei.)
Falls du hohe Latenzen mit aktivierter Kernelpräemption in einem speziellen Codepfad feststellst, berichte das an Andrew Morton und Robert Love. Dein Report sollte etwas wie z.B. "Die Latenz in meinem Programm XYZ hat nnn ms, wenn ich foo mache. Normalerweise ist diese zzz". Dabei ist foo eine Aktion.
Ein weiteres viel besprochenes neues Merkmal ist der von Ingo Molnar überarbeitete Prozessscheduler, der einen O(1)-Algorithmus nutzt. Bei niedrigen Lasten solltest du keine Veränderungen feststellen. Bei einer hohen Zahl an Prozessen jedoch, speziell bei großen SMP-Systemen, sollte es eine deutlich verbesserte Skalierbarkeit geben.
Der Scheduler kennt nun Hyperthreading-SMP und wird Prozesse über physikalisch verschiedene CPUs verteilen, statt nur über logische CPUs.
Robert Love hat verschiedene Hilfsprogramme geschrieben, die das Verhalten des Schedulers (Prozesse an CPUs binden usw.) ändern. Diese Werkzeuge findest du bei http://rlove.org/schedutils.
Das verhalten von sched_yield()
hat sich sehr verändert.
Eine Aufgabe, die diesen Systemaufruf nutzt, sollte nun erwarten,
wahrscheinlich für eine sehr lange Zeit zu schlafen. Aufgaben, die nicht
gerade darauf brennen, Prozessorzeit abzugeben, sollten diesen Aufruf
nicht oft verwenden. Unglücklicherweise nutzen einige GUI-Programme, wie
Open Office,
diesen Aufruf sehr exzessiv und deshalb ist deren Performance schlecht.
Derzeit sieht es so aus, als ob das Verhalten im Kernel 2.6 optimal ist.
Trotzdem brauchen einige Programme Fixes.
Obiges trifft auch auf die Benutzung von yield()
im
Kernel zu.
2.6 fügt Systemaufrufe für die Manipulation der Prozessoraffinität
eines Tasks hinzu: sched_getaffinity()
und
sched_setaffinity()
.
Fehlermeldungen bitte an Ingo Molnar und Robert Love.
Debian-Nutzer, die komische Effekte, wie z.B. Sprünge in der MP3-Wiedergabe oder ruckartige Mausbewegungen, feststellen, sollten den X-Server davon abhalten den Nice-Wert auf -10 neu einzustellen. Du kannst das permanent mit der Eingabe dpkg-reconfigure xserver-common ändern. Falls du die Datei /etc/X11/Xwrapper.config nicht von debconf ändern lässt, musst du diese direkt editieren.
Die Balance von IRQs zwischen multiplen CPUs sollte durch das Programm irqbalance gehandhabt werden.
David Mosberger pflegt eine Website, die einige bekannte Fehler des O(1)-Scheduler enthält. Diese findet sich auf http://www.hpl.hp.com/research/linux/kernel/o1.php.
Unterstützung für PCI-Domänen wurde hinzugefügt. Für die meisten Leute heißt das, das alle Namen von PCI-Slots mit "0000:" beginnen. Leute mit größeren Servern können nun all ihre PCI-Geräte ansprechen.
Weitere Hotplug-Treiber sind neu. Dazu gehören Dummy-PCI-Hotplug-Treiber. Damit können Leute ohne spezielle Hardware Hotplug-Merkmale testen.
/dev/hwrandom erhielt Unterstützung für neue Hardware (Nunmehr auch zurück portiert auf HW RNG auf den neueren VIA Cyrix CPUs).
rng-tools können bei http://sourceforge.net/projects/gkernel gefunden werden.
Rusty Russell hat eine Funktionalität addiert, die der Benutzerebene erlauben, schnelle Mutexes zu haben. Diese nutzen nur Systemaufrufe, wenn es Probleme gibt. Diese wird NPTL genutzt.
Weitere Informationen gibt es bei Ulrich Drepper unter der URL: http://people.redhat.com/drepper/futex.pdf.
Bert Hubert hat eine Dokumentation dazu geschrieben: http://ds9a.nl/futex-manpages.
David Libenzi schrieb einen ereignisbasierten Poll-Ersatz. Dieser wurde in 2.6 mit eingebaut. Weitere Informationen hierzu sind auf http://www.xmailserver.org/linux-patches/nio-improve.html und http://lwn.net/Articles/13587/ verfügbar.
Ingo Molnar hat eine Menge Arbeit in Verbesserungen des Threadings gesteckt. Einige neue Merkmale sind:
sys_clone()
Erweiterungen (CLONE_SETTLS, CLONE_PARENT_SETTID, CLONE_SETTID,
CLONE_CLEARTID, CLONE_DETACHED
)sys_exit()
Beschleunigungen (O(1) Ausstieg)ptrace
Merkmale/proc
Verbesserungen für ThreadingNutzer sollten eine signifikante Beschleunigung in grundlegenden Threadoperationen feststellen. Dies trifft durch ein kleineres Ausmaß auch für alte Threading-Bibliotheken in Benutzerebene wie z.B. LinuxThreads zu.
Fehlermeldungen hierzu gehen an Ingo Molnar und an phil-list@redhat.com. Derartige Fehler können im Bereich des Signalhandlings und verwandten Threading-Semantiken plus Coredumping auftreten.
Native Posix Threading Library (NPTL):
Ulrich Drepper hat eng mit Ingo an Erweiterungen des Threadings
zusammen gearbeitet und eine 1:1 Modell-Threading-Bibliothek entwickelt.
Mehr dazu kannst du auf
http://people.redhat.com/drepper/nptl-design.pdf
finden.
Kernelversion 2.6 bietet die Möglichkeit, die Art wie Kerndateien
durch /proc/sys/kernel/core_pattern
benannt werden zu
konfigurieren. Du kannst verschiedene Formatbezeichner in diesem Namen
nutzen. So kannst du bestimmen, wie der Coredump benannt wird:
Du solltest absichern, dass der String nicht länger als 64 Byte wird.
Multithread Prozesse können nun auch coredumpen.
Dies ist wahrscheinlich, die am meisten sichtbare Veränderung für Endnutzer. Wenn es falsch konfiguriert ist, wirst du feststellen, dass dein(e) Tastatur/Maus/anderes Eingabegerät nicht mehr funktioniert. Version 2.6 bietet eine viel flexiblere Schnittstelle zu Geräten wie Tastaturen.
Der Nachteil sind verwirrendere Optionen. Im "Input Device Support" Menu musst du mindestens folgendes aktivieren:
--- Input I/O drivers
< > Serial i/o support
< > i8042 PC Keyboard controller
[ ] Keyboards
[ ] Mice
Wähle auch die relevante Tastatur/Maus aus der Liste.
Falls deine Tastatur/Maus immer noch nicht funktioniert, bearbeite
die Datei drivers/input/serio/i8042.c
und ersetze das
#undef DEBUG mit #define DEBUG und kompiliere neu.
Wenn du den Rechner hochfährst, findest du eine Menge an Debug-Informationen.
Leite diese an Vojtech Pavlik
weiter.
Falls du einen KVM-Schalter nutzt und Probleme feststellst, boote mit der Bootoption psmouse_noext. Dies sollte das Problem lösen.
Nutzer von Multimediatasten ohne X werden Veränderungen sehen, wie der Kernel diese Tasten handhabt. Leute, die Keymaps oder Keycodes in 2.4 angepasst haben, werden in 2.6 einige Veränderungen machen müssen.
Nutzer, die eine Unterstützung ihrer PC-Lautsprecher habenwollen, müssen CONFIG_INPUT_PCSPKR aktivieren. Sonst erhält man keinen einzigen Piep.
Nutzer von Synaptics Touchpad sollten sich http://web.telia.com/~u89404340/touchpad/ genauer ansehen.
In der Version 2.4 konnten die Besitzer von japanischen Keyboard die Zeichen | oder / eintippen ohne spezielle Keymaps auf der Konsole zu laden. Mit der Keymap in 2.6 ist dies nicht mehr möglich. Falls man diese Tastaturen nutzt, sollte man eine Keymap mit loadkeys laden. Die loadkeys-Version sollte aus den Quellen gebaut sein. Denn in einigen Distributionen kann loadkeys keine Keycodes > 127 laden. Dafür existiert ein Patch. Dieser wurde noch nicht mit eingebaut.
Unterstützung für Plug&Play-Geräte wie frühe ISAPnP-Karten wurde im 2.5er Kernel sehr verbessert. Der neue Code verhält sich näher zu dem, der PCI-Geräte verwaltet und bindet auch PnP-BIOS-Code ein.
Problemberichte der PnP-Funktionalität gehen an Adam Belay.
Die Advanced Linux Sound Architecture wurde in die V2.5 eingebaut. Dies bietet eine beträchtlich verbesserte Funktionalität gegenüber den alten OSS-Treibern. Allerdings werden neue Programme für die Nutzer gebraucht.
Einige Distributionen bieten schon seit einiger Zeit ALSA mit an. So hast du eventuell schon die notwendigen Werkzeuge dafür. Falls nicht, kannst du diese auf http://www.alsa-project.org/ finden.
ALSA kann eine OSS-Schnittstelle emulieren, indem die
snd_pcm_oss/snd_pcm_mixer
-Module genutzt werden. Wenn deine
Soundkarte nichts als Stille produziert, musst du eventuell alsamixer
laufen lassen. Dies aktiviert die Lautstärke auf Kanälen, die /dev/mixer
nicht sieht.
Beachte, dass die OSS-Treiber noch funktionieren und auch noch da sind. Viele Merkmale oder Fixe, die in 2.4 eingebaut wurden, sind noch nicht in den Treibern drin. Es ist derzeit noch unklar, ob die Treiber in den neuen 2.6-Kernel enthalten sein werden. Das Langzeitziel ist, dass alle zu dem (überlegenen) ALSA migrieren.
Der agpgart-Treiber bekam eine lang fällige Säuberung. Dabei wurde dieser in einen agpgart-Kern und Pro-Chipsatz-Treiber aufgeteilt. Du musst eventuell deine Modulkonfiguration anpassen, um die Chipsatztreiber zu laden, wenn das Hauptmodul geladen wird.
Generische AGP-3.0-Unterstützung ist nun eingeschlossen.
In der Version 2.6 gab es bislang nur wenige (wenn überhaupt) Tests für ältere Versionen von XFree86. Feedback, ob es funktioniert, wäre sehr nützlich.
Systeme, die die SYSENTER
-Erweiterung unterstützen
(hauptsächlich Intel II und höher und AMD Athlon), haben nun eine
schnellere Methode, die Übertragung von Benutzerebene in den Kernelraum zu
machen, wenn ein Systemaufruf stattfindet.
Pentium Pro hat ebenfalls SYSENTER
, ist aber durch einen
Fehler unbenutzbar.
Ohne eine aktualisierte glibc wird man dies nicht feststellen.
VMWare-4-Nutzer bekommen deswegen eventuell Abstürze. Zwane Mwaikambo schrieb einen Patch für eine "nosysenter"-Option. Es ist wert, danach zu googeln, falls es kein VMWare-Update gibt.
Fehlermeldungen an Linus Torvalds und libc-alpha@sources.redhat.com.
Das 2.6 /proc
-Dateisystem ändert ein paar Statistiken.
Das verwirrt ältere Versionen von procps. Rik van Riel und Robert Love
pflegten eine Version von procps während der Entwicklung von 2.6. Diese spürt
Änderungen von /proc/
auf. Finden kannst du das auf
http://rlove.org/procps/.
Alternativ unterstützt das procps von Albert Cahalan die geänderten Formate seit v3.0.5 - http://procps.sourceforge.net/.
Das Format von /proc/meminfo
änderte sich leicht. Dies
führte auch zu merkwürdigen Problemen mit gtop. Wahrscheinlich machte
das auch einige KDE/GNOME-Applets in der Menuleiste kaputt.
James Simmons hat die Framebuffer/Consoleschicht merklich in 2.6 verbessert. Die Unterstützung für einige Karten hängt noch ein wenig. Aber es sollte funktionell keine Unterschiede zu vorherigen Versionen geben.
Die Bootoptionen haben sich in Abhängigkeit von deinem Treiber
vielleicht geändert. Ein Beispiel dafür ist:
append = "video=radeon:1024x768-24@100"
wird zu
append = "video=radeonfb:1024x768-24@100"
Einige Werkzeuge, wie z.B. fbset, sind noch nicht aktualisiert.
Der VESA-Framebuffer aktiviert nun MTRRs für die Framebuffer-Speicherbereich während der Initialisierung (Notiz: Nur PCI-Karten). Falls du korrupte Darstellungen feststellst, berichte das bitte mit einer Ausgabe von lspci. Dann wird deine Karte auf eine schwarze Liste gesetzt.
Alle Problemberichte gehen an James Simmons.
Die Überarbeitung des IDE-Code war Gegenstand vieler Kritiken in den zeitigen 2.5.x-Versionen. Einige Leute testeten dadurch nicht mehr. Diese Arbeit wurde dann nachträglich raus geworfen und man kehrte zu dem Status von 2.4.18 zurück. Seitdem gab es einiges an zusätzlicher Arbeit. Aber nicht in dem Ausmaß wie die ersten Säuberungsversuche.
Bekannte Probleme mit dem derzeitigen IDE-Code sind:
ide-scsi
ist in 2.5.x komplett kaputt. Bekanntes Problem.
Falls du das brauchst, nutze 2.4 oder schreibe einen Fix 8)IDE-Geometrie-Umsetzer wie OnTrack, EZ Partition, Disk Manager werden nicht mehr länger automatisch erkannt. Der einzige Weg ist, den Umsetzer zu entfernen und neu zu starten oder entsprechende Bootparameter in Abhängigkeitvom genutzten Programm zu setzen:
Schaue dir auch die CD-Aufnahme-Sektion an, um Informationen über wichtige Änderungen der IDE CD Treiber zu erhalten.
Tagged Command Queueing für IDE wurde eingebunden.
Nicht alle Kombinationen von Controllern und Geräten mögen dies. So sei
vorsichtig.
LIES DAS ALS: Nutze kein IDE
TCQ bei allen Daten, auf die du Wert legst.
Es ist wahrscheinlich, dass problematische Kombinationen auf eine schwarze
Liste kommen, wenn derartiges entdeckt wird.
Falls du nicht die Option "TCQ on by default" gewählt hast,
kannst du sie durch
echo "using_tcq:32" > /proc/ide/hdX/settings
aktivieren. Wenn du die 32 durch 0 ersetzt, deaktivierst du TCQ wieder.
Berichte Erfolgs-/Fehlerstories an Jens Axboe und sende die Ausgabe von hdparm -i /dev/hdX und lspci mit.
Einige SCSI-Treiber brauchen noch arbeiten und werden noch nicht einmal kompilieren.
Einige Treiber verursachen
Warnungen beim Kompilierprozess durch fehlende abort:
und
reset:
-Funktionen.
Einige haben diese entfernt und es fehlt immer noch eine Fehlerbehandlung. Diese sind derzeit ncr53c8xxx, sym53c8xx.
Es existiert Unterstützung für große dev_t. Dies erlaubt die Unterstützung von Tausenden von Platten (war 128 oder 256 im 2.4)
Große Aufräumarbeiten beim Code. Ursprünglich wurden die gemacht, um blockorientierte Schicht zu verbessern. Dies führt zu:
Verbesserter Fehlerverarbeitungs- und -scancode (Unterstützung für große LUN)
Eine Menge an SCSI-Treiber-Interna ist erhältlich via sysfs.
Die video4linux-API bekam ihre lang erwartete Säuberung.
xawtv, bttv sowie die meisten anderen existierenden v4l-Werkzeuge sind auch mit der v4l2-Schicht kompatibel. Du solltest keinen Verlust an Funktionalität feststellen.
Mehr Informationen gibt es auf http://linux.bytesex.org/v4l/.
Das neue Quotasystem braucht neue Programme und unterstützt 32bit UIDs. http://www.sourceforge.net/projects/linuxquota/
Jens Axboe fügte die Möglichkeit der Nutzung von DMA zum Schreiben auf ATAPI Geräten hinzu. Das Beschreiben von CDs sollte nun viel schneller als in Version 2.4 sein. Außerdem ist es auch weniger fehleranfällig bei Bufferunderruns und ähnlichem.
Mit einem aktuellen cdrecord brauchst du nicht länger die ide-scsi-Emulation, um einen IDE-CD-Brenner zu betreiben.
Audiospuren von einer CD zu lesen nutzt ebenfalls DMA und sollte bemerkenswert schneller sein. Eine aktualisierte Version von cdda2wav findest du auf: ftp://ftp.de.kernel.org/pub/linux/kernel/people/axboe/tools/
Sende positive wie negative Berichte über Audioextraktion mit cdda2wav und Brennen mit dem modifizierten cdrecord an Jens Axboe.
Derzeit funktioniert nur "open device by name" in cdrecord
cdrecord -dev=/dev/hdX -inq
Weitere Informationen finden sich auf http://lwn.net/Articles/13538/ und http://lwn.net/Articles/13160/.
Die USB-Host-Controller wurden in 2.6 umbenannt:
Es gibt wenige Veränderungen, die für den Nutzer sichtbar sind. Die einzige bemerkbare größere Veränderung ist, das es nun nur noch einen UHCI-Treiber gibt. usbdevfs wurde in usbfs geändert.
USB-storage hat ein verändertes Verhalten. Ein Gerät, was zunächst entfernt und dann wieder verbunden wird, wird nicht wieder mit dem alten Knoten in /dev verbunden.
USB-storage bekam des weiteren einige Performanceerweiterungen.
Es gibt eine neue "USB Gadget"-Schnittstelle, die jetzt USB-Geräte unterstützt, die Linux als Betriebssystem nutzen. Dies betrifft z.B. PDAs, Kabelmodems und einige Drucker. Diese API beschreibt, wie der Treiber für den USB-Gerätecontroller (UDC) mit den portablen "Gadgettreibern" spricht. Ein Gadgettreiber ist das, was die Hardware wie eine Netzwerkverbindung oder einen Drucker arbeiten lässt.
Falls du keinen Gadgettreiber im Kernel schreiben möchtest, kannst du das mit "gadgetfs" im Benutzermodus tun. Jeder Endpunkt erscheint als einzelne Datei. Daher ist es um ein Vielfaches einfacher als usbfs. Derzeit läuft es synchron, aber sollte kein Problem sein, Unterstützung für AIO hinzuzufügen.
Schaue dir http://www.linux-usb.org/gadget für weitere Informationen zu dieser API an. Dies schliesst ein pthread-Beispielprogramm für "gadgetfs" ein. Ein weiterer Punkt für Informationen sind die Kerneldokumentationen des 2.6er Kernel.
Der stat64()
-Systemaufruf wurde so geändert, dass er
augenblickliche Granularität zurück gibt. Dies ermöglicht make(1)
bessere Entscheidungen zu treffen, ob oder ob nicht eine Datei wieder
kompiliert werden muss. Nicht alle Dateisysteme unterstützen eine
derartige Präzision.
Dadurch erhaltet ihr viel genauere Zeitangaben. Stellt euch
vor, im Makefile steht die Zeile:
foo: foo.c
gcc -o foo foo.c
Bei einem neuen Makelauf muss entschieden, ob foo.c neuer als foo ist und falls
dies so ist, muss neu kompiliert werden. Wenn bei einer alten Kernelversion die
Änderungszeiten für beide Dateien sehr eng beieinander liegen, waren sie gleich
alt. Mit der neuen Kernelversion sind die Zeitangaben genauer.
Eine Anzahl von zusätzlichen Dateisystemen haben es nach 2.6 geschafft.
Derzeit werden folgende unterstützt:
Während diese außerhalb des Kernelbaums getestet wurden, ist das Niveau an Tests nach der Hereinnahme einmalig. Sei vorsichtig, wenn du vertrauensvolle Daten auf unausgereiften Dateisystemen hast. Eine Vielzahl von neuen Merkmalen und Verbesserungen wurden auch an den schon in 2.4 existierenden Dateisystemen gemacht.
Vorliegende Berichte von Belastungstests mit verschiedenen Tools wären sehr nützlich.
Seit Linux 2.5.1 ist es möglich, einen Unterbaum atomar an einen
anderen Platz zu verschieben. Die Benutzung ist:
mount --move olddir newdir
Seit 2.5.43 setzt dmask=value
die umask nur für die
Verzeichnisse. Der Standard ist die umask des Prozesses. fmask=value
setzt die umask nur für reguläre Dateien. NOCHMAL, der Standardwert ist
die umask des aktuellen Prozesses.
Verzeichnisse können nun mit chattr +S
als synchron
markiert werden. Dadurch werden alle Veränderungen sofort auf die Platte
geschrieben.
Dies garantiert keine Atomarität, speziell nicht für alle Dateisysteme
und für alle Operationen. Man kann garantieren, dass Systemaufrufe erst
dann zurückkehren, wenn die Veränderungen auf der Platte sind. Dies hat natürlich einige signifikante Auswirkungen auf die Performance.
devfs wurde ein bisschen aufgeteilt und eine Menge an doppelter Funktionalität wurde entfernt. Du musst nun CONFIG_DEVPTS_FS=y aktivieren und das devpts-Dateisystem in derselben Weise mounten, wie wenn du kein devfs nutzt.
2.5.49 schloss eine Erweiterung von ext2 ein. Diese verhindert, dass buffer_head-Strukturen nicht an den Datei- oder Verzeichnisseitenspeicher angehangen wird, nie. Das ist für Maschinen mit sehr viel Arbeitsspeicher. Es wird mit der -o nobh-Mount-Option aktiviert.
Das ext2-Dateisystem nutzt nun ein feinkörnigeres Locking, welches zu reduzierten Kontext-Switch-Raten und höherem Durchsatz auf großen SMP-Maschinen führt.
Das ext3-Dateisystem hat indizierte Verzeichnisunterstützung erhalten. Diese offeriert beachtenswerte Performancegewinne, wenn das Dateisystem auf Verzeichnissen mit einer hohen Anzahl von Dateien genutzt wird.
Um das htree-Merkmal zu nutzen, brauchst du mindestens Version 1.32 der e2fsprogs.
Existierende Dateisysteme können mit tune2fs -O dir_index /dev/hdXXX konvertiert werden.
Die letzte Version von e2fsprogs gibt es auf http://prdownloads.sourceforge.net/e2fsprogs.
Die ext2- und ext3-Dateisysteme haben neue Dateialloziierungspolicies ("Orlov Allocator"). Dieser platziert die Unterverzeichnisse näher beieinander auf der Platte. Dies zielt darauf, dass Operationen, die viele Dateien in einem Verzeichnis berühren, viel schneller sind, wenn dieser Verzeichnisbaum unter einem 2.5er Kernel gemacht wurde.
Reiserfs unterstützt nun Inodeattribute, wie z.B. unveränderlich (immutable). (Dies gab es schon in 2.4.17. So ist es nicht ganz neu.)
Unterstützung für verschobene oder Nicht-Standard-Größen Journals (wurde auch in 2.4.22pre3 portiert)
Unterstützung für Schreibzugriffe größer als 4 kB, was eine Geschwindigkeitsverbesserung beim Schreiben von großen Dateien bringt. (Speziell im Anhängemodus). Dies sollte auch mehr SMP-freundlich sein.
Unterstützung für variable Blockgrößen (z.B. kann man jede Blockgröße
in der Spanne von 1024 und PAGE_CACHE_SIZE
wählen, es muss
eine Zweierpotenz sein.)
Grundlegende Unterstützung für NFSv4 wurde hinzugefügt (Server und Client).
Zusätzlich unterstützt kNFSD Transport über TCP. Dieses experimentelle Merkmal ist für 2.4.20 überführt worden.
Berichte über die Interoperabilität mit anderen Betriebssystemen wären nützlich.
v1.0.3 der nfs-utils unterstützt die neueren 2.5er Veränderungen des kdev_t Typs. Du kannst das bei NFS bekommen.
Probleme an nfs@lists.sourceforge.net.
Ein neuer, umgearbeiteter NTFS-Treiber kam nach 2.6. Er hat folgende Hauptnutzen gegenüber dem alten Treiber:
mmap()
In einfachen Worten: Das sysfs-Dateisystem ist ein einfacher und
gemeinsamer Weg für
Treiber, ihre Interna zu exportieren, als /proc
.
Dieses Dateisystem wird immer mit einkompiliert und kann wie jedes andere
Dateisystem gemountet werden. Keine anderen Werkzeuge aus der Benutzerebene
als cat(1) und echo(1) werden benötigt. Weiterhin ist tree(1) ein gutes
Werkzeug, um die Gesamtstruktur anzuschauen:
mount -t sysfs none /sys
Schaue dir Documentation/filesystems/sysfs.txt für weitere Informationen an.
IBMs JFS wurde während 2.6 eingebaut und auch für 2.4.20 verfügbar gemacht. Trotzdem war es hier ein neues Merkmal. Über JFS kannst du dich bei JFS-Projektseite informieren.
Das SGI XFS Dateisystem wurde mit eingebracht und hat eine Anzahl von
Features für die Benutzerebene. Nutzer sollten XFS: A high-performance
journaling filesystem
für weitere Informationen lesen.
Die
verschiedenen Programme, um XFS-Volumes zu schaffen und manipulieren,
finden sich auf dem FTP Server von SGI:
xfsprogs.
Programme und Dokumentation für das Common Internet File System (CIFS)
finden sich auf
CIFS VFS
- Advanced Common Internet File System for Linux
.
CVF (Compressed VFAT) Unterstützung wurde entfernt. Das bedeutet, dass du nicht länger auf Partitionen zugreifen kannst, die mit DriveSpace formatiert wurden.
Dateien in diesem Dateisystem haben Rückhalt durch große Seiten (large pages). Documentation/vm/hugetlbpage.txt hat mehr Details.
/proc/filesystems
werden verschiedene Dateisysteme
enthalten, die nicht in Benutzerebene mountbar sind, aber intern vom Kernel
genutzt werden, um über Dinge die Übersicht zu behalten. Unter diesen sind
futexfs und eventpollfs.
In 2.6 wurde wurde Untersützung für Kernel AIO eingebunden.
AIO aktiviert sogar einen einzelnen Anwendungsthread I/O-Prozesse mit mit anderen Prozessen zu überlappen. Dies geschieht, indem eine Schnittstelle angeboten wird, wo ein oder mehrere I/O-Abfragen in einen Systemaufruf (io_submit), ohne auf dessen Beendigung zu warten, und eine separate Schnittstelle (io_getevents), um fertige I/O-Operationen zu ernten, geboten wird. Letzteres wird mit einer gegeben Komplettierungsgruppe assoziiert.
Folgendes ist eine kurze Zusammenfassung, was heute wie erwartet funktioniert:
Und was nicht wie erwartet funktioniert oder noch nicht unterstützt ist:
-EINVAL
berichtet.Du musst libaio-0.3.92 installieren, wenn du AIO-Anwendungen schreibst, die native AIO-Schnittstellen nutzen.
Auf der Seite Kernel AIO support findest du weitere Informationen zu AIO.
Ein systemweiter Performanceprofiler ist ab 2.6 im Kernel. Wenn diese Option einkompiliert ist, bekommst du ein oprofilefs-Dateisystem, dass du mounten kannst. Mehr darüber kannst du auf der Projektseite von OProfile herausfinden.
Du brauchst ein geändertes readprofile-Programm in 2.6. Dies ist in util-linux ab V2.11z präsent.
Linux unterstützt diverse neue BIOS-Erweiterungen.
Die SBF-Spezifikation ist eine x86-BIOS-Erweiterung, die verbesserte Bootgeschwindigkeiten erlaubt. Dies macht es dadurch, indem es ein CMOS-Feld markiert, um zu sagen "Das Booten war in Ordnung, überspringe das ausgedehnte POST beim nächsten Mal".
Nutzertools finden sich in sbf.c.
Weitere Informationen zu SBF gibt es auf WHDC.
Unterstützung für BIOS Enhanced Disk Drive Services (EDD) wurde hinzugefügt. Dies exportiert Informationen darüber, was das BIOS denkt, was die Bootplatte ist und weitere nützliche Informationen, nach /sys/firmware/edd.
Matt Domsch interessiert sich für Erfolg/Niederlagen bei diesem Code. Einfache Tests sind auf seiner Seite beschrieben. Derzeit sammelt er keine Resultate mehr.
Der Code für die CPU-Erkennung wurde ziemlich heftig durch gerüttelt. Um sicherzugehen, dass deine CPU alle relevanten Workarounds hat, schaue nach, ob diese korrekt erkannt wurde. cat /proc/cpuinfo sagt, was der Kernel denkt, was es ist.
Der x86 MTRR Treiber bekam eine ähnlich bemerkenswerte Überarbeitung.
Prüfe, ob XFree86 MTRRs auf die selbe Weise wie in 2.4 setzt. (Fehler
werden nach /var/log/XFree86.0.log
geschrieben.)
Frühe PII Xeon Prozessoren und wahrscheinlich weitere frühe PII Prozessoren brauchen Microcode-Aktualisierungen entweder vom BIOS oder vom Microcodetreiber. Dies umgeht die Bugs, die der O(1)-Scheduler aufgedeckt hat. Die relevanten Werkzeuge finden sich bei Microcode.
Jeder Fehler in beiden sollte an mochel@osdl.org mit Cc: davej@codemonkey.org.uk gehen.
Das Betreiben von verschiedenen AMD-Prozessoren in SMP-Maschinen ist
abseits der Spezifikation und wird den Kernel mit dem 'S'-Flag
verderben. Zwei Athlon XPs z.B. scheinen gut zu funktionieren. Aber es
macht es auch schwierig, Fehler zu finden.
Es ist wahrscheinlich, dass diese Probleme erweitert werden, um andere
Fälle, die außerhalb der Spezifikation liegen, zu finden.
Wenn du versuchst, das Laden eines Modules mit insmod -f zu erzwingen, wird die neue Modulschnittstelle den Kernel verderben.
2.6 enthält einen aktuelleren Schnappschuss des ACPI-Treibers. Falls du beim Hochfahren Probleme feststellst, versuch das Argument acpi=off zu nutzen. Das schaltet jegliche ACPI-Interaktion aus. ACPI ist vielmehr mit eingebunden, das System zu booten, als es noch in 2.4 der Fall war.
Die alte acpismp=force-Bootoption ist nunmehr obsolet geworden und wird ignoriert, da der alte "mini ACPI"-Parser entfernt wurde.
Software Suspend ist noch in der Entwicklung begriffen und braucht mehr Arbeit. Die Nutzung mit SMP und/oder PREEMPT wird nicht empfohlen.
Der ACPI-Code macht grundlegende, vernünftige Tests mit der DMI-Struktur im BIOS. Dies geschieht, um das Datum, an dem es geschrieben wurde, festzustellen. BIOSe, die vor 2000 hergestellt wurden, werden als kaputt angenommen. In einigen Umständen ist die Annahme falsch. Falls du eine Nachricht siehst, die dir sagt, dass ACPI aus diesem Grund deaktiviert wurde, versuche mit acpi=force zu booten. Falls das funktioniert, sende die Ausgabe von dmidecode und eine Erklärung, warum das BIOS nicht auf der schwarzen Liste stehen sollte an acpi-devel@lists.sourceforge.net.
Einige Prozessoren haben die Möglichkeit, ihre Spannung/Takt zu skalieren. 2.6 führt eine Schnittstelle zu diesem Merkmal ein. Documentation/cpufreq hat weitere Informationen. Diese Funktionalität deckt auch weitere Merkmale wie Intels SpeedStep und das Powernow!-Merkmal, das man in mobilen AMD Athlon Prozessoren findet, ab. Zusätzlich zu den x86 Varianten unterstützt dieses Gefüge auch verschiedene ARM CPUs. Einen Daemon für die Benutzerebene, der die Batterie überwacht und justiert, findet sich auf: cpufreqd/.
Der Maschinencheckhandler wurde so erweitert, dass es regelmäßig nach Problemen beim AMD Athlon und Intel Pentium IV Systemen pollt. Dies kann in Maschinencheckausnahmen resultieren, die häufiger als bei Systemen, die nicht der Spezifikation entsprechen, in 2.4 auftreten. (Übertakten/nicht adäquate Kühlung usw.)
Der LVM1-Code wurde komplett entfernt und mit einem besser gestalteten Devicemapper ersetzt. Dieser ist rückwärts kompatibel mit dem LVM1-Format.
Der Devicemapper braucht neue Werkzeuge zu managen. Diese bekommst du von sistina.com.
Während der Stabilisierungsperiode ist es wahrscheinlich, dass die Debugoptionen im Kernelhackingmenu einige Probleme verursachen. Bitte berichte jedes dieser Probleme an linux-kernel@vger.kernel.org, anstatt die entsprechende CONFIG-Option zu deaktivieren.
Die Zusammenführung von kksymoops bedeutet, dass der Kernel automatisch decodierte Oopse ausspuckt (Du brauchst diese nicht mehr durch ksymoops zu schicken.). Deshalb solltest du immer die Option "Load all symbols for debugging/kksymoops" im Kernel hacking menu aktivieren.
Tests mit CONFIG_PREEMPT wird ebenfalls die Menge an Debugcode erhöhen. Kernelpräemption gibt uns die Möglichkeit, einen ganzen Haufen von Debugprüfungen, wie z.B. Schlafen mit gehaltenen Sperren, Scheduling während atomar, Ausstieg mit gehaltenen Locks usw., zu machen.
Der empfohlene Compiler für x86 ist immer noch 2.95.3.
Wenn der Kernel mit einem modernen gcc, wie gcc 3.x kompiliert wird, macht 2.6 einige zusätzliche Optimierungen, die 2.4 nicht ausgeführt hat.
Nutze nicht gcc 3.0.x auf x86 wegen eines Stackpointerfehlers.
gcc 2.96 ist nicht mit CONFIG_FRAME_POINTER=y unterstützt wegen eines Stackpointerfehlers.
Verschiedene Sicherheitsfälle, die in 2.4 gelöst wurden, sind eventuell noch nicht auf 2.6 portiert worden. Deshalb sollten keine 2.5er Kernel auf nicht vertrauenswürdigen Systemen eingesetzt werden. Tests von bekannten Exploits aus 2.4 und ein Bericht der Resultate ist sehr nützlich.
Das Security-Enhanced-Linux (SELinux) der
NSA
wurde in 2.6 hineingenommen.
Normalerweile ist es deaktiviert und kann mit dem Bootparameter selinux=1
aktiviert werden.
Die SELinux-Werkzeuge und eine Beispielkonfiguration kannst du bei der
Projektseite der NSA bekommen.
Einige Applikationen veranlassen den Kernel, Warnungen über process xxx using obsolete setsockopt SO_BSDCOMPAT auszuspucken.
<asm/socket.h>
. Eine neue Kompilation ist alles, was
nötig ist.host
Paket nicht tut.snmpd
nutzt obsolete setsockopt
SO_BSDCOMPAT.snmptrapd
nutzt obsolete setsockopt
SO_BSDCOMPAT.Nutzer von Rechnern mit mehr als einer Netzwerkkarte werden bemerken,
dass eth0 und eth1 auf genau die verkehrten Karten wie in 2.4 zeigen.
Dies ist ein Fehler und wird noch vor 2.6.0 berichtigt. Eine Option, dies
zu beheben, ist, nameif
zu nutzen, um Ethernet Schnittstellen
zu benennen. Es existiert ein
HOWTO,
wie das zu tun ist.
Unterstützung für diverse neue RfCs
Linux erreicht einen Überlastungskollaps, wenn sehr starke Last auf dem
Netzwerk auftritt. NAPI berichtigt dies, neben anderen Dingen, und
verbessert deshalb die Netzwerkperformance.
Mehr Informationen auf
usenix-paper.tgz
und
NAPI
SCTP ist ein
IP-basiertes, nachrichtenorientiertes, verlässliches Protokoll mit
Überlastungskontrolle, Unterstützung für transparentes Multihoming und
verschiedene geordnete Ströme von Nachrichten. RfC 2960
ist das Kernprotokoll.
Mehr Informationen finden sich auf
RfC 2960
und über die Kernelimplementation auf
lksctp.
ANSI/IEEE 802.2 LLC type 2 Unterstützung
Volle Implementation des LLC 1 und 2-Stacks, der von Appletalk, IPX und
Token Ring genutzt wird. Des weiteren wird er für das (noch nicht
funktionierende) NetBEUI und für Linux SNA benötigt.
Dies basiert auf dem Stack, der durch die Procom Inc. für den 2.0.30-Kernel
veröffentlicht wurde.
Eine generische Crypto-API wurde eingebaut und bietet Unterstützung für verschiedene Algorithmen (HMAC, MD4, MD5, SHA-1, SHA256, SHA384, SHA512, DES, Triple DES EDE, Blowfish, Twofish, Serpent, AES, CAST5, CAST6).
Diese Funktionalität wird von IPSec und crypto-loop genutzt. Es ist möglich, dass es später auch durch ein Cryptogerät in Benutzerebene verfügbar sein wird.
Das Loopbackdevice im Kernel kann auch Crypto mit der CryptoAPI nutzen. Du brauchst eventuell weitere Programme dazu.
Es gibt ein Handbuch für die Migration von Cryptoloop von 2.4 auf 2.6.
ram<n>
statt rd<n>
und cm206
ist cm206cd
(statt cm206).usbfs
in derzeitigen 2.4 Kernel und ab 2.5.52 gemountet
werden. Das Dateisystem wird künftig so heißen.2.6 unterstützt eine Reihe neuer Architekturen:
Der 64bit s390x Port wurde zu einem einzigen Port zusammen geworfen. Dies erscheint als eine Konfigurationsoption in der s390 Architektur.
In der anderen Richtung wurde arm26 von arm getrennt.
Die x86-Architektur bekam auch Unterstützung für Subarchitekturen, um "komische" x86-Kisten (normalerweise Spielzeuge grosser Jungs). Die derzeit unterstützten Architekturen umfassen:
Version | Änderungen | Datum |
0.77 | Broken links gefixt | 2006-08-15 |
0.77 | Verweis auf nichtexistente Seite gelöscht | 2005-07-21 |
0.76 | Linkfix | 2005-06-19 |
0.75 | kleinere Korrekturen, URLs geaendert | 2005-04-13 |
0.74 | Grammatik bei CPU Frequenzskalierung | 2004-06-22 |
0.73 | Schreibfehler agpart beseitigt | 2004-06-19 |
0.72 | Erklärung zu stat64() | 2004-04-19 |
0.71 | Kleinere Fehler im HTML-Code beseitigt | 2004-02-25 |
0.70 | Änderungen von V0.48 des Originaldokuments eingebaut | 2004-01-12 |
0.65 | Änderungen vom Originaldokument eingebaut | 2003-12-10 |
0.61 | Arno Brauß berichtete, dass einige Versionsnummern nicht ganz korrekt sind. Dies wurde korrigiert. | 2003-10-29 |
0.6 | Änderungen der Version 0.44 von Dave eingepflegt | 2003-10-21 |
0.51 | Anmerkungen von Arthur Korn eingepflegt. Dies betraf eine bessere Übersetzung beim I/O-Subsystem und den entfernten Merkmalen. | 2003-09-17 |
0.50 | Dave hat einige Anpassungen im Originaldokument. Diese wurden mit eingepflegt. | 2003-09-15 |
0.42 | Jörg Sommer hatte weitere kleinere Verbesserungen in der Übersetzung. | 2003-08-17 |
0.4 | Inhaltsverzeichnis eingefügt Jan-Benedict Glaw hat einige Verbesserungsvorschläge. Diese wurden mit eingearbeitet. |
2003-08-08 |
0.3 | innards=internals laut Dave Jones Änderungen von Jörg Sommer eingebaut. |
2003-08-06 |
0.2 | kleinere Übersetzungsfehler beseitigt | 2003-08-05 |
0.1 | Initialversion | 2003-08-01 |