«KVM Chainsaw»: чистка «божественной структуры» ядра в Linux 7.3

· Linux и open source
Мейнтейнер KVM Паоло Бонзини влил в ветку next серию патчей, которая разбивает перегруженную структуру kvm_mmu на три части. Работа рассчитана на цикл разработки Linux 7.3.

cover.svg

Серия патчей с колоритным названием «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

Комментарии

Войдите, чтобы комментировать.

  • Пока нет комментариев.