«KVM Chainsaw»: чистка «божественной структуры» ядра в Linux 7.3
Серия патчей с колоритным названием «KVM Chainsaw» («бензопила KVM») готовится к попаданию в окно слияния Linux 7.3. Инженер Red Hat и мейнтейнер KVM Паоло Бонзини уже влил ветку kvm-chainsaw в раздел «next» Git-репозитория KVM, а значит, изменения должны отправиться в состав следующего ядра.
В чём проблема
Центральный объект переработки — структура kvm_mmu, которую Бонзини прямо называет «божественной структурой данных» (god data structure). За долгие годы она обросла сразу тремя разными обязанностями: описанием формата таблиц страниц гостя, обходом этих таблиц и построением новых. В результате родственная (и, по признанию самого разработчика, неудачно названная) структура nested_mmu используется лишь частично, а часть кода дублируется или, наоборот, подменяется упрощёнными вариантами.
Что делает «бензопила»
Серия распиливает kvm_mmu на три самостоятельные части:
- kvm_pagewalk — обходчик таблиц страниц. На каждый виртуальный процессор их два:
gva_walkиngpa_walk. - kvm_mmu — за ней остаётся только построение таблиц страниц; для этого она обращается к соответствующему обходчику.
- kvm_page_format — позволяет работать с уже существующими PTE и объединяет логику вокруг разрешений и проверки зарезервированных битов.
Польза видна уже от самой чистки. Помимо прочего, она устраняет давнюю путаницу между guest_mmu и nested_mmu: последняя появилась раньше и «украла» очевидное имя, из-за чего в коде встречались комментарии вроде «исключаем nested MMU» там, где на деле исключался guest_mmu. Переименование guest_mmu может стать следующим шагом — правда, по поводу того, как именно это сделать, в обсуждении RFC мнения разошлись.
Не только уборка
Последний патч серии показывает, что переиспользование кода годится и для новых возможностей. Приспособив механизм permission_fault() для проверки SPTE, разработчики открывают дорогу к поддержке записей с несовпадающими правами на исполнение для супервизора и пользователя (XS≠XU) — сейчас KVM их не поддерживает, но в перспективе их можно будет добавить через атрибуты памяти.
Окно слияния Linux 7.3 откроется во второй половине августа, так что «бензопилу» и множество других изменений стоит ждать именно там.
Источник: Phoronix
Комментарии
Войдите, чтобы комментировать.