{"id":44812,"date":"2026-07-27T05:06:33","date_gmt":"2026-07-27T03:06:33","guid":{"rendered":"https:\/\/overcentral.com\/de\/?p=44812"},"modified":"2026-07-27T05:06:33","modified_gmt":"2026-07-27T03:06:33","slug":"kvm-mmu-aufspaltung-linux-73","status":"publish","type":"post","link":"https:\/\/overcentral.com\/de\/kvm-mmu-aufspaltung-linux-73\/","title":{"rendered":"KVM zerschl\u00e4gt monolithische Kernstruktur in drei Teile f\u00fcr Linux 7.3"},"content":{"rendered":"<p>Die monolithische Kernstruktur der KVM-Virtualisierung, das <code>kvm_mmu<\/code>codecodecode, wird in drei unabh\u00e4ngige Einheiten aufgeteilt. Ziel ist die Vorbereitung f\u00fcr den Linux-Kernel 7.3, dessen Merge-Fenster im Sp\u00e4tsommer 2026 \u00f6ffnet. Paolo Bonzini, Maintainer von KVM, hat die Refaktorierung im <code>kvm-chainsaw<\/code>codecodecode-Branch von KVM.git abgeschlossen und in den Next-Branch eingepflegt.<\/p>\n<h2>Der \u201eGod Data Structure&#8220; wird die Kette angelegt<\/h2>\n<p>KVM-Maintainer Paolo Bonzini (Paolo Bonzini) bezeichnete <code>kvm_mmu<\/code>codecodecode in seinem Commit-Kommentar selbst als \u201e<strong>god data structure<\/strong>&#8220; \u2013 eine allm\u00e4chtige Struktur, die drei v\u00f6llig unterschiedliche Aufgaben in sich vereinte: die Beschreibung und den Walk von Gast-Page-Tables sowie den Aufbau von Shadow-Page-Tables. Diese monolithische Einheit f\u00fchrte zu jahrelang gewachsenen Inkonsistenzen.<\/p>\n<p>So wurde etwa die Struktur <code>nested_mmu<\/code>codecodecode vor <code>guest_mmu<\/code>codecodecode implementiert und eignete sich so den intuitiveren Namen an. Die Namensgebung und die tats\u00e4chliche Funktion drifteten auseinander. Ein Kommentar im Code lautete \u201eExempt nested MMUs&#8220;, doch tats\u00e4chlich ausgenommen war <code>guest_mmu<\/code>codecodecode. Das Chaos zog sich durch die gesamte Struktur.<\/p>\n<p>Auch die Trennung von Gast- und Host-Seiten war unscharf. Die Funktion <code>permission_fault()<\/code>codecodecode etwa pr\u00fcfte Berechtigungen auf Gast-PTE-Ebene, w\u00e4hrend f\u00fcr die SPTE-Seite eine separate, vereinfachte Variante <code>is_executable_pte()<\/code>codecodecode verwendet wurde. Das sollte sich nun grundlegend \u00e4ndern.<\/p>\n<h2>Drei Strukturen, drei Zust\u00e4ndigkeiten<\/h2>\n<p>Nach der Aufteilung tr\u00e4gt jede der drei neuen Strukturen eine klar definierte Verantwortung.<\/p>\n<p><code><strong>kvm_pagewalk<\/strong><\/code>codecodecode ist der reine Page-Table-Walker. Pro virtueller CPU existieren zwei Instanzen: <code>gva_walk<\/code>codecodecode f\u00fcr die \u00dcbersetzung von Gast-Virtual-Adressen und <code>ngpa_walk<\/code>codecodecode f\u00fcr verschachtelte Gast-Physical-Adressen (nested guest physical address). Der alte <code>walk_mmu<\/code>codecodecode wechselte je nach Ausf\u00fchrungskontext zwischen <code>root_mmu<\/code>codecodecode und <code>nested_mmu<\/code>codecodecode hin und her. Das neue <a href=\"https:\/\/overcentral.com\/de\/ps6-hybrid-handheld-design-preis-ueber-1000-euro\/\" title=\"PS6 f\u00fcr \u00fcber 1.000 Euro braucht radikales neues Design\" data-iacss-internal=\"1\">Design<\/a> vereinheitlicht diesen Vorgang in einem einzigen, dedizierten Walker.<\/p>\n<p>Das bisherige <code><strong>kvm_mmu<\/strong><\/code>codecodecode wird massiv verkleinert und beh\u00e4lt ausschlie\u00dflich die Funktion des Shadow-Page-Table-Builders. Bei der Konstruktion greift es auf den entsprechenden Pagewalker zur\u00fcck: f\u00fcr <code>root_mmu<\/code>codecodecode auf <code>gva_walk<\/code>codecodecode, f\u00fcr <code>guest_mmu<\/code>codecodecode auf <code>ngpa_walk<\/code>codecodecode.<\/p>\n<p><code><strong>kvm_page_format<\/strong><\/code>codecodecode ist eine v\u00f6llig neue Struktur, die alle Operationen auf bestehenden Page-Table-Entries (PTEs) b\u00fcndelt. Sie vereint die bisherigen <code>permission_mask()<\/code>codecodecode-<a href=\"https:\/\/overcentral.com\/de\/windows-11-juli-update-funktionen\/\" title=\"Windows 11 Juli-Update bringt f\u00fcnf praktische Funktionen ohne KI f\u00fcr alle PCs\" data-iacss-internal=\"1\">Funktionen<\/a> und die <code>rsvd_bits_validate<\/code>codecodecode-Pr\u00fcfung f\u00fcr reservierte Bits. Sowohl <code>kvm_pagewalk<\/code>codecodecode als auch das geschrumpfte <code>kvm_mmu<\/code>codecodecode besitzen jeweils eigene <code>kvm_page_format<\/code>codecodecode-Instanzen. Damit entf\u00e4llt das alte Konstrukt, bei dem ein einziges <code>kvm_mmu<\/code>codecodecode zwei separate <code>rsvd_bits_validate<\/code>codecodecode-Felder f\u00fcr Gast-PTEs und SPTEs vorhielt.<\/p>\n<p>Der finale Patch umfasst <strong>13 Dateien, 382 hinzugef\u00fcgte und 391 entfernte Zeilen<\/strong>. Die Netto-Differenz betr\u00e4gt lediglich neun negative Zeilen. Der Codeumfang bleibt also nahezu identisch, die Architektur jedoch ist nun sauber modularisiert.<\/p>\n<p>Eine tabellarische \u00dcbersicht veranschaulicht die neue Aufgabenverteilung:<\/p>\n<div class=\"spec-table-wrap cols-2\" style=\"--accent-d:#FCC624;--accent-l:#B08A02\">\n<div class=\"ct\">kvm_mmu &#8211; Aufteilung der Zust\u00e4ndigkeiten<\/div>\n<table style=\"width:100%;max-width:none;min-width:100%;margin:0;border-radius:0\">\n<colgroup>\n<col style=\"width:35%\">\n<col style=\"width:27%\">\n<col style=\"width:38%\"><\/colgroup>\n<thead>\n<tr>\n<th>Aufgabe<\/th>\n<th>Vor der Aufteilung<\/th>\n<th>Nach der Aufteilung<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td class=\"rl\">Page-Table-Walk<\/td>\n<td class=\"co\">walk_mmu<\/td>\n<td class=\"vu\">kvm_pagewalk<\/td>\n<\/tr>\n<tr>\n<td class=\"rl\">Shadow-PT-Aufbau<\/td>\n<td class=\"co\">page_fault()<\/td>\n<td class=\"vu\">kvm_mmu (verkleinert)<\/td>\n<\/tr>\n<tr>\n<td class=\"rl\">PTE-Pr\u00fcfung \/ Reserved Bits<\/td>\n<td class=\"co\">rsvd_bits_*<\/td>\n<td class=\"vu\">kvm_page_format<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div class=\"tn\">* Alle drei Funktionen waren zuvor in der monolithischen kvm_mmu-Struktur vereint. walk_mmu wechselte zwischen root_mmu und nested_mmu; kvm_pagewalk vereinheitlicht dies in gva_walk.<\/div>\n<\/div>\n<h2>Der Weg zu neuen Funktionen durch die Aufspaltung<\/h2>\n<p>Am Ende der Patch-Serie wurde der Mechanismus von <code>permission_fault()<\/code>codecodecode auch auf SPTEs anwendbar gemacht und gegen die <code>kvm_page_fault<\/code>codecodecode-Struktur testbar. Dies erm\u00f6glicht KVM, F\u00e4lle zu unterst\u00fctzen, in denen sich die Superviser-Execute-Berechtigung (XS) und die User-Execute-Berechtigung (XU) unterscheiden. Eine solche differenzierte Steuerung war in KVM bislang nicht vorhanden. Durch die Einf\u00fchrung von <code>kvm_page_format<\/code>codecodecode mit einem <code>permissions<\/code>codecodecode-Array k\u00f6nnen nun Speicherattribute per Bitmap abgeglichen werden. Die alte <code>is_executable_pte()<\/code>codecodecode in <code>is_access_allowed()<\/code>codecodecode wertete beide Bits als identisch \u2013 sobald eines gesetzt war, galt die Seite als ausf\u00fchrbar. Das ist nun Geschichte.<\/p>\n<p>Damit er\u00f6ffnet sich die T\u00fcr zu feineren Zugriffskontrollen auf Hypervisor-Ebene, etwa f\u00fcr spezielle Sicherheitsanforderungen in virtualisierten Umgebungen.<\/p>\n<h2>Ein LLM als \u201enat\u00fcrlichsprachliches Coccinelle&#8220;<\/h2>\n<p>Bonzini offenbarte in der Begleit-<a href=\"https:\/\/overcentral.com\/de\/notion-mail-eingestellt-ki-agenten\/\" title=\"Notion Mail stellt E-Mail-Client ein und setzt auf KI-Agenten\" data-iacss-internal=\"1\">E-Mail<\/a> zur RFC-Patch-Serie vom 11. Mai 2026, dass er f\u00fcr einen Teil der mechanischen Umbauarbeit ein Large Language Model (LLM) eingesetzt hat. Er beschreibt die Nutzung als \u201enat\u00fcrlichsprachliches Coccinelle&#8220;. Coccinelle ist ein etabliertes Tool zur pattern-basierten Transformation von C-Code im Linux-Kernel. Bonzini gab dem LLM Anweisungen wie: \u201eVerschiebe <code>gva_to_gpa<\/code>codecodecode von <code>struct kvm_mmu<\/code>codecodecode nach <code>struct kvm_pagewalk<\/code>codecodecode. Wenn der Aufrufer bereits eine Variable vom Typ <code>kvm_pagewalk<\/code>codecodecode besitzt, verwende diese.&#8220; Design und Planung der einzelnen Commits blieben jedoch in seiner Verantwortung.<\/p>\n<p>Das ist bemerkenswert: Noch im vorherigen Release-Zyklus (Linux 7.2) hatte eine Flut von KI-generierten Patches die Entwicklung neuer Funktionen f\u00fcr KVM ARM64 praktisch zum Erliegen gebracht. Nur einen Zyklus sp\u00e4ter nutzt derselbe Maintainer nun selbst KI \u2013 jedoch unter strenger Kontrolle und mit klarer Kennzeichnung. Bonzini stellt klar, dass die Patches vor der Einf\u00fchrung des offiziellen KI-Richtliniendokuments (<code>Documentation\/process\/coding-assistants.rst<\/code>codecodecode) entstanden sind. Er betont, er k\u00f6nne bei Bedarf nachvollziehen, welcher Patch KI-unterst\u00fctzt war und welcher nicht. Die RFC-Serie umfasste 22 Patches, die finale v1-Version wuchs auf 24 Patches an. Der Teststatus verbesserte sich von \u201every lightly tested&#8220; auf eine stabile Integration in den Next-Branch.<\/p>\n<p>Das Merge-Fenster f\u00fcr Linux 7.3 \u00f6ffnet in der zweiten Augusth\u00e4lfte 2026. Die Aufspaltung des <code>kvm_mmu<\/code>codecodecode ist ein Paradebeispiel f\u00fcr zielgerichtete Architekturbereinigung, die nicht nur die Code-Wartbarkeit verbessert, sondern auch die Grundlage f\u00fcr erweiterte Hardware-Virtualisierungsfunktionen legt \u2013 und das mit einer pragmatischen, aber transparenten Nutzung moderner KI-Werkzeuge.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die monolithische Kernstruktur der KVM-Virtualisierung, das kvm_mmucodecodecode, wird in drei unabh\u00e4ngige Einheiten aufgeteilt. Ziel ist die Vorbereitung f\u00fcr den Linux-Kernel 7.3, dessen Merge-Fenster im Sp\u00e4tsommer 2026 \u00f6ffnet. Paolo Bonzini, Maintainer von KVM, hat die Refaktorierung im kvm-chainsawcodecodecode-Branch von KVM.git abgeschlossen und in den Next-Branch eingepflegt. Der \u201eGod Data Structure&#8220; wird die Kette angelegt KVM-Maintainer Paolo [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":47730,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"https:\/\/iili.io\/Ckownol.jpg","fifu_image_alt":"KVM zerschl\u00e4gt monolithische Kernstruktur in drei Teile f\u00fcr Linux 7.3","footnotes":""},"categories":[5],"tags":[],"class_list":["post-44812","post","type-post","status-publish","format-standard","has-post-thumbnail","category-artikel"],"fifu_image_url":"https:\/\/iili.io\/Ckownol.jpg","fifu_image_alt":"KVM zerschl\u00e4gt monolithische Kernstruktur in drei Teile f\u00fcr Linux 7.3","_links":{"self":[{"href":"https:\/\/overcentral.com\/de\/wp-json\/wp\/v2\/posts\/44812","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/overcentral.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/overcentral.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/overcentral.com\/de\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/overcentral.com\/de\/wp-json\/wp\/v2\/comments?post=44812"}],"version-history":[{"count":2,"href":"https:\/\/overcentral.com\/de\/wp-json\/wp\/v2\/posts\/44812\/revisions"}],"predecessor-version":[{"id":44814,"href":"https:\/\/overcentral.com\/de\/wp-json\/wp\/v2\/posts\/44812\/revisions\/44814"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/overcentral.com\/de\/wp-json\/wp\/v2\/media\/47730"}],"wp:attachment":[{"href":"https:\/\/overcentral.com\/de\/wp-json\/wp\/v2\/media?parent=44812"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/overcentral.com\/de\/wp-json\/wp\/v2\/categories?post=44812"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/overcentral.com\/de\/wp-json\/wp\/v2\/tags?post=44812"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}