※ 컴퓨터 하드웨어 뉴스 ※
원본 출처 : https://wccftech.com/amd-will-now-support-virtual-nmi-vnmi-on-zen-4-cpus/

목요일 AMD는 Zen4 CPU 에서 Virtual NMI 또는 Non-Maskable Interrupt 지원을 가능하게 하는
Linux 커널용 오픈 소스 패치를 출시했습니다.
리눅스 OS의 프로세서에 대한 이 특정 기능은 경쟁 인텔이 지난 10년 이상 동안 CPU로 지원한 것입니다.
AMD 젠 4 CPU는 새로운 CPU에 대해 VNMI를 지원하여 라이벌 인텔이 지난 10년 동안 지원한 가상화를 허용합니다.
VNMI 지원을 통해 CPU ID가 이 기능을 감지할 수 있지만 AMD의 심각하게 늦은 릴리스로 인해
회사는 올해 후반에 새로운 Zen 4 아키텍처가 나올 때까지 완전히 시작하지 않기로 선택했을 수 있습니다.
AMD의 Santosh Shukla는 회사의 Virtual NMI 구현을 다음과 같이 요약합니다.
현재 NMI는 이벤트 주입 메커니즘을 사용하여 게스트에게 전달됩니다. 이벤트 주입 메커니즘은 후속 NMI 전달을 차단하지 않습니다. 따라서 하이퍼바이저는 새 NMI를 보내기 전에 NMI 전달 및 완료(IRET를 가로채어)를 추적해야 합니다.
VNMI(가상 NMI)를 사용하면 하이퍼바이저가 게스트 NMI를 추적하고 IRET를 가로챌 필요가 없음을 의미하는 이벤트 주입 메커니즘을 사용하지 않고 게스트에 NMI를 주입할 수 있습니다. 이를 달성하기 위해 VNMI 기능은 VMCB에서 가상화된 NMI 및 NMI_MASK 기능 비트를 제공합니다.
intr_control -
V_NMI(11) - 게스트에서 가상 NMI가 보류 중인지 여부를 나타냅니다.
V_NMI_MASK(12) - 가상 NMI가 게스트에서 마스킹되는지 여부를 나타냅니다.
V_NMI_ENABLE(26) - 게스트에 대해 NMI 가상화 기능을 활성화합니다.
하이퍼바이저는 NMI를 주입하기를 원할 때 V_NMI 비트를 설정하고 프로세서는 V_NMI 비트를 지우고 게스트가 NMI를 처리하고 있음을 의미하는 V_NMI_MASK를 설정합니다. 게스트가 NMI를 처리한 후 프로세서는 IRET가 성공적으로 완료되면 V_NMI_MASK를 지웁니다. 명령 또는 가상 NMI를 제공하는 동안 VEXIT가 발생하는 경우.
Phoronix의 Michael Larabel은 VNMI가 NMI 처리가 완료될 때 인터럽트 반환 또는 IRET를 가로채는 것에 대한 우려로
NMI 상태를 따를 필요가 없는 AMD 자체 가상화 게스트의 효율성을 최적화하는 데만 유용하다고 말합니다.
인텔은 2008년까지 Linux 플랫폼에서 가상화를 위해 이 활용을 했습니다.
AMD의 포함은 이제 새로운 패치 시리즈 가 회사의 EPYC 7004 시리즈 와 함께
다음 Zen 4 기반 Ryzen 7000 시리즈에서 사용될 것임을 암시 합니다.