E.4. IOMMU 전략 및 사용 사례
의도한 것보다 더 많은 장치를 포함하는 IOMMU 그룹을 처리하는 방법에는 여러 가지가 있습니다. 플러그인 카드의 경우 첫 번째 옵션은 다른 슬롯에 카드를 설치할지 여부를 결정하는 것입니다. 일반적인 Intel 칩셋에서 PCIe 루트 포트는 프로세서 및 PCH(Platform Controller Hub)를 통해 제공됩니다. 이러한 루트 포트의 기능은 매우 다를 수 있습니다. Red Hat Enterprise Linux 7은 많은 사용자가 기본 PCIe ACS를 지원하지 않더라도 다양한 PCH 루트 포트의 격리를 지원합니다. 따라서 이러한 루트 포트는 더 작은 IOMMU 그룹을 만드는 데 적합합니다. Intel® Xeon® 클래스 프로세서(E5 시리즈 이상) 및 "High End Desktop Processors"의 경우 프로세서 기반 PCIe 루트 포트는 일반적으로 PCIe ACS에 대한 기본 지원을 제공하지만, 더 낮은 엔드 클라이언트 프로세서(예: Core™ i3, i5, i7 및 Xeon E3 프로세서)는 그렇지 않습니다. 이러한 시스템의 경우 PCH 루트 포트는 일반적으로 가장 유연한 격리 구성을 제공합니다.
또 다른 옵션은 하드웨어 공급 업체와 협력하여 분리가 있는지 여부를 확인하고 이 분리를 인식할 수 있도록 커널을 정지하는 것입니다. 이는 일반적으로 함수 간에 내부 피어 투 피어가 가능한지 또는 다운스트림 포트의 경우 리디렉션이 가능한지 여부를 결정하는 것이 중요합니다. Red Hat Enterprise Linux 7 커널에는 이러한 장치에 대한 다양한 quirks가 포함되어 있으며 Red Hat 고객 지원은 하드웨어 공급 업체와 ACS-equivalent 격리를 사용할 수 있는지 여부를 확인하고 이러한 격리를 공개하기 위해 유사한 quirks를 커널에 통합하는 것이 가장 좋은지 확인할 수 있습니다. 하드웨어 공급 업체의 경우 피어 투 피어를 지원하지 않는 다중 함수 끝점은 구성 공간의 단일 정적 ACS 테이블을 사용하여 이를 노출하여 기능을 노출하지 않습니다. 하드웨어에 이러한 기능을 추가하면 커널이 기능을 분리된 상태로 자동으로 감지할 수 있으며 하드웨어의 모든 사용자에게 이 문제가 제거됩니다.
위의 제안을 사용할 수 없는 경우 일반적인 반응은 커널이 사용자가 지정한 특정 장치 또는 특정 유형의 장치에 대해 이러한 격리 검사를 비활성화하는 옵션을 제공해야 한다는 것입니다. 종종 이전 기술이 이러한 범위에 격리를 적용하지 않고 모든 것이 잘 수행되도록 주장하는 경우가 종종 있습니다. 이러한 격리 기능을 우회하면 지원되지 않는 환경이 발생합니다. 분리가 존재하는지를 모르는 것은 장치가 실제로 격리되었는지 여부를 모르는데 재해가 공격하기 전에 발견하는 것이 가장 좋습니다. 장치의 분리 기능의 간격은 트리거하기가 매우 어려울 수 있으며 원인에 따라 장치 격리로 다시 추적하기가 더 어려울 수 있습니다. VFIO의 작업은 먼저 사용자 소유 장치 및 IOMMU 그룹에서 호스트 커널을 보호하는 것이 분리를 위해 VFIO에서 사용하는 메커니즘입니다.
요약하면 IOMMU 그룹을 기반으로 구축된 VFIO는 레거시 KVM 장치 할당을 사용하여 가능한 것보다 장치 간에 향상된 보안 및 격리 수준을 제공할 수 있습니다. 이러한 격리는 이제 Linux 커널 수준에서 적용되므로 커널이 자신을 보호하고 사용자에게 위험한 구성을 방지할 수 있습니다. 또한 하드웨어 공급 업체는 멀티 기능 끝점 장치뿐만 아니라 칩 세트 및 상호 연결 장치에서도 PCIe ACS 지원을 지원하는 것이 좋습니다. 이러한 지원이 없는 기존 장치의 경우 Red Hat은 하드웨어 벤더와 협력하여 격리가 사용 가능한지 확인하고 Linux 커널 지원을 추가하여 이러한 격리를 제공할 수 있습니다.