"KVM Chainsaw", God 데이터 구조 처리를 위해 Linux 7.3에 포함될 예정
요약
KVM 메인테이너 Paolo Bonzini가 과도하게 복잡한 'god data structure'인 kvm_mmu를 세 부분으로 분할하는 KVM Chainsaw 작업을 Linux 7.3에 포함할 예정입니다. 이번 리팩토링을 통해 페이지 테이블 순회, 구축, 형식을 분리하여 코드의 명확성과 재사용성을 높였습니다.
핵심 포인트
- kvm_mmu 구조체를 pagewalk, mmu, page_format의 세 부분으로 분할
- 페이지 테이블 순회(walker)와 구축(builder) 기능의 명확한 분리
- 코드 재사용성을 높여 새로운 메모리 속성 지원 가능성 확보
- Linux 7.3 사이클에 포함될 예정인 KVM 리팩토링 작업
"KVM Chainsaw", God 데이터 구조 처리를 위해 Linux 7.3에 포함될 예정

Red Hat 엔지니어이자 KVM 메인테이너(maintainer)인 Paolo Bonzini가 kvm-chainsaw 브랜치를 KVM의 "next" Git 브랜치에 병합했습니다. 이 KVM Chainsaw 작업이 이제 next 브랜치에 포함됨에 따라, 다가오는 Linux 7.3 사이클에 제출될 예정입니다.
KVM Chainsaw 작업은 여러 용도로 과부하된 kvm_mmu 구조체를 다루며, 현재의 KVM 사용 방식을 더 잘 처리하기 위해 이를 세 부분으로 분할합니다. Paolo는 KVM.git next 브랜치로의 병합과 함께 KVM Chainsaw에 대해 다음과 같이 설명했습니다:
"kvm_mmu는 세 가지 서로 다른 작업, 즉 게스트 페이지 테이블(guest page table)의 형식을 설명하고, 게스트 페이지 테이블을 순회(walking)하며, 페이지 테이블을 구축하는 작업을 포함하는 "god data structure"입니다. 이는 (이미 이름이 잘못 붙여진) nested_mmu가 구축할 페이지 테이블이 없기 때문에 일부에서만 사용된다는 것을 의미합니다.
게다가, 일부 부분은 게스트 및 호스트 페이지 테이블 전반에 걸쳐 재사용되지만(예: 예약된 비트 탐지기(reserved bits detector)), 그렇지 않은 부분도 있습니다. 예를 들어, permission_fault는 is_executable_pte()와 같은 단순화된 코드로 대체됩니다.
이 시리즈는 kvm_mmu를 세 부분으로 분할하여 이를 정리합니다:
-
kvm_pagewalk는 페이지 테이블 순회기(page table walker)입니다. vCPU당 gva_walk와 ngpa_walk 두 개가 존재합니다. walk_mmu는 현재 코드에서 root_mmu와 nested_mmu 사이를 이동하는 것과 달리, L1 또는 L2 게스트를 실행하는지에 관계없이 항상 단일 gva_walk로 대체됩니다.
-
kvm_mmu는 페이지 테이블 구축 기능을 유지합니다. 이는 섀도 페이지(shadow pages)를 구축하기 위해 페이지 테이블 순회기를 사용하며, root_mmu의 경우 항상 gva_walk를, guest_mmu의 경우 ngpa_walk를 사용합니다.
-
kvm_page_format는 KVM이 이미 존재하는 PTE(Page Table Entry)에서 작동할 수 있도록 하며, permission_mask() 주변의 코드를 기존의 struct rsvd_bits_validate와 병합합니다. kvm_mmu가 gPTE 및 SPTE 예약 비트 확인을 위해 struct rsvd_bits_validate의 두 인스턴스를 가졌던 것처럼, kvm_pagewalk와 kvm_mmu 모두 자체적인 kvm_page_format을 가집니다."
정리 작업만으로도 guest_mmu와 nested_mmu 사이의 혼동을 줄여주는 유용한 효과를 이미 거두었습니다. nested_mmu는 guest_mmu가 도입되기 훨씬 전부터 존재했으며 당연한 이름을 선점했기 때문에, 실제로는 guest_mmu를 제외하면서도 "Exempt nested MMUs"와 같은 주석이 달리는 결과를 초래했습니다. guest_mmu의 이름을 변경하는 것이 다음 단계가 될 수 있으나, RFC(Request for Comments)에서는 이를 어떻게 수행할지에 대해 여러 의견이 있었습니다.
하지만 마지막 패치는 코드 재사용의 이점이 새로운 기능에도 사용될 수 있음을 보여줍니다. permission_fault() 메커니즘을 조정하고 이를 사용하여 struct kvm_page_fault에 대해 SPTE(Shadow Page Table Entry)를 테스트함으로써, XS!=XU 상태를 가진 SPTE를 지원하는 것이 가능해졌습니다. 이는 아직 KVM에서 지원되지 않았으나, 이제 메모리 속성(memory attributes)을 통해 추가될 수 있습니다.
8월 하반기에 머지 윈도우(merge window)가 열리는 Linux 7.3에서 이 기능과 더 많은 내용을 확인해 보시기 바랍니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Phoronix의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기