การเปิดใช้งาน IOMMU ในเคอร์เนลสำหรับการส่งผ่านกราฟิกการ์ด


16

คำถามสั้น ๆ :

ฉันจะเปิดการ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!

1
การตั้งค่า IOMMU ควรเปิดใช้งานตามค่าเริ่มต้นบน Debian เสถียรหากฮาร์ดแวร์รองรับ intel_iommu=softเพราะมันเป็นสาเหตุของปัญหาและตันของข้อผิดพลาดในบันทึกของผมต้องยกเลิกการใช้งานด้วย intel_iommu=onคุณสามารถลองผ่าน
มาร์โก

1
เยี่ยมเพียงแค่พบไฟล์และบรรทัดที่จะเปลี่ยนสิ่งนี้ โมดูลด้วง-config KDE ใส่ในCONFIG_CMDLINE_LINUX=intel_iommu=on /etc/default/grubตอนนี้แขกรับเชิญบูท แต่ไม่พบการ์ดกราฟิก ...
อเล็กซ์ Leach

intel_iommu=softดูเหมือนจะไม่เป็นตัวเลือกเคอร์เนลที่ถูกต้องและเมื่อฉันใช้มันจะเปลี่ยนกลับเป็นintel_iommu=on.. จากwww.kernel.orgคุณสามารถมีiommu=softแต่ฉันไม่สามารถหาเอกสารใด ๆ สำหรับสิ่งนั้น .. คุณรู้หรือไม่ ทำ?
Alex Leach

3
iommu=softคุณขวาก็ จะปิดการใช้งานฮาร์ดแวร์ IOMMU (ซึ่งทำให้เกิดข้อผิดพลาด DMA จำนวนมากในระบบของฉัน) และใช้ซอฟต์แวร์ IOMMU แทน นี่คือลิงค์ไปยังเธรดเก่า: คำแนะนำให้ใช้ iommu = soft สำหรับแพ็คเกจเคอร์เนลทั้งหมด
Marco

ขอบคุณ ฉันอาจให้ช็อตนั้นเมื่อฉันรีบูทครั้งต่อไป ฉันคิดว่าฮาร์ดแวร์ทั้งหมดของฉันรองรับ IOMMU แต่ไม่แน่ใจว่าการจำลองซอฟต์แวร์จะเป็นความคิดที่ดีหรือไม่ ในบันทึกที่เกี่ยวข้องไม่แน่ใจว่า GPU ของฉันมีหน่วย DMAR หรือไม่และควรใช้หรือไม่intel_iommu=igfx_off...
Alex Leach

คำตอบ:


2

ฉันได้รับ VGA passthrough ทำงานกับ NVIDIA GTX 760 โดยใช้ KVM เป็นไฮเปอร์ไวเซอร์กับ vfio-vga; ฉันไม่เคยลองด้วย Virtualbox มันเป็นความเจ็บปวด แต่ทำงานได้ดีหลังจากได้รับการกำหนดค่าที่ถูกต้อง KVM มีความสะดวกสบายเหมือนกับ Virtualbox สำหรับ VMs อย่างรวดเร็วจากเดสก์ท็อปของคุณและคุณอาจพิจารณาว่าเป็นตัวเลือกอื่น

เธรดนี้มีข้อมูลมากมายเกี่ยวกับการกำหนดค่าและขั้นตอนการแก้ไขปัญหาที่แตกต่างกันมากมายและมีประโยชน์จริง ๆ : https://bbs.archlinux.org/viewtopic.php?id=162768


1
CUDA ทำงานหรือไม่
Aleksandr Dubinsky

บล็อกดังกล่าวอ้างว่าล้าสมัยและแนะนำvfio.blogspot.com
Aleksandr Dubinsky

การตั้งค่า KVM + qemu ที่มีประสิทธิภาพจากพื้นดินที่เย็นขึ้นอาจไม่เร็วนัก
sitilge

@AleksandrDubinsky, ปัจจุบันเพื่อให้ CUDA ทำงาน, ต้องใช้เคอร์เนล Linux ที่เฉพาะเจาะจง: superuser.com/a/1392031/109803
Gabriel Fair

0

หากไดรเวอร์ Nvidia ของคุณกำลังระบุว่าไม่สามารถหาแหล่งข้อมูลได้ฟรีให้ลองปิดการใช้งาน "อะแดปเตอร์ VGA มาตรฐาน" ในตัวจัดการอุปกรณ์ รีบูตแขกและคุณอาจพบสิ่งต่อไปนี้ตามลำดับ:

1) VM POST / boot ของคุณเกิดขึ้นกับอะแดปเตอร์ VGA ที่จำลอง 2) อะแดปเตอร์ VGA ที่เลียนแบบจะว่างเปล่าก่อนที่มันจะเข้าสู่หน้าจอการเข้าสู่ระบบ 3) ไดรเวอร์ Nvidia ทำการโหลดและแสดง passthrough GPU ขึ้นมาและคุณจะได้รับหน้าจอเข้าสู่ระบบบนการ์ด Nvidia

ด้วยโชคเล็กน้อยคุณอาจพบว่าสิ่งต่าง ๆ ทำงานได้ดีในนั้น นี่เป็นสิ่งที่เกิดขึ้นมากในการติดตั้ง Xen ของฉันที่คล้ายกัน กรุณาทำรายงานผลลัพธ์ :)


0

ดูเหมือนว่าคุณมีสองประเด็นแยกกัน การเริ่มต้นระบบใหม่เพื่อทำงานกับการส่งผ่าน VGA อาจเป็นเรื่องจริง ใน Xen อุปกรณ์ VGA มักปรากฏเป็นอุปกรณ์พกพาและบางคนโชคดีกว่าที่ "ดีด" อุปกรณ์ออกก่อนรีบูต

อาจมีการแก้ไขข้อผิดพลาดรหัส 12 เพียงแค่ปิดใช้งานอุปกรณ์วิดีโอเสมือนในตัวจัดการอุปกรณ์ Windows


0

ลองตั้งค่าหนึ่งใน/etc/grub:

  • iommu=memmaper
  • iommu=soft
  • vga=normal
  • vesa=0

ฉันมีระบบ AMD 64bit ใหม่และพบว่า Linux มีปัญหากับการตั้งค่า Nvidia และ DMA ที่เกิดจากการตั้งค่า iommu ใน BIOS ดังนั้นการตั้งค่าเหล่านี้ในด้วงซ่อมแซมให้ฉัน

อ่านนี้สำหรับรายละเอียดเพิ่มเติม


-1

ทดสอบกับ HP dc7900 เพื่อดูข้อความ "IOMMU Found":

ปิดใช้งานวิดีโอรวม

iommu=calgary intel_iommu=on intel_iommu=igfx_off
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.