zurück zum Artikel

Kernel-Log – Was 2.6.38 bringt (4): Storage

| Thorsten Leemhuis

Der im März erwartete Kernel enthält mit LIO ein neues Target-Framework zum Aufsetzen von Storage Area Networks (SANs). Neu sind auch die Kernel-seitige Prüfung auf Medienwechsel in Laufwerken und einige für Desktop-Systeme interessante Optimierungen im Device Mapper.

Nach der Freigabe des RC6 am Dienstag vergangener [1] Woche dürfte in Kürze die siebte Vorabversion von 2.6.38 erscheinen, mit der die Entwicklung der 38er-Kernels langsam die Zielgerade erreichen dürfte. Der RC7 wird einen kürzlich auf der LKML diskutierten Fehler [2] im Btrfs-Code beseitigen [3], durch den eine kopierte Datei unter Umständen leer ist, wenn man sie erst kurz zuvor angelegt hat und mit aktuellen Versionen des zu den Coreutils gehörenden "cp" kopiert.

Das Kernel-Log [4] will derweil die Mini-Serie "Was 2.6.38 bringt" mit der Beschreibung der Neuerungen rund um Storage-Themen fortsetzen. Der erste Teil [5] der Serie hatte sich mit den Änderungen rund um Grafik-Hardware beschäftigt, der zweite [6] mit Dateisystemen und der dritte [7] mit Netzwerk-Code; folgen werden in den kommenden Wochen noch Artikel zu Architektur- und Infrastruktur-Code sowie Treibern für Audio-, USB- und Video-Hardware.

Zum SCSI-Subsystem stieß [8] das im Rahmen von linux-iscsi.org [9] entwickelte Multiprotocol Storage Target, kurz LIO. Mit ihm lassen sich Datenträger als SCSI-Targets aufsetzen, auf das andere Systeme per iSCSI, Fibre Channel oder FCoE (Fibre Channel over Ethernet) zugreifen. Diese Lösung zum Einrichten eines SAN (Storage Area Network) ersetzt bald das schon länger im Kernel enthaltene STGT (SCSI Target Framework; Kernel-Konfigurations-Option CONFIG_SCSI_TGT). Auch die Entwickler des SCST [10] (SCSI Target Subsystem for Linux) hatten ihre Lösung als Ersatz propagiert, zogen aber den Kürzeren. Dafür waren neben einigen technischen Aspekte vor allem die Abwägung des SCSI-Subsystem-Verwalters [11] verantwortlich, mit welcher Entwickler-Community die Kernel-Hacker langfristig besser zusammenarbeiten können. In SCST-Kreisen hat das hier und da zu Unmut geführt, da einige SCST als die bessere Lösung ansehen.

Architektur der bei 2.6.38 integrierte SCSI-Target-Impementation LIO.

Architektur der bei 2.6.38 integrierte SCSI-Target-Impementation LIO.

(Bild: linux-iscsi.org)

Einen Kurzüberblick über die Funktionen von LIO liefert der Commit-Kommentar [12]. Einige Hintergründe zu den technischen Unterschieden zwischen den verschiedenen SCSI-Target-Implementationen und den Aspekten zur Festlegung auf LIO liefert der LWN.net-Artikel "A tale of two SCSI targets [13]".

Die Entwicklung des maßgeblich von der Firma Rising Tide Systems [14] vorangetriebenen LIO ist keineswegs abgeschlossen. So entfernten die Kernel-Hacker zwischen Rc5 und Rc6 das bislang zu LIO gehörende und versehentlich mit ihm integrierte Procfs-Interface [15], um das nicht langfristig pflegen zu müssen; möglicherweise soll ein Sysfs-Interface als Ersatz entstehen. Einige für 2.6.39 eingereichte, aber noch zu begutachtende Patches [16] rüsten das Modul TCM_Loop Virtual SCSI nach, das eigentlich schon Bestandteil von 2.6.38 hatte werden sollen und eine lokale SPC-4-SCSI Emulation für beliebige lokale Raw-Devices ermöglicht. Außerdem stieß fürs Erste [17] nur die Target-Engine des modular aufgebauten LIO zum Kernel. Die Protokolltreiber sollen bei 2.6.39 folgen – darunter einer für iSCSI, FCoE und FC mit HBAs von QLogic.

Über ein von Tejun Heo eingebrachtes "In-Kernel Polling Framework [18]" kann der Kernel jetzt selbst auf den Tausch von Wechseldatenträger (etwa Speicherkarten oder optische Medien wie DVDs) prüfen, indem es die Geräte regelmäßig befragt. Bei einem Wechsel informiert der Kernel Userland-Anwendungen wie Desktop-Umgebungen – die brauchen dadurch nicht mehr selbst auf Medientausch testen, was einige im Commit-Kommentar kurz erläuterte Problemen mit sich brachte.

Die Kernel-Prüfung hat zudem geringeren Overhead und sollte weniger Strom verbrauchen. In der Voreinstellung ist die über Sysfs einstellbare [19] Abfrage durch den Kernel aber deaktiviert, um Störungen beim Zusammenspiel mit bestehenden Userland-Lösungen zu vermeiden. Weitere Hintergründe dazu liefert LWN.net in "Reworking disk events handling [20]".

Über neue Schnittstellen [21] kann der Device Mapper auf Funktionen des Subsystems MD (Multiple Devices) zur Verwaltung von Software-RAIDs zugreifen, die für die RAID-Level 4, 5 und 6 zuständig sind. Zusammen mit einer frischen Version von Dmraid sollte das langfristig für eine bessere Unterstützung der von vielen Mainboard-Chipsätzen gebotenen Host-RAID-5-Funktionen sorgen, für die bislang spezielle Kernel-Patches erforderlich waren, die manchen Distributionen nicht beiliegen.

Durch den Einsatz von mehreren Workqueues [22] in Dmcrypt nutzt der Device Mapper (DM) nun Multi-Core-Prozessoren besser und sollte so flotter ver- und entschlüsseln. Neu sind auch Multi-Key-Fähigkeiten [23] für Dmcrypt, um verschiedene Blöcke eines Datenträgers mit unterschiedlichen Keys zu verschlüsseln; die ebenfalls neue Unterstützung [24] für den Loop-AES Block Device Encryption System [25] setzt darauf auf. Der DM-Code für Mirroring/RAID1 leitet ab 2.6.38 [26] Discard-Informationen weiter und informiert so Datenträger über freigewordene Bereiche. Zwei von Mikulas Patocka eingebrachte Änderungen verbessern bei bestimmten Umgebungsbedingungen die Performance des Device Mappers, was er mit Messwerten in den Commit-Kommentaren zeigt (1 [27], 2 [28])

Viele kleinere, aber keineswegs unbedeutende Neuerungen finden sich in der folgenden Liste mit den englischen Commit [39]-Überschriften der jeweiligen Änderung. Die Einträge verlinken genau wie viele der Verweise im vorangegangenen Text auf das Webfrontend [40] des von Linus Torvalds gepflegten Git-Zweigs mit den "offiziellen" Kernel-Quellen auf Kernel.org. Der über diese Links angezeigten Commit-Kommentar und der darunter ausgegebene Patch [41] liefern zahlreiche weitere Informationen zur jeweiligen Änderungen.

Vor jedem Link finden sich in eckigen Klammern einige Buchstaben und Zahlen. Ein "C" kennzeichnet Patches mit Änderungen an Kconfig-Dateien, welche die Konfigurationsoptionen samt der zugehörigen Hilfetexte enthalten, die bei der Kernel-Konfiguration über "make menuconfig", "make xconfig" und ähnliche Werkzeuge angezeigt werden. Ein "D" steht bei Patches, die die Dokumentation verändern, die im Kernel-Zweig unterhalb von Documentation/ liegt. Ein "N" weist Änderungen aus, die eine neue Datei anlegen. Die Zahl vermittelt einen groben Eindruck zur Größe des Patches: eine "1" steht für Änderungen, die inklusive Kommentar zwischen 10 und 20 KByte groß sind, eine "2" für solche, die zwischen 20 und 30 KByte Umfang haben; Änderungen ohne Zahl sind kleiner als 10 KByte, Patches mit einer "9" hingegen 90 KByte oder größer.

Block-Layer, Libata, Infiniband

SCSI

MMC, MFD, MTD und Co.

Weitere Hintergründe und Informationen rund um Entwicklungen im Linux-Kernel und dessen Umfeld finden sich in den vorangegangenen Kernel-Logs [97] auf heise open [98]. Neue Ausgaben des Kernel-Logs [99] werden auf den Identi.ca [100]- und Twitter [101]-Konten "@kernellog" erwähnt; die englischen, bei den Kollegen von "The H [102]" erscheinenden Übersetzungen auf den Identi.ca [103]- und Twitter [104]-Konten "@kernellog2". Gelegentlich zwitschert der Autor des Kernel-Logs unabhängig davon über einige Kernel-Log-Themen bei Identi.ca [105] und Twitter [106] als "@kernellogauthor". (thl [107]). (thl [108])


URL dieses Artikels:
https://www.heise.de/-1199339

Links in diesem Artikel:
[1] http://thread.gmane.org/gmane.linux.kernel/1103561
[2] http://thread.gmane.org/gmane.comp.file-systems.btrfs/9171
[3] http://git.kernel.org/linus/ec29ed5b407d618a8128f5942aade9e1758aa14b
[4] http://www.heise.de/glossar/entry/Kernel-Log-397909.html
[5] https://www.heise.de/hintergrund/Kernel-Log-Was-2-6-38-bringt-1-Grafik-1175970.html
[6] https://www.heise.de/hintergrund/Kernel-Log-Was-2-6-38-bringt-2-Dateisysteme-1192231.html
[7] https://www.heise.de/hintergrund/Kernel-Log-Was-2-6-38-bringt-3-Netzwerk-1195394.html
[8] http://git.kernel.org/linus/c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5
[9] http://linux-iscsi.org/
[10] http://scst.sourceforge.net/
[11] http://thread.gmane.org/gmane.linux.scsi/64373
[12] http://git.kernel.org/linus/c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5
[13] http://lwn.net/Articles/424004/
[14] http://www.risingtidesystems.com/
[15] http://git.kernel.org/linus/e89d15eeadb172bd53ca6362bf9ab6b22077224c
[16] http://thread.gmane.org/gmane.linux.kernel/1106248
[17] http://thread.gmane.org/gmane.linux.kernel/1087743
[18] http://git.kernel.org/linus/77ea887e433ad8389d416826936c110fa7910f80
[19] http://git.kernel.org/linus/77ea887e433ad8389d416826936c110fa7910f80
[20] http://lwn.net/Articles/423619/
[21] http://git.kernel.org/linus/9d09e663d5502c46f2d9481c04c1087e1c2da698
[22] http://git.kernel.org/linus/c029772125594e31eb1a5ad9e0913724ed9891f2
[23] http://git.kernel.org/linus/d1f9642381847e2b94caa34c3533211cf36ffcf4
[24] http://git.kernel.org/linus/34745785937a2003c144c0d4802fa637470d87af
[25] http://loop-aes.sourceforge.net/
[26] http://git.kernel.org/linus/5fc2ffeabb9ee0fc0e71ff16b49f34f0ed3d05b4
[27] http://git.kernel.org/linus/d9bf0b508ddfe19883b982b29a03c02ccbf53806
[28] http://git.kernel.org/linus/8d35d3e37eed884ba15229a146df846f399909b4
[29] http://git.kernel.org/linus/bdc85df7a8417b9893443ff5520804699416b6f3
[30] http://lwn.net/Articles/427961/
[31] http://thread.gmane.org/gmane.linux.kernel/1087062
[32] http://git.kernel.org/linus/d2d59e18a1ea8ecdd1c0a52af320e9a7f5391cc4
[33] http://git.kernel.org/linus/8e1ac6655104bc6e1e79d67e2df88cc8fa9b6e07
[34] http://git.kernel.org/linus/fc3a08b85b7a4f6c1069e5f71f6ad40d925ff55b
[35] http://lwn.net/Articles/429295/
[36] http://git.kernel.org/linus/9c915a8c99bce637226aa09cb05fc18486b229cb
[37] http://git.kernel.org/linus/02cdfcf043c5c6ebcbbaba1c35130b5fbcb10867
[38] http://git.kernel.org/linus/76a95d75ede64e4f1684ddb8c626fdfdb641bda2
[39] http://www.heise.de/glossar/entry/Commit-397925.html
[40] http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=summary
[41] http://www.heise.de/glossar/entry/Patch-395546.html
[42] http://git.kernel.org/linus/a4a461a6df6c0481d5a3d61660ed97f5b539cf16
[43] http://git.kernel.org/linus/02a8f01b5a9f396d0327977af4c232d0f94c45fd
[44] http://git.kernel.org/linus/e706203c7c1cff8c27f9ce6d58911014a6bd826c
[45] http://git.kernel.org/linus/0a43e117221702b08a023d6aa1a31ac30e40866b
[46] http://git.kernel.org/linus/f509f9c14d3f70834f964189293bed3e0e1fc839
[47] http://git.kernel.org/linus/8ae31e5b1fc73751d800d551fb30340caa53c7dd
[48] http://git.kernel.org/linus/19e364f6801e38972673278adedaab1abf6f854c
[49] http://git.kernel.org/linus/0ca646db68d1bd7184dfc41362d0dd9d56c0e57e
[50] http://git.kernel.org/linus/2ad2c320a107aceeba984f97ab2a60064101f5d5
[51] http://git.kernel.org/linus/395eb20238f5f1d5fba0ae284760a68095dd9e66
[52] http://git.kernel.org/linus/3db86353abba4549f665fbdde8572d619566afbb
[53] http://git.kernel.org/linus/058548ae23f5811d0ccdb39d5ad40f078aca63ef
[54] http://git.kernel.org/linus/9069f5c433e402be5707f37f3d0dfb376659c1e4
[55] http://git.kernel.org/linus/19ca760979e4be41a3eb215fb8d0e96637161947
[56] http://git.kernel.org/linus/085c647c3377c3e39c8c572278507b1e1c7e7bf7
[57] http://git.kernel.org/linus/1f768e91e1fcd9f0df657783847347a833fdc573
[58] http://git.kernel.org/linus/70f3c073362ef7b5e55c92b83eb2dd9a7fb4e9bf
[59] http://git.kernel.org/linus/774342844f368a0c3ba907f192d844ae337d01aa
[60] http://git.kernel.org/linus/80d9da98b4034edd31f6bacdb96c7489c4460173
[61] http://git.kernel.org/linus/5f7bb3a439ce51ae8b92ca1dc93b91712224b69a
[62] http://git.kernel.org/linus/6cb8ef573fd4c2bd72248f492fe336133660148d
[63] http://git.kernel.org/linus/7f6f794dee50ba33710145140f39de59f5ec764e
[64] http://git.kernel.org/linus/d2b2147678a8be0144d64ec4feb759e7560eb9af
[65] http://git.kernel.org/linus/579d12b58abb4bd1161728f0a4a2524258ecf0a3
[66] http://git.kernel.org/linus/6b57b159709dcb4d53e64738f2d1f73b36e41601
[67] http://git.kernel.org/linus/3ff5588d3f8afad65ded52ac0e4191462fe034cb
[68] http://git.kernel.org/linus/0d81b4e8dcc4177726f30a1ac8df1f726d2a7c0c
[69] http://git.kernel.org/linus/51780d2c38a7294c2c302ae9d2ea517bd4153dec
[70] http://git.kernel.org/linus/a54ca0f62f953898b05549391ac2a8a4dad6482b
[71] http://git.kernel.org/linus/8930c8aa740b12ad69f44a35137bcc39bfa3dc41
[72] http://git.kernel.org/linus/6680d940b80dbb0617226c5b76b071a3977feb1c
[73] http://git.kernel.org/linus/f71e1afdd588ec60fd799b1e5a6f0b2e6cf9605e
[74] http://git.kernel.org/linus/559e0df6b3ffbc218a11bb9dada5320a217cb7a6
[75] http://git.kernel.org/linus/412dc11d3fd01f96fdf4a8cbfbc5584a17dab7c8
[76] http://git.kernel.org/linus/d450f19eea0c3f64d60dc37655bae03b2455e5bb
[77] http://git.kernel.org/linus/337ce5d1c5759644cea6c47220ce7e84f0398362
[78] http://git.kernel.org/linus/f4e8afdc7ab1b5a0962be02a9dd15d29a81f4c53
[79] http://git.kernel.org/linus/593e9d70fb0f1ece1cf2a61c701dec35d8e41f8d
[80] http://git.kernel.org/linus/03d2bfc878e4dff9e596accc7b7eccf947804a3c
[81] http://git.kernel.org/linus/8f230f454fe04ba326ffaead3a6b88dcf44eaf4b
[82] http://git.kernel.org/linus/985b1aa05bc47794780ac92eebdaf006a5187afb
[83] http://git.kernel.org/linus/04566831a703ae3ef4b49a2deae261c9ed26e020
[84] http://git.kernel.org/linus/f95f3850f7a9e1d49ebc5b6e72e7cc3ec3685b0b
[85] http://git.kernel.org/linus/b3824f2c6f16ef19060a53ef9345a124de175098
[86] http://git.kernel.org/linus/253e0a7c3dc4bbbc69fc6bfd7c01bc4c9397a5e5
[87] http://git.kernel.org/linus/a782d688e9c6f9ca9a7a9a28e8e2876969ddef53
[88] http://git.kernel.org/linus/f7dd3611c85f50a98e8f3b9b1d52aaf540ebeb7b
[89] http://git.kernel.org/linus/93173054f2979de41b1912b19f0b57edfb35fcdc
[90] http://git.kernel.org/linus/0cc2fc1f2f5f1fcf6699b43d73ca3e753ef63582
[91] http://git.kernel.org/linus/9f1890a5de2a5fcf4fd9ffa3115047eed834349c
[92] http://git.kernel.org/linus/94790ec25fdd51dc4126cc176f2e104f80f87fcb
[93] http://git.kernel.org/linus/e8953b7395089b917f30d0909f845664d5fafa4e
[94] http://git.kernel.org/linus/e637276370cb11068ab185c342eac5a78e5415b4
[95] http://git.kernel.org/linus/4b7f7422b0331e802f8b7c593e058ccee981cff5
[96] http://git.kernel.org/linus/ac622f583dccb025250becd2d4e60badaf571713
[97] http://www.heise.de/open/kernel-log-3007.html
[98] http://www.heise.de/open/
[99] http://www.heise.de/glossar/entry/Kernel-Log-397909.html
[100] http://identi.ca/kernellog
[101] http://twitter.com/kernellog
[102] http://www.h-online.com
[103] http://identi.ca/kernellog2
[104] http://twitter.com/kernellog2
[105] http://identi.ca/kernellogauthor
[106] http://twitter.com/kernellogauthor
[107] mailto:thl%40ct.de
[108] mailto:thl@ct.de