Triển khai truyền qua PCI với Linux-KVM trên Debian


10

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_ONCONFIG_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ể:

Fedora-- https://docs.fedoraproject.org/en-US/Fedora/13/html/Virtualization_Guide/chap-Virtualization-PCI_passthrough.html

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 setseboolcó 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_ONchuỗ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_ONtrong / 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_ONCONFIG_PCI_STUBlà 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=ontư 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


Điều gì xảy ra là bạn không để cho videocard tự gắn vào máy chủ (ví dụ: khởi động mà không gắn videocard đó vào máy chủ của bạn. Hoặc bằng cách không cung cấp / vô hiệu hóa trình điều khiển hoặc bằng cách sử dụng tham số khởi động kernel để nó bị bỏ qua trong quá trình khởi động) ?
Hennes

Câu trả lời:


1

Bài viết được đề cập cho thông qua PCI, cấu hình Kernel là bắt buộc

make menuconfig
set "Bus options (PCI etc.)" -> "Support for DMA Remapping Devices" to "*"
set "Bus options (PCI etc.)" -> "Enable DMA Remapping Devices" to "*"
set "Bus options (PCI etc.)" -> "PCI Stub driver" to "*"

optional setting: 
set "Bus options (PCI etc.)" -> "Support for Interrupt Remapping" to "*"

Tuy nhiên, tôi không thể tìm thấy các tùy chọn này trong "Tùy chọn xe buýt" và thay vào đó là "Trình điều khiển thiết bị -> Hỗ trợ phần cứng IOMMU".

Sau khi theo dõi bài viết được đề cập, tôi vẫn gặp sự cố khi khởi động máy khách và gặp lỗi mà "Thiết bị 'pci-gán' không thể khởi chạy được". Tôi quản lý để có được nó khởi động bằng cách thực hiện:

 echo 1 > /sys/module/kvm/parameters/allow_unsafe_assigned_interrupts

Tham khảo bài viết sau nếu bạn vẫn gặp sự cố: http://spica-and-roid.blogspot.com.au/2012/07/howto-kvm-passthrough.html

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.