ฉันกำลังพยายามใช้ PCI-Passthrough เพื่อแนบการ์ดวิดีโอเก่า (Radeon 4770) กับเครื่องเสมือน ฉันใช้ Linux-KVM เพื่อเรียกใช้เครื่องเสมือนบนโฮสต์ Debian Linux (Wheezy, 3.2.0-4-amd64)
คำถาม
เพื่อชี้แจงฉันไม่แน่ใจว่าสิ่งที่ถูกต้อง 'เส้นทาง' สำหรับการสอดแทรก PCI-Passthrough กับ Linux KVM ในขั้นตอนนี้ฉันสงสัยว่าการกระทำที่ถูกต้องคือการเพิ่มCONFIG_DMAR
, CONFIG_DMAR_DEFAULT_ON
และCONFIG_PCI_STUB
ไปที่ "ตัวเลือกบัส (PCI ฯลฯ )" ส่วนของแหล่งที่มาเคอร์เนลและ recompile
แต่ฉันไม่แน่ใจว่านี่เป็นรายละเอียดเพิ่มเติมที่จำเป็นก่อนที่จะทำการคอมไพล์ใหม่หรือไม่ หรือถ้าการคอมไพล์เคอร์เนลใหม่จำเป็น -บางทีอาจจะมีวิธีที่ง่ายกว่านี้ไหม?
จากคู่มือที่ฉันอ้างอิงมีเพียงlinux-kvm.org ที่กล่าวถึงอย่างชัดเจนว่าจำเป็นต้องมีการรวบรวม Linux-KVM ติดตั้งแล้วและทำงานเป็นไฮเปอร์ไวเซอร์
การวิจัย
ณ จุดนี้ฉันคิดว่าปัญหาของฉันเกี่ยวข้องกับเคอร์เนลของฉัน ทรัพยากรหลักของฉันเป็นแนวทางที่linux-kvm.org ( http://www.linux-kvm.org/page/How_to_assign_devices_with_VT-d_in_KVM ) อย่างไรก็ตามฉันได้พบทรัพยากรอื่น ๆ ซึ่งระบุวิธีการที่แตกต่างกันเล็กน้อยที่มีการแจกแจงเฉพาะ (ดูเหมือน):
SUSE - "openSUSE: การจำลองเสมือนด้วย KVM" (การละเว้นการเชื่อมโยงเนื่องจากความเกี่ยวข้องต่ำและข้อ จำกัด 2 ลิงก์)
คู่มือ Fedora ทำงานได้จนกว่าจะมีการอ้างอิงsetsebool
ซึ่งเฉพาะ RedHat คู่มือ SUSE บ่งชี้ว่าไม่รองรับ SUSE ที่ได้รับมอบหมายกราฟิกการ์ดอย่างไรก็ตามฉันกำลังอ้างอิงด้วยเช่นกันเพราะมันระบุว่าฉันควรหาCONFIG_DMAR_DEFAULT_ON
สตริงภายใน / boot / config-`uname -r` linux-kvm.orgเว็บไซต์ยังมีการอ้างอิงCONFIG_DMAR_DEFAULT_ON
เพื่อให้ปรากฏขึ้นนี้จะพบบ่อยและองค์ประกอบที่จำเป็น
หมายเหตุ:ฉันไม่พบข้อ จำกัด สำหรับการ์ดกราฟิกในคู่มือสำหรับ Fedora หรือ Debian เอกสาร SUSE ที่อ้างอิงคือวันที่ 2006-2013
ฉันหาไม่พบCONFIG_DMAR_DEFAULT_ON
ใน / boot / config-`uname -r` บนระบบของฉัน นอกจากนี้การวิจัยแสดงให้เห็นว่าCONFIG_DMAR
, CONFIG_DMAR_DEFAULT_ON
และCONFIG_PCI_STUB
มีรายการค่าเคอร์เนลที่เกี่ยวข้องกับคำแนะนำบนlinux-kvm.org เช่นนี้ฉันเชื่อว่าฉันจำเป็นต้องคอมไพล์เคอร์เนลโฮสต์ของฉันใหม่ด้วยรายการปรับแต่งเคอร์เนล 3 ตัว (อย่างน้อย) นี้ การบูตด้วยintel_iommu=on
พารามิเตอร์เคอร์เนลไปยังโฮสต์ -OS ของฉันดูเหมือนว่าไม่เพียงพอ
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"
การยืนยันการสนับสนุน VT-d / IOMMU / KVM
การวิจัยของฉันระบุว่า PCI-Passthrough ต้องการทั้ง CPU และเมนบอร์ดที่รองรับสำหรับ VT-d
VT-d
ฉันยืนยันว่าโปรเซสเซอร์ของฉันซึ่งไม่ใช่ k INTEL i7-3770 (ต่อ ark.intel.com/products/65719) รองรับ VT-d:
Intel® Virtualization Technology สำหรับกำกับ I / O (VT-d) ‡ใช่
มาเธอร์บอร์ด My Asrock Z77 Extreme4 ยังรองรับ VT-d (หน้า 62 ของคู่มือผู้ใช้):
VT-d ใช้สิ่งนี้เพื่อเปิดใช้งานหรือปิดใช้งานเทคโนโลยี Intel ® VT-d (เทคโนโลยี Intel ® Virtualization สำหรับ Directed I / O) ค่าเริ่มต้นของคุณสมบัตินี้คือ [ปิดใช้งาน]
IOMMU
ฉันตรวจสอบแล้วว่าระบบของฉันรองรับ IOMMU:
dmesg | grep -e DMAR -e IOMMU | grep -e "DRHD base" -e "enabled"
[ 0.000000] Intel-IOMMU: enabled
KVM
KVM ได้รับการติดตั้งและใช้งานได้นอกเหนือจากการรองรับ PCI-Passthrough:
lsmod | grep kvm
kvm_intel 121968 0
kvm 287749 1 kvm_intel
ฉันมั่นใจว่า VT-d เปิดใช้งานผ่าน BIOS ของเมนบอร์ด ด้วยเหตุนี้ฉันจึงไม่สงสัยว่าปัญหาฮาร์ดแวร์ / BIOS ที่จะป้องกันการใช้ VT-d ไม่ว่าฉันไม่สามารถที่จะประสบความสำเร็จถอดการ์ดของฉันจากโฮสต์ของฉันและโอนไปยังเครื่องเสมือน
การปิดความคิด
ในที่สุดฉันอยากจะพูดถึงว่าฉันได้ลองทดสอบ:
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
และได้รับข้อผิดพลาดต่อไปนี้หลังจากพยายามสร้าง VM เป้าหมาย:
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
ฉันเดาว่านี่เป็นเพราะโฮสต์ยังคงไม่ละทิ้งการควบคุมของการ์ดแสดงผลและน่าจะเกิดจากเคอร์เนลที่ไม่ได้ถูกคอมไพล์ด้วยรายการการกำหนดค่าที่เหมาะสม
นี่คือดินแดนใหม่สำหรับฉันดังนั้นโปรดยกโทษให้ฉันที่ไม่มีประสบการณ์ ฉันขอขอบคุณข้อเสนอแนะใด ๆอย่างมากแม้ว่ามันจะเป็นเพียงการยืนยันว่าฉันอยู่ในเส้นทางที่ถูกต้อง กรุณาแจ้งให้เราทราบหากฉันมีการกำกับดูแลที่จ้องมองหรือคิดมากเกินไป วิจารณ์ที่สร้างสรรค์ของคำถามของฉันก็ยินดีต้อนรับเช่นกัน แจ้งให้เราทราบหากฉันไม่ได้ให้ข้อมูลเพียงพอที่จะ "ช่วยคุณช่วยฉัน" (หรือถ้าฉันรวมมากเกินไป!) ฉันยินดีเป็นอย่างยิ่งที่จะช่วยทำให้คำถามของฉันชัดเจนขึ้นหรือตอบได้ง่ายขึ้น
ขอบคุณล่วงหน้า,