SR-IOV 패치 적용된 6.1.55 커널 - Virtual iGPU Passthru
Proxmox 에서 n100 등 인텔 11세대 (?) 이후의 내장 그래픽 GPU를 리눅스에 패스스루 하기 위해서 패치하고 빌드된 6.1.55 커널 (오늘 기준 최신 stable LTX 버전입니다.)과 관련 파일입니다. (n100 VM에서 빌드하는데 8시간쯤 걸렸습니다. ㅎㅎ)
동작은 Debian 12 배포본 VM에서 확인했습니다. (다른 배포판에서는 동작하지 않는 듯 합니다.)
적용방법을 간단히 설명드리겠습니다.
(1) Proxmox 호스트 설정
달소님 가이드의 호스트 설정부분을 적용합니다.
(2) Debian 12 Guest VM 생성
debain bookworm VM을 생성하되 아래의 조건으로 합니다.
- BIOS: OVMF (UEFI)
- Display: Default
- Machine: q35
- Secure boot must be disabled in the UEFI BIOS, otherwise the new, unsigned, kernel will not start.
- CPU Type : Host
(3) VM 설정 변경 (모든 과정은 Root 로 진행합니다.)
-
apt update && apt -y dist-upgrade && apt -y autoremove
-
apt -y install dkms dwarves git pahole vainfo
- Zip 파일을 댜운받아 압축을 풀고 "dpkg -i *.deb" 명령으로 설치후 reboot
- 재부팅후 uname -r 출력이 6.1.55-sriov 인지 확인
-
cd /usr/src git clone https://github.com/strongtz/i915-sriov-dkms i915-sriov-dkms-6.1
- /usr/src/i915-sriov-dkms-6.1/dkms.conf의 윗 두줄을 아래와 같이 수정
PACKAGE_NAME="i915-sriov-dkms"
PACKAGE_VERSION="6.1"
- dkms install --force -m i915-sriov-dkms -v 6.1
- /etc/default/grub 에 다음 변경 적용
GRUB_CMDLINE_LINUX_DEFAULT="quiet i915.enable_guc=3"
- update-grub
- update-initramfs -u
- poweroff
(4) 맨 위 달소님 가이드의 윈도우와 동일한 방법으로 virtual iGPU 하드웨어에 추가 하고 부팅
(5) 제대로 적용되었는지 확인은
- /dev/dri 에 render128 이 있고
- sudo vainfo 의 출력이 아래와 같으면 성공입니다.
-
root@Testdebian:~# vainfo
error: XDG_RUNTIME_DIR is invalid or not set in the environment.
error: can't connect to X server!
libva info: VA-API version 1.17.0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_17
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.17 (libva 2.12.0)
vainfo: Driver version: Intel iHD driver for Intel(R) Gen Graphics - 23.1.1 ()
vainfo: Supported profile and entrypoints
VAProfileNone : VAEntrypointVideoProc
VAProfileNone : VAEntrypointStats
VAProfileMPEG2Simple : VAEntrypointVLD
VAProfileMPEG2Main : VAEntrypointVLD
VAProfileH264Main : VAEntrypointVLD
VAProfileH264Main : VAEntrypointEncSliceLP
VAProfileH264High : VAEntrypointVLD
VAProfileH264High : VAEntrypointEncSliceLP
VAProfileJPEGBaseline : VAEntrypointVLD
VAProfileJPEGBaseline : VAEntrypointEncPicture
VAProfileH264ConstrainedBaseline: VAEntrypointVLD
VAProfileH264ConstrainedBaseline: VAEntrypointEncSliceLP
VAProfileVP8Version0_3 : VAEntrypointVLD
VAProfileHEVCMain : VAEntrypointVLD
VAProfileHEVCMain : VAEntrypointEncSliceLP
VAProfileHEVCMain10 : VAEntrypointVLD
VAProfileHEVCMain10 : VAEntrypointEncSliceLP
VAProfileVP9Profile0 : VAEntrypointVLD
VAProfileVP9Profile0 : VAEntrypointEncSliceLP
VAProfileVP9Profile1 : VAEntrypointVLD
VAProfileVP9Profile1 : VAEntrypointEncSliceLP
VAProfileVP9Profile2 : VAEntrypointVLD
VAProfileVP9Profile2 : VAEntrypointEncSliceLP
VAProfileVP9Profile3 : VAEntrypointVLD
VAProfileVP9Profile3 : VAEntrypointEncSliceLP
VAProfileHEVCMain12 : VAEntrypointVLD
VAProfileHEVCMain422_10 : VAEntrypointVLD
VAProfileHEVCMain422_12 : VAEntrypointVLD
VAProfileHEVCMain444 : VAEntrypointVLD
VAProfileHEVCMain444 : VAEntrypointEncSliceLP
VAProfileHEVCMain444_10 : VAEntrypointVLD
VAProfileHEVCMain444_10 : VAEntrypointEncSliceLP
VAProfileHEVCMain444_12 : VAEntrypointVLD
VAProfileHEVCSccMain : VAEntrypointVLD
VAProfileHEVCSccMain : VAEntrypointEncSliceLP
VAProfileHEVCSccMain10 : VAEntrypointVLD
VAProfileHEVCSccMain10 : VAEntrypointEncSliceLP
VAProfileHEVCSccMain444 : VAEntrypointVLD
VAProfileHEVCSccMain444 : VAEntrypointEncSliceLP
VAProfileAV1Profile0 : VAEntrypointVLD
VAProfileHEVCSccMain444_10 : VAEntrypointVLD
VAProfileHEVCSccMain444_10 : VAEntrypointEncSliceLP