728x90
๐ง ๋ก๊ทธ ๊ฐ์ (Overview)
์ด ๋ก๊ทธ๋ NVIDIA NVLink ์๋ธ์์คํ ์ด GPU ↔ NVSwitch ๊ฐ ๋งํฌ ์ํ๋ฅผ ์ ๋ฐ์ดํธํ์ง ๋ชปํ์ ๋ ๋ฐ์ํ๋
์ปค๋ ๋ ๋ฒจ NVRM ๊ฒฝ๊ณ ๋ก๊ทธ์ ๋๋ค.
NVRM: knvlinkUpdatePostRxDetectLinkMask_IMPL: Failed to update Rx Detect Link mask!
์ด ๋ฉ์์ง๋ NVLink ํฌํธ๊ฐ Rx Detect ๋จ๊ณ์์ ๊ฐ์ง ์คํจํ๊ฑฐ๋,
PCIe ๋ฒ์ค ๋ฆฌ์ ์ดํ NVLink ์ฌ์ด๊ธฐํ๊ฐ ์๋ฃ๋์ง ์์์ ๋ ์ฃผ๋ก ๋ฐ์ํฉ๋๋ค.
GPU ์ด๊ธฐํ๊ฐ ์๋ฃ๋์ง ๋ชปํ๋ฉด, KubeVirt์ virt-handler๊ฐ GPU๋ฅผ VM์ attachํ๋ ๊ณผ์ ์์
libvirt ์ด๊ธฐํ ์คํจ(LibvirtError) ๋ฅผ ์ผ์ผํค๋ฉฐ
VM์ด ์ค์ ๋ก ๊ธฐ๋๋์ง ์์ต๋๋ค.
๐ 1. ํ์ (Symptoms)
- ํ๊ฒฝ
- ๋ฌผ๋ฆฌ ๋ ธ๋๋ GPU๋ฅผ ์ง์ ์ฌ์ฉํ์ง ์๊ณ Kubernetes ์์ปค๋ ธ๋๋ก ๋์
- GPU๋ VM ๋ด๋ถ์์ passthrough ๋ฐฉ์์ผ๋ก ์ฌ์ฉ
- VM์ KubeVirt ๊ธฐ๋ฐ์ผ๋ก ์์ฑ๋๋ฉฐ Slurm job์ VM ๋ด๋ถ์์ ์คํ
- ๋ฐ์ ๋ก๊ทธ
- Host ์ปค๋ ๋ก๊ทธ:
2025-10-10T22:25:01.838131+09:00 gsvp-msi-gpu031 kernel: NVRM: knvlinkUpdatePostRxDetectLinkMask_IMPL: Failed to update Rx Detect Link mask!
- virt-handler ๋ก๊ทธ:
LibvirtError: internal error: Unknown PCI header type '127' for device '0000:ed:00.0'
- ํ์ ์์ฝ
- VM ์์ฑ ์์ฒญ์ด ๋ค์ด๊ฐ์ผ๋ VMI๋ ์์ฑ๋์ง ์์
- virt-handler pod์์ GPU attach ์์ ์ libvirt ์ด๊ธฐํ ์คํจ
- VM ์ํ๋ “Stopped” ๋๋ “Waiting”์ผ๋ก ์ ์ง๋จ
- ์ํฅ
- ํด๋น GPU๊ฐ ํ ๋น๋ VM ๊ธฐ๋ ๋ถ๊ฐ
- ๋์ผ ๋ ธ๋์ GPU ์ค์ผ์ค๋ง ์ง์ฐ ๊ฐ๋ฅ
๐ 2. ๋ถ์ ๊ณผ์ (Investigation)
โ virt-handler ๋ก๊ทธ ํ์ธ (๋ ธ๋ ๋จ์)
kubectl get pods -n kubevirt -l kubevirt.io=virt-handler
kubectl logs -n kubevirt virt-handler-gsvp-msi-gpu031
- virt-handler๋ DaemonSet์ผ๋ก ๊ฐ ๋ ธ๋์ 1๊ฐ์ฉ ์คํ๋์ด
- VMI lifecycle๊ณผ libvirt ์ฐ๋์ ๋ด๋นํจ
- ํด๋น ๋ ธ๋์ handler ๋ก๊ทธ์์ GPU ์ด๊ธฐํ ์คํจ ํ์ธ:
LibvirtError: internal error: Unknown PCI header type '127' for device '0000:ed:00.0'
- GPU ์ฅ์น ์ด๊ธฐํ ์ค PCIe ํค๋ ํ๋ ์คํจ
- SyncFailed ์ด๋ฒคํธ๋ handler ๋ด๋ถ์์ ๋ฐ์ํ์ผ๋ฉฐ VMI๋ ์์ฑ๋์ง ์์
- VM ๊ฐ์ฒด๋ ์กด์ฌํ์ง๋ง libvirt attach ๋จ๊ณ์์ ์คํจ
โก VirtualMachine (VM) ๋ฆฌ์์ค ์ํ ํ์ธ
kubectl get vm -n <namespace>
kubectl describe vm <VM_NAME> -n <namespace>
- ์ ์ธ๋ VM ์คํ์ ์ ์์ด๋, ์ํ(Status)๊ฐ Stopped ๋๋ Waiting
- ์ด๋ฒคํธ์๋ VMI ์์ฑ ๊ด๋ จ ์คํจ ๋ฉ์์ง๊ฐ ํฌํจ๋จ
โข ํธ์คํธ ์ปค๋ ๋ก๊ทธ ํ์ธ
journalctl -k -n 300 | grep -i nvrm
- NVLink ๊ด๋ จ ์๋ฌ ๋ฐ๋ณต ๋ฐ์:
NVRM: knvlinkUpdatePostRxDetectLinkMask_IMPL: Failed to update Rx Detect Link mask!
- → GPU ↔ NVSwitch ๊ฐ ๋งํฌ ๊ฐ์ง ์คํจ๋ก ์ฅ์น๊ฐ “partial initialized” ์ํ
โฃ GPU ๋ฐ PCIe ์ํ ์ ๊ฒ
nvidia-smi -L
nvidia-smi -q -d NVLINK | grep -E "Link [0-9]+:|Errors"
lspci -vvv | grep -i nvidia -A 10
- GPU ๋๋ฐ์ด์ค๋ PCIe ์์์ ์กด์ฌํ์ง๋ง NVLink๋ Inactive
- NVLink bring-up ์คํจ → GPU attach ์์ ์์ libvirt ์ค๋ฅ ๋ฐ์
โ๏ธ 3. ์์ธ (Root Cause)
- NVLink ๊ฐ์ง(Rx Detect) ๋จ๊ณ ์คํจ
- GPU ↔ NVSwitch ๊ฐ ๋งํฌ๊ฐ ์ฌํ์ฑ๋์ง ์์ NVLink ์ํ ๊ฐฑ์ ์คํจ
- libvirt attach ํ์ด๋ฐ ๋ถ์ผ์น
- GPU ์ด๊ธฐํ ์๋ฃ ์ ์ VM attach ์๋๊ฐ ๋ฐ์ํ์ฌ PCI ํค๋ ํ๋ ์ค๋ฅ ๋ฐ์
- PCIe bus hot reset ๋ถ์์
- GPU๊ฐ ๋ ผ๋ฆฌ์ ์ผ๋ก ์ธ์๋์ง๋ง NVLink bring-up ๋ฏธ์๋ฃ ์ํ๋ก ๋จ์
๐งฉ 4. ์กฐ์น ๋ฐ ๋์ (Actions)
โ ์ค์ ํด๊ฒฐ ๋ฐฉ๋ฒ (Confirmed Resolution)
- ์ฝ๋ ๋ฆฌ๋ถํธ (Cold Reboot)
- ๋ฌผ๋ฆฌ ๋ ธ๋์ ์ ์์ ์์ ํ ์ฐจ๋จ ํ ์ฌ๊ธฐ๋
- PCIe ๋ฐ NVLink๊ฐ ํ๋์จ์ด ๋ ๋ฒจ์์ ์์ ์ฌ์ด๊ธฐํ๋จ
- VM(VMI)์ ์ญ์ ํ์ง ์์์ผ๋ฉฐ, ํธ์คํธ ์ฌ๊ธฐ๋ ํ GPU ์๋ ๋ณต๊ตฌ๋จ
sudo shutdown -h now
# ์ ์ OFF → ON ์ดํ ์ํ ํ์ธ
nvidia-smi -q -d NVLINK | grep Active
- ๋ชจ๋ NVLink ๋งํฌ Active, VM ์ ์ ๊ธฐ๋ ํ์ธ
๐งญ ์ฐธ๊ณ ์ฉ ๋์ฒด ์กฐ์น (Alternative / Workaround)
๋ณธ ์ผ์ด์ค์์๋ ์ํํ์ง ์์์ผ๋, ์ ์ฌ ์ฆ์ ์ ์๋ ๊ฐ๋ฅํ ์ผ๋ฐ ์กฐ์น
- GPU ๋๋ผ์ด๋ฒ ์ฌ์ ์ฌ
sudo systemctl stop nvidia-persistenced
sudo rmmod nvidia_uvm nvidia_drm nvidia_modeset nvidia
sudo modprobe nvidia nvidia_modeset nvidia_drm nvidia_uvm
sudo systemctl start nvidia-persistenced
- ์ผ๋ถ ํ๊ฒฝ์์ NVLink ๋ณต๊ตฌ ๊ฐ๋ฅํ๋ ๊ทผ๋ณธ์ ํด๊ฒฐ์ฑ ์ ์๋.
- ๋ฒ์ ์ ๋ ฌ ์ ๊ฒ
- NVSwitch FW, GPU FW, Driver ๊ฐ ๋ฒ์ ํธํ์ฑ ํ์ธ
- ์ปค๋ ์ ๋ฐ์ดํธ ํ ๋ฐ์ ์ ๋๋ผ์ด๋ฒ rollback ๊ณ ๋ ค
๐ 5. ๊ฒ์ฆ ๊ฒฐ๊ณผ (Verification)
- ํธ์คํธ
nvidia-smi
nvidia-smi -q -d NVLINK | grep Active
- → NVLink Active ์ํ ํ์ธ, ์ปค๋ ๋ก๊ทธ์์ ์ฌ๋ฐ ์์
- VM
- VM ๊ธฐ๋ ์๋ฃ (kubectl get vm → Running)
- GPU passthrough ์ ์ ์๋ (nvidia-smi ์ ์ ์๋ต)
728x90