E.2. IOMMU 그룹에 대한 Deep-dive
IOMMU 그룹은 IOMMU의 관점에서 분리된 것으로 간주될 수 있는 가장 작은 장치 세트로 정의됩니다. 격리를 달성하는 첫 번째 단계는 세분성입니다. IOMMU에서 장치를 별도의 IOVA 공백으로 구분할 수 없는 경우 분리되지 않습니다. 예를 들어, 여러 장치가 동일한 IOVA 공간을 별칭하려고 하면 IOMMU는 이를 구분할 수 없습니다. 이는 일반적인 x86 PC가 모든 기존 PCI 장치를 함께 그룹화할 것이며, 모두 동일한 요청자 ID인 PCIe-to-PCI 브릿지로 별칭이 지정된 이유입니다. 레거시 KVM 장치 할당을 통해 사용자는 이러한 기존 PCI 장치를 별도로 할당할 수 있지만 IOMMU가 장치를 구분할 수 없기 때문에 구성이 실패합니다. VFIO는 IOMMU 그룹에 의해 관리되므로 IOMMU 세분성의 이러한 가장 기본적인 요구 사항을 위반하는 구성이 방지됩니다.
다음 단계는 장치의 트랜잭션이 실제로 IOMMU에 도달하는지 여부를 결정하는 것입니다. PCIe 사양을 사용하면 상호 연결 패브릭에서 트랜잭션을 다시 라우팅할 수 있습니다. PCIe 다운스트림 포트는 하나의 다운스트림 장치에서 다른 장치로 트랜잭션을 다시 라우팅할 수 있습니다. PCIe 스위치의 다운스트림 포트는 한 포트에서 다른 포트로 다시 라우팅할 수 있도록 상호 연결될 수 있습니다. 다중 기능 엔드포인트 장치 내에서도 한 함수의 트랜잭션이 다른 함수로 직접 전달될 수 있습니다. 한 장치에서 다른 장치로의 이러한 트랜잭션은 피어 투 피어 트랜잭션이라고 하며 별도의 IOVA 스페이스에서 작동하는 장치 격리를 제거할 수 있습니다. 예를 들어 게스트 가상 머신에 할당된 네트워크 인터페이스 카드가 있는 경우 해당 IOVA 공간 내의 가상 주소에 대해 Makefile 쓰기 작업을 시도합니다. 그러나 실제 공간에서는 동일한 주소가 호스트가 소유한 피어 디스크 컨트롤러에 속합니다. 장치의 물리적 변환에 대한 IOVA가 IOMMU에서만 수행되므로 해당 트랜잭션의 데이터 경로를 최적화하려고 하는 모든 상호 연결은 변환을 위해 IOMMU로 이동하기 전에 CoreDNS 쓰기 작업을 디스크 컨트롤러로 잘못 리디렉션할 수 있습니다.
이 문제를 해결하기 위해 PCI Express 사양에는 이러한 리디렉션을 가시성과 제어 기능을 제공하는 PCIe(Access Control Services) 지원이 포함됩니다. 이는 상호 간에 장치를 분리하는 데 중요한 구성 요소이며, 상호 연결 및 다중 기능 끝점에서 누락되는 경우가 많습니다. 장치에서 IOMMU로의 모든 수준에서 ACS를 지원하지 않으면 리디렉션이 가능한 것으로 가정해야 합니다. 따라서 PCI 토폴로지에서 ACS 지원이 부족한 지점 아래의 모든 장치의 분리가 중단됩니다. PCI 환경의 IOMMU 그룹은 이러한 격리를 고려하여, 번역되지 않은 피어-투-피어 Makefile을 수행할 수 있는 장치를 함께 그룹화합니다.
요약하면 IOMMU 그룹은 IOMMU가 가시성을 가지며 다른 그룹과 분리된 최소 장치 집합을 나타냅니다. VFIO는 이 정보를 사용하여 사용자 공간을 위해 장치의 안전한 소유권을 적용합니다. 브리지, 루트 포트, 스위치(모든 상호 연결 패브릭 예제)를 제외하고 IOMMU 그룹 내의 모든 장치는 VFIO 장치 드라이버 또는 알려진 안전한 스텁 드라이버에 바인딩되어야 합니다. PCI의 경우 이러한 드라이버는 vfio-pci 및 pci-stub입니다. pci-stub는 호스트가 이 드라이버를 통해 장치와 상호 작용하지 않는 것으로 알려져 있기 때문에 간단히 허용됩니다.[2]. VFIO를 사용할 때 그룹이 실행 가능한지를 나타내는 오류가 발생하면 그룹의 모든 장치를 적절한 호스트 드라이버에 바인딩해야 합니다. virsh nodedev-dumpxml 을 사용하여 장치를 VFIO 호환 드라이버에 바인딩하기 위해 IOMMU 그룹 및 virsh nodedev-detach 의 구성을 탐색하면 이러한 문제를 해결하는 데 도움이 됩니다.
[2]
예외는 레거시 KVM 장치 할당으로, 종종 pci-stub 드라이버에 바인딩된 상태에서 장치와 상호 작용합니다. Red Hat Enterprise Linux 7에는 레거시 KVM 장치 할당이 포함되어 있지 않으므로 이러한 상호 작용과 잠재적인 충돌이 발생하지 않습니다. 따라서 동일한 IO 그룹 내에서 VFIO 및 레거시 KVM 장치 할당을 혼합하는 것은 권장되지 않습니다.