Tôi đang cố gắng sử dụng PCI-Passthrough để gắn thẻ video cũ (Radeon 4770) vào máy ảo. Tôi đang sử dụng Linux-KVM để chạy các máy ảo của mình trên máy chủ Debian Linux (Wheezy, 3.2.0-4-amd64).
Câu hỏi
Để làm rõ, tôi không chắc chắn 'đường dẫn' chính xác là gì để thực hiện Truyền dữ liệu PCI với Linux KVM. Ở giai đoạn này tôi nghi ngờ hành động đúng là để thêm CONFIG_DMAR
, CONFIG_DMAR_DEFAULT_ON
và CONFIG_PCI_STUB
để "Tùy chọn Bus (PCI vv)" phần của nguồn kernel và biên dịch lại.
Nhưng tôi không chắc đây có phải là một danh sách đầy đủ các bổ sung cần thiết trước khi biên dịch lại hay không. Hoặc nếu biên dịch lại kernel là cần thiết - có một phương pháp dễ dàng hơn?
Trong số các hướng dẫn tôi đã tham khảo, chỉ có linux-kvm.org đề cập rõ ràng việc biên dịch là cần thiết. Linux-KVM đã được cài đặt và hoạt động như một trình ảo hóa.
Nghiên cứu
Tại thời điểm này tôi nghĩ vấn đề của tôi liên quan đến kernel của tôi. Tài nguyên chính của tôi đã là hướng dẫn tại linux-kvm.org ( http://www.linux-kvm.org/page/How_to_assign_devices_with_VT-d_in_KVM ). Tuy nhiên, tôi đã tìm thấy các tài nguyên khác chỉ ra các phương thức hơi khác nhau (dường như) phân phối cụ thể:
SUSE - "openSUSE: Ảo hóa với KVM" (Liên kết bị bỏ qua do mức độ liên quan thấp và giới hạn 2 liên kết)
Hướng dẫn Fedora hoạt động cho đến khi tham chiếu setsebool
có vẻ là đặc trưng của RedHat. Hướng dẫn SUSE chỉ ra việc gán card đồ họa không được SUSE hỗ trợ, tuy nhiên tôi cũng tham khảo nó vì nó chỉ ra rằng tôi nên tìm một CONFIG_DMAR_DEFAULT_ON
chuỗi trong / boot / config-`uname -r`. Các linux-kvm.org trang web cũng tài liệu tham khảo CONFIG_DMAR_DEFAULT_ON
, vì vậy xuất hiện này là một phổ biến và thành phần cần thiết.
Lưu ý: Tôi chưa tìm thấy các hạn chế đối với card đồ họa trong hướng dẫn cho Fedora hoặc Debian. Tài liệu SUSE được tham chiếu là ngày 2006-2013.
Tôi không thể tìm thấy CONFIG_DMAR_DEFAULT_ON
trong / boot / config-`uname -r` trên hệ thống của mình. Nghiên cứu sâu hơn cho thấy rằng CONFIG_DMAR
, CONFIG_DMAR_DEFAULT_ON
và CONFIG_PCI_STUB
là các mục cấu hình nhân Linux có liên quan đến các hướng dẫn trên linux-kvm.org . Vì vậy, tôi tin rằng tôi cần biên dịch lại kernel của máy chủ lưu trữ của mình với 3 (ít nhất) các mục cấu hình kernel này. Khởi động với intel_iommu=on
tư cách là một tham số kernel cho hệ điều hành máy chủ của tôi dường như là không đủ.
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"
Xác nhận hỗ trợ VT-d / IOMMU / KVM
Nghiên cứu của tôi chỉ ra rằng PCI-Passthrough yêu cầu cả CPU và Bo mạch chủ hỗ trợ cho VT-d.
VT-d
Tôi đã xác nhận rằng bộ xử lý của tôi, một INTEL i7-3770 không phải k (per ark.intel.com/products/65719), hỗ trợ VT-d:
Công nghệ ảo hóa Intel® cho I / O được chỉ đạo (VT-d) ‡ Có
Bo mạch chủ Asrock Z77 Extreme4 của tôi cũng hỗ trợ VT-d (trên mỗi trang 62 của Hướng dẫn sử dụng):
VT-d Sử dụng công cụ này để bật hoặc tắt công nghệ Intel ® VT-d (Công nghệ ảo hóa Intel ® cho I / O được điều hướng). Giá trị mặc định của tính năng này là [Đã tắt].
IOMMU
Tôi đã xác minh rằng hệ thống của tôi có hỗ trợ IOMMU:
dmesg | grep -e DMAR -e IOMMU | grep -e "DRHD base" -e "enabled"
[ 0.000000] Intel-IOMMU: enabled
KVM
KVM được cài đặt và hoạt động, ngoài hỗ trợ PCI-Vượt qua:
lsmod | grep kvm
kvm_intel 121968 0
kvm 287749 1 kvm_intel
Tôi đã đảm bảo rằng VT-d được kích hoạt thông qua BIOS của bo mạch chủ của tôi. Như vậy, tôi không nghi ngờ các sự cố phần cứng / BIOS sẽ ngăn việc sử dụng VT-d. Bất kể, tôi không thể tách thành công card màn hình của mình khỏi máy chủ của mình và gán lại nó cho một máy ảo .
Bớt tư tưởng
Cuối cùng tôi muốn đề cập rằng tôi cũng đã thử kiểm tra:
echo "8086 10b9" \> /sys/bus/pci/drivers/pci-stub/new_id
echo "0000:01:00.0" \> /sys/bus/pci/devices/0000:01:00.0/driver/unbind
echo "0000:01:00.0" \> /sys/bus/pci/drivers/pci-stub/bind
echo "8086 10b9" > /sys/bus/pci/drivers/pci-stub/remove_id
kvm -m 512 -boot c -net none -hda debian-7.1.0-amd64-netinst.iso -device pci-assign,host=01:00.0
và đã gặp lỗi sau khi cố gắng tạo VM đích:
Failed to assign device "(null)" : Device or resource busy
*** The driver 'pci-stub' is occupying your device 0000:01:00.0.
***
*** You can try the following commands to free it:
***
*** $ echo "8086 10b9" > /sys/bus/pci/drivers/pci-stub/new_id
*** $ echo "0000:01:00.0" > /sys/bus/pci/drivers/pci-stub/unbind
*** $ echo "0000:01:00.0" > /sys/bus/pci/drivers/pci-stub/bind
*** $ echo "8086 10b9" > /sys/bus/pci/drivers/pci-stub/remove_id
***
kvm: -device pci-assign,host=01:00.0: Device 'pci-assign' could not be initialized
Tôi đoán điều này là do máy chủ vẫn không từ bỏ quyền kiểm soát card màn hình và có khả năng do kernel không được biên dịch với các mục cấu hình phù hợp.
Đây là lãnh thổ mới đối với tôi vì vậy xin vui lòng tha thứ cho sự thiếu kinh nghiệm của tôi. Tôi sẽ đánh giá rất cao bất kỳ thông tin phản hồi nào, ngay cả khi chỉ đơn giản là xác nhận rằng tôi đang đi đúng hướng. Xin vui lòng cho tôi biết nếu tôi đã thực hiện một giám sát rõ ràng hoặc suy nghĩ quá mức. Phê bình mang tính xây dựng cho câu hỏi của tôi cũng được chào đón. Hãy cho tôi biết nếu tôi chưa cung cấp đủ thông tin để "giúp bạn giúp tôi" (hoặc nếu tôi đã bao gồm quá nhiều!). Tôi sẽ rất vui khi giúp làm cho câu hỏi của tôi rõ ràng hơn hoặc dễ trả lời hơn.
Cảm ơn bạn trước