728x90
📢 Virtualizing Exception에 대해 알아봐요
왜 Virtual Exception이 필요한가
실제 하드웨어 인터럽트(IRQ, FIQ, SError)는
- 일부는 하이퍼바이저(EL2)가 처리해야 하고,
- 일부는 VM(EL0/EL1) 안의 소프트웨어(vCPU)가 처리해야 해요
VM이 그 순간 실행 중이지 않을 수도 있어, 하이퍼바이저(EL2)가 대신 받아두고 적절한 시점에 전달해 줘야 하죠
가상 인터럽트(vIRQ/vFIQ/vSError) 개념
하이퍼바이저가 실제 인터럽트를 여러 Guest OS에게 전달하기 위해 만들어낸 "가짜 인터럽트"에요
물리 인터럽트처럼 동작하지만 EL0/EL1에서만 발생하며, EL2/EL3에선 절대 발생하지 않아요
Virtual Interrupt 활성화 (Enabling)
하이퍼바이저가 부팅 혹은 VM 런칭(vcpu context switching) 시 HCR_EL2 레지스터 내 아래 비트를 set 해줘요
- IMO → vIRQ 허용
- FMO → vFIQ 허용
- AMO → vSError 허용
이 설정으로 물리 IRQ는 EL2로 라우팅 되며, EL1에 vIRQ를 주입 할 수 있죠
가상 인터럽트 생성(Generation) : 두 가지 방식
방법1. 레지스터 세팅 방식 (Software 방식)
EL2에서 HCR-EL2.VI/VF/VSE 비트 세팅 → 즉시 vIRQ 발생
- VI = Setting this bit registers a vIRQ
- VF = Setting this bit registers a vFIQ
- VSE = Setting this bit registers a vSError
Guest가 인터럽트 받을 때마다 ICV 레지스터 접근이 모두 "Trap → 에뮬레이션" 으로 이어져 오버헤드가 커요
방법2. GIC 가상 CPU 인터페이스 (Hardware 기반)
1. 물리 인터럽트 발생
- GIC가 해당 pCPU로 인터럽트 전달
- HCR_EL2.IMO/FMO 설정 덕분에 EL2(하이퍼바이저)로 trap
2. 하이퍼바이저(EL2) 처리
- 인터럽트가 어느 VM/vCPU에 해당하는지 판단 (mapping table 참조)
- 해당하는 vCPU의 ICH_LR에 virtual IRQ 정보를 등록만 하고 빠짐 (실제 처리는 안 함)
3. vCPU 실행 (VM Entry)
- vCPU 실행 시점에, GIC의 Virtual CPU Interface(GICV)가 하드웨어적으로 virtual IRQ exception 발생
- 이때는 EL2 trap 없이, EL1에서 직접 처리
4. EL1 IRQ 처리
- 게스트 OS는 마치 실제 인터럽트를 받은 것처럼 PSTATE.I 등의 마스크 조건에 따라 vIRQ를 처리함
- IRQ 핸들러 실행 등 모든 처리는 EL1에서 완료 → trap 오버헤드 없음
표로 정리하면,
| 레지스터 세팅 방식 | GIC 가상 CPU Interface |
| 예전 사용하던 소프트웨어 구현 방식 | 하드웨어 가상화 지원 이용한 방식 |
| Peripheral → Hypervisor → VI 세트 → Guest 진입 → Trap → EL2 → vIRQ 전달 | Peripheral → Hypervisor → ICH_LR 세트 → Guest 진입 → Direct vIRQ |
| 매번 EL2 entry 발생 | 한번 설정 후 하드웨어가 바로 Guest 전달 |
EL1에서의 PSTATE 마스킹 의미 변화
HCR_EL2.IMO==1 상태의 EL1에서는
- PSTATE.I 가 vIRQ 마스크를 뜻해요
- PSTATE.F 가 vFIQ 마스크를 뜻해요
- PSTATE.A 가 vSError 마스크를 뜻해요
물리 인터럽트(pIRQ)가 아니라, 가상 인터럽트에 대해 동작한다는 점이 달라져요
Reference
https://developer.arm.com/documentation/102142/0100/Virtualizing-exceptions
Documentation – Arm Developer
developer.arm.com
728x90
'TIL > 2025' 카테고리의 다른 글
| Mac book에 git 설치하기 (1) | 2025.05.01 |
|---|---|
| Virtualizing the generic timers, Arm architecture aarch64 (0) | 2025.04.29 |
| Trapping and Emulation of instructions (0) | 2025.04.29 |
| Memory Management Unit (MMU)의 Stage 2 translation (0) | 2025.04.29 |
| 가상화(Virtualization) 소개 | hypervisor, arm architecture (0) | 2025.04.28 |