คำถามสั้น ๆ :
ฉันจะเปิดการintel_iommu
ตั้งค่าในเคอร์เนล Linux ได้อย่างไร ฉันใช้โฮสต์ Debian โดยใช้ bootloader grub2 เอกสารที่ฉันได้เห็นบอกว่าจะแก้ไข/boot/grub/menu.lst
ซึ่งดูเหมือนจะเกี่ยวข้องเฉพาะกับด้วง 1.x เนื่องจากฉันไม่มีไฟล์นั้น
เป็นความเข้าใจของฉัน (และตัวเลือกสุดท้ายที่ฉันนึกได้) ว่าการเปลี่ยนตัวเลือกการบูตนี้อาจกำจัดข้อความแสดงข้อผิดพลาดต่อไปนี้ /var/log/kern.log
vboxpci: No IOMMU domain (attach)
คำถามยาว:
ให้เกสต์ OS เข้าถึงกราฟิกการ์ดโดยตรง
ฉันเพิ่งรู้ว่ามันเป็นไปได้ที่จะผ่านอุปกรณ์ PCI-Express ไปยังแขกของ OS ที่ทำงานใน Virtualbox เจ๋งฉันคิดว่า! ฉันมีการ์ดกราฟิก NVIDIA Quadro FX สองตัว (ที่มีการเชื่อมต่อ SLI bridge ในสถานที่ซึ่งฉันหวังว่าจะไม่ทำให้เกิดความเศร้าโศก) และต้องการอุทิศกราฟิกการ์ดตัวที่ 2 ให้กับแขกระบบปฏิบัติการเพื่อให้ฉันสามารถใช้คุณสมบัติ OpenGL ภายใน Photoshop และคณะ
NVIDIA ตลาดการกำหนดค่า" SLI Multi-OS " ซึ่งโดยพื้นฐานแล้วเป็นสิ่งที่ฉันต้องการตั้งค่าสำหรับทุกวัย แต่ฉันไม่ต้องการใช้จ่ายยิ่งใหญ่ในซอฟต์แวร์ Virtualisation (Parallels เวิร์กสเตชันสุดขีด) เมื่อฉันได้รับ ใช้ VirtualBox อย่างมีความสุขมานานหลายปีแล้ว
ระบบโฮสต์
ฉันใช้ linux-3.5.0-19 จากแหล่งเก็บข้อมูล Debian บนอุปกรณ์เวิร์คสเตชั่นระดับสูง (Asus P6T7 WS Supercomputer mobo ที่มีชิปเซ็ต Intel ICH10R และ Xeon W3680 CPU) และต้องการเปิดการสนับสนุน IOMMU ในเคอร์เนล ควรดีกว่าโดยไม่ต้องรวบรวมมันเอง
ไบออส
ในการตั้งค่า BIOS ฉันเปิดใช้งานการสนับสนุน VT-x และ VT-d ฉันไม่เห็นอะไรเลยที่พูดถึง IOMMU โดยเฉพาะ
การต่ออุปกรณ์ PCI
นี่เป็นเรื่องง่ายที่น่าประหลาดใจ! เอกสาร VirtualBox อย่างเป็นทางการที่นี่ สิ่งที่ฉันทำซึ่งฉันพบว่ามีความคลุมเครือน้อยกว่าคือการเปิดnvidia-settings
ให้เลือกการ์ดกราฟิกรองและจดบันทึก Bus ID ("PCI: 5: 0: 0" ในกรณีของฉัน) จากนั้นจากบรรทัดคำสั่งของโฮสต์: -
VBoxManage modifyvm "Windows Guest" --pciattach 05:00.0
(เมื่อฉันเปิดใช้งานครั้งแรกมีข้อผิดพลาดเนื่องจาก VirtualBox เลียนแบบชิปเซ็ต PIIX มันบอกว่า PCI pass-through นั้นใช้ได้กับชิปเซ็ต ICH9 เท่านั้นดังนั้นฉันจึงเปลี่ยนชิปเซ็ตเป็น ICH9 ในการตั้งค่า VirtualBox VM System และเปิดแขก เพื่อติดตั้งไดรเวอร์ใหม่ที่จำเป็นรีบูตในภายหลังและทุกอย่างทำงานได้ดีดังนั้นฉันจึงปิดผู้เยี่ยมชมและรันคำสั่งอีกครั้ง)
ไม่มีผลลัพธ์และฉันก็กลับไปที่บรรทัดคำสั่งเกือบจะในทันที
ใช้ GPU โฮสต์จากแขก
ก่อนที่จะเปิดแขกฉันรีบูตเครื่องโฮสต์เป็นครั้งแรกในกรณีที่มีสิ่งที่ไม่จำเป็นต้องมีในเคอร์เนลโดย virtualbox-dkms เมื่อฉันรันคำสั่งก่อนหน้าโดยไม่มีsudo
สิทธิ์ฉันสงสัยว่ามีการเปลี่ยนแปลงใด ๆ เกิดขึ้น
เมื่อฉันเริ่มผู้เยี่ยมชมครั้งต่อไป Windows Update เริ่มทำสิ่งนั้นและตรวจพบและติดตั้งไดรเวอร์ NVIDIA ที่ถูกต้องโดยอัตโนมัติ ทุกคนดูดีมาก ก่อนที่ฉันจะสามารถใช้อุปกรณ์ได้ฉันต้องรีบูตแขก ...
ปัญหา
หลังจากติดตั้งไดรเวอร์การ์ดแสดงผลบนเกสต์และติดตั้งอุปกรณ์ PCI แล้วฉันไม่สามารถเข้าสู่เดสก์ท็อป Windows ได้ ฉันไปที่หน้าจอเข้าสู่ระบบ Windows จากนั้นหลังจากเข้าสู่ระบบหน้าจอค้างเพียงแค่พูดว่า "ยินดีต้อนรับ" ด้วยวงกลมที่ไม่ควรหมุน แต่ไม่ใช่วงกลมสีน้ำเงินถัดจากนั้น
ใน/var/log/kern.log
ข้อความสุดท้ายที่พิมพ์คือ: -
vboxpci: vboxPciOsDevInit: dev=500
vboxpci: detected device: 10de:05ff at 05:00.0, driver pci-stub
vboxpci: vboxPciOsDevInit: dev=500 pdev=ffff88061bea0000
pci-stub 0000:05:00.0: irq 76 for MSI/MSI-X
vboxpci: enabled MSI
500: linux vboxPciOsDevGetRegionInfo: reg=0
got mmio region: fa000000:16777216
500: linux vboxPciOsDevGetRegionInfo: reg=1
got mmio region: d0000000:268435456
500: linux vboxPciOsDevGetRegionInfo: reg=3
got mmio region: f8000000:33554432
500: linux vboxPciOsDevGetRegionInfo: reg=5
got pio region: 8c00:128
500: linux vboxPciOsDevGetRegionInfo: reg=6
got mmio region: fb980000:524288
got PCI IRQ: 76
device eth0 entered promiscuous mode
power state: 0
vboxpci: No IOMMU domain (attach)
ความคิดวิธีการแก้ไขปัญหานี้?
UPDATE:
ฉันมีเคอร์เนลตอนนี้ด้วยintel_iommu=on
แต่สิ่งต่าง ๆ ยังไม่ทำงานอย่างเต็มที่ .. หลังจากรีบูตโฮสต์แขกเริ่มต้นเข้าสู่ระบบในไม่เป็นไรและทุกอย่างดูเหมือนว่ามันเป็นก่อนที่จะเริ่มใด ๆ นี้ กราฟิกการ์ดตัวที่สองของฉันไม่ส่งสัญญาณอะไร
ใน Device Manager จะมีเครื่องหมายอัศเจรีย์อยู่ติดกับอุปกรณ์ Quadro FX และมีรหัสข้อผิดพลาด 12 ในคุณสมบัติของอุปกรณ์โดยมีข้อความแจ้งว่า "อุปกรณ์นี้ไม่สามารถหาแหล่งข้อมูลได้ฟรี" รายละเอียดเพิ่มเติมเกี่ยวกับtechnet.microsoft.com
ในบันทึกโฮสต์เคอร์เนลดูเหมือนว่ามีแนวโน้ม: -
vboxpci: detected device: 10de:05ff at 05:00.0, driver pci-stub
vboxpci: vboxPciOsDevInit: dev=500 pdev=ffff88061baa0000
pci-stub 0000:05:00.0: irq 76 for MSI/MSI-X
vboxpci: enabled MSI
500: linux vboxPciOsDevGetRegionInfo: reg=0
got mmio region: fa000000:16777216
500: linux vboxPciOsDevGetRegionInfo: reg=1
got mmio region: d0000000:268435456
500: linux vboxPciOsDevGetRegionInfo: reg=3
got mmio region: f8000000:33554432
500: linux vboxPciOsDevGetRegionInfo: reg=5
got pio region: 8c00:128
500: linux vboxPciOsDevGetRegionInfo: reg=6
got mmio region: fb980000:524288
got PCI IRQ: 76
created IOMMU domain ffff88058377c9a0
device eth0 entered promiscuous mode
power state: 0
vboxpci: iommu_attach_device() success
ถ้าฉันเริ่มต้นระบบปฏิบัติการ guest ครั้งที่สองโดยไม่ต้องรีบูตโฮสต์จอแสดงผลจะค้างอีกครั้งในระยะ "ยินดีต้อนรับ" แน่นอนว่ามันจะเสร็จสิ้นขั้นตอนการเข้าสู่ระบบในขณะที่ฉันสามารถใช้ทางลัด windows เพื่อปิดเครื่องโดยไม่บังคับปิด
ตอนนี้ฉันเป็นคนที่ไม่คิดอะไรเลย ... ข้อมูลเพิ่มเติมใด ๆ ที่ฉันสามารถให้ได้?
UPDATE2:
dmesg
มีข้อผิดพลาดที่น่าสนใจ แต่ฉันไม่รู้ว่าฉันสามารถทำอะไรได้บ้าง:
IOMMU 0 0xfbfff000: using Queued invalidation
IOMMU 1 0xfbffe000: using Queued invalidation
------------[ cut here ]------------
WARNING: at /build/buildd/linux-3.5.0/drivers/iommu/intel-iommu.c:4254 init_dmars+0x39b/0x74f()
Hardware name: System Product Name
Your BIOS is broken; DMA routed to ISOCH DMAR unit but no TLB space.
BIOS vendor: American Megatrends Inc.; Ver: 0811 ; Product Version: System Version
...
Your BIOS is broken; RMRR ends before it starts!
CONFIG_CMDLINE_LINUX=intel_iommu=on
/etc/default/grub
ตอนนี้แขกรับเชิญบูท แต่ไม่พบการ์ดกราฟิก ...
intel_iommu=soft
ดูเหมือนจะไม่เป็นตัวเลือกเคอร์เนลที่ถูกต้องและเมื่อฉันใช้มันจะเปลี่ยนกลับเป็นintel_iommu=on
.. จากwww.kernel.orgคุณสามารถมีiommu=soft
แต่ฉันไม่สามารถหาเอกสารใด ๆ สำหรับสิ่งนั้น .. คุณรู้หรือไม่ ทำ?
iommu=soft
คุณขวาก็ จะปิดการใช้งานฮาร์ดแวร์ IOMMU (ซึ่งทำให้เกิดข้อผิดพลาด DMA จำนวนมากในระบบของฉัน) และใช้ซอฟต์แวร์ IOMMU แทน นี่คือลิงค์ไปยังเธรดเก่า: คำแนะนำให้ใช้ iommu = soft สำหรับแพ็คเกจเคอร์เนลทั้งหมด
intel_iommu=igfx_off
...
intel_iommu=soft
เพราะมันเป็นสาเหตุของปัญหาและตันของข้อผิดพลาดในบันทึกของผมต้องยกเลิกการใช้งานด้วยintel_iommu=on
คุณสามารถลองผ่าน