콘텐츠로 이동

PCI 패스스루 사용

PCI 패스스루는 물리 NPU를 하나의 VM에 직접 할당하는 방식입니다. 이 모드에서는 할당된 VM에서 실행되는 드라이버만 NPU에 독점적으로 접근하며, NPU는 VM 간에 공유되지 않습니다.

IOMMU 활성화 및 권장 커널 파라미터 구성

먼저 서버 플랫폼의 BIOS에서 다음 설정을 활성화합니다.

  • VT-D/IOMMU

BIOS 메뉴 이름과 구성 절차는 시스템 제조사에 따라 일부 다를 수 있습니다.

PCI 패스스루는 IOMMU를 통해 VM에 할당된 NPU 장치의 DMA 접근을 격리하여 호스트 및 다른 VM의 메모리를 보호합니다. IOMMU가 비활성화된 경우 PCI 패스스루가 동작하지 않습니다.

Note

현재 지원되는 배포판의 기본 커널에는 IOMMU가 이미 활성화되어 있습니다.

NPU PCI 패스스루 환경에서 권장하는 커널 파라미터는 다음과 같으며, /etc/default/grubGRUB_CMDLINE_LINUX에 추가합니다.

Note

아래 예시는 RBLN-CA22가 장착된 Intel 프로세서 기반 서버 기준입니다. AMD 프로세서의 경우 intel_iommu=on 대신 amd_iommu=on을 사용하며, 서버 제품에 따라 일부 커널 파라미터가 달라질 수 있습니다.

transparent_hugepage=madvise pcie_aspm=force pci=pcie_bus_perf pci=bfsort pci=noats iommu=pt intel_iommu=on iommu.strict=1

GRUB 설정을 업데이트하고 재부팅합니다.

$ update-grub
$ reboot

Linux KVM에서 PCI 패스스루 사용하기

virsh 명령을 사용하여 Ubuntu Linux Kernel-based Virtual Machine(KVM)에서 NPU 패스스루를 구성할 수 있습니다.

NPU 패스스루를 구성하기 전에 다음 사전 요구 사항을 충족해야 합니다.

  • Ubuntu Linux KVM이 설치되어 있어야 합니다(sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils).
  • VM의 머신 타입은 q35여야 합니다. q35는 PCIe 네이티브 토폴로지를 지원하므로 NPU 패스스루에 필요합니다.

virsh로 VM에 NPU 패스스루 구성

이 절차에서는 q35 머신 타입으로 구성된 기존 VM에 NPU를 패스스루로 할당하는 방법을 다룹니다. VM 생성 및 기본 구성은 이 문서의 범위에 포함되지 않으며, 자세한 내용은 아래 문서를 참조하십시오.

자세한 내용은 Ubuntu Virtualization - virshlibvirt - PCI passthrough of host devices를 참조하십시오.

  1. 패스스루 모드로 VM에 할당할 NPU의 PCI 장치 BDF(bus/device/function)를 확인합니다.

    다음 예시에서 NPU의 PCI 장치 BDF는 1b:00.0입니다.

    $ lspci -nn | grep accelerators
    1b:00.0 Processing accelerators [1200]: Device [1eff:1220] (rev 03)
    
  2. 1단계에서 확인한 BDF를 domain, bus, slot, function 형식으로 변환하여 XML에 지정하고, 해당 XML 파일을 사용하여 NPU 장치를 VM에 할당합니다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ cat > npu-device.xml << EOF
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <source>
        <address domain='0x0000' bus='0x1b' slot='0x00' function='0x0'/>
      </source>
    </hostdev>
    EOF
    
    $ virsh attach-device vm-name npu-device.xml --config
    

    Note

    virsh edit으로 VM XML을 직접 편집하여 <hostdev> 항목을 추가해도 동일하게 구성할 수 있습니다.

  3. NPU가 할당된 VM을 시작합니다.

    $ virsh start vm-name
    
  4. VM에 접속하여 NPU가 정상적으로 할당되었는지 확인합니다.

    1
    2
    3
    $ virsh console vm-name
    $ lspci -nn | grep accelerators
    07:00.0 Processing accelerators [1200]: Device [1eff:1220] (rev 03)