ग्राफिक्स कार्ड पास-थ्रू के लिए कर्नेल में IOMMU को सक्षम करना


16

लघु प्रश्न:

मैं intel_iommuलिनक्स कर्नेल में सेटिंग कैसे चालू कर सकता हूं ? मैं ग्रब 2 बूटलोडर का उपयोग करके एक डेबियन होस्ट चलाता हूं। प्रलेखन मैंने देखा है कि संपादित करने के लिए कहते हैं /boot/grub/menu.lst, जो कि केवल ग्रब 1.x के लिए प्रासंगिक लगता है, क्योंकि मेरे पास वह फ़ाइल नहीं है।

यह मेरी समझ है (और अंतिम विकल्प मैं सोच सकता हूं) कि इस बूट विकल्प को बदलने से निम्नलिखित त्रुटि संदेश से छुटकारा मिल सकता है /var/log/kern.log

vboxpci: No IOMMU domain (attach)

लंबा सवाल:

ग्राफिक्स कार्ड के लिए एक अतिथि ओएस डायरेक्ट एक्सेस देना

मुझे हाल ही में एहसास हुआ कि वर्चुअल बॉक्स में ओएस के चलने के लिए पीसीआई-एक्सप्रेस डिवाइस से गुजरना संभव है। कूल, मैंने सोचा! मुझे दो NVIDIA क्वाड्रो एफएक्स ग्राफिक्स कार्ड मिले हैं (एसएलआई पुल कनेक्शन के साथ, जो मुझे आशा है कि दुःख का कारण नहीं है) और 2 डी ग्राफिक्स कार्ड को अतिथि ओएस को समर्पित करना चाहते हैं, ताकि मैं ओपनगेल सुविधाओं का उपयोग कर सकूं फ़ोटोशॉप एट अल।

एनवीआईडीआईए ने इस " एसएलआई मल्टी-ओएस " कॉन्फ़िगरेशन को बाजार दिया, जो मूल रूप से मैं उम्र के लिए स्थापित करना चाहता था, लेकिन मैं वर्चुअलाइजेशन सॉफ्टवेयर (समानताएं वर्कस्टेशन चरम) पर एक भव्य पर खर्च नहीं करना चाहता, जब मैं रहा हूं वर्चुअलबॉक्स का उपयोग वर्षों से बहुत खुशी से किया जा रहा है।

मेजबान प्रणाली

मैं डेबियन रिपॉजिटरी से लिनक्स-3.5.0-19 पर चल रहा हूं, काफी हाई-एंड वर्कस्टेशन इक्विपमेंट (आसुस P6T7 WS सुपरकंप्यूटर mobo w / Intel ICH10R चिपसेट और Xeon W3680 CPU) पर और कर्नेल में IOMMU सपोर्ट चालू करना चाहूंगा। , अधिमानतः खुद को संकलित किए बिना।

BIOS

BIOS सेटिंग्स में, मेरे पास VT-x और VT-d समर्थन सक्षम है। मैं विशेष रूप से IOMMU का उल्लेख करते हुए कुछ भी नहीं देख सकता था।

PCI डिवाइस को संलग्न करना

यह सुखद आश्चर्यजनक रूप से सरल था! आधिकारिक वर्चुअलबॉक्स प्रलेखन यहाँ है । मैंने जो किया, जो मुझे कम अस्पष्ट लगा, उसे खोलने के लिए nvidia-settings, द्वितीयक ग्राफिक्स कार्ड का चयन करना था और मेरे मामले में बस आईडी ("PCI: 5: 0: 0") को नोट करना था। फिर, मेजबान की कमांड लाइन से: -

VBoxManage modifyvm "Windows Guest" --pciattach 05:00.0

(जब मैंने पहली बार इसे चलाया, तो एक त्रुटि थी क्योंकि वर्चुअलबॉक्स एक PIIX चिपसेट का अनुकरण कर रहा था; इसने कहा कि PCI पास-थ्रू केवल ICH9 चिपसेट के साथ काम करता है। इसलिए मैंने वर्चुअलबॉक्स वीएम सिस्टम सेटिंग्स में चिपसेट को ICH9 में बदल दिया और अतिथि को चालू कर दिया। आवश्यक नए ड्राइवरों को स्थापित करने के लिए। एक रिबूट बाद में और सब कुछ ठीक काम कर रहा था, इसलिए मैंने अतिथि को बंद कर दिया, और कमांड को फिर से चलाया।)

कोई आउटपुट नहीं था, और मुझे लगभग तुरंत ही कमांड लाइन में वापस कर दिया गया था।

अतिथि से होस्ट GPU का उपयोग करना

अतिथि को चालू करने से पहले, मैंने पहली बार होस्ट मशीन को रिबूट किया, यदि वर्चुअल बॉक्स-डीकेएम द्वारा कर्नेल में कुछ अनिर्दिष्ट होने की आवश्यकता होती है। जैसा कि मैंने sudoविशेषाधिकारों के बिना पिछली कमान चलाई , मुझे संदेह है कि कोई भी बदलाव किए गए थे, हालांकि।

जब मैंने अगली बार अतिथि शुरू किया, तो विंडोज अपडेट ने अपनी बात करना शुरू कर दिया और स्वचालित रूप से सही NVIDIA ड्राइवरों का पता लगाया और स्थापित किया। सभी अब तक अच्छे दिख रहे हैं। इससे पहले कि मैं डिवाइस का उपयोग कर सकता, हालांकि, मुझे अतिथि को रिबूट करना पड़ा ...

मुसीबत

अब जब अतिथि और पीसीआई डिवाइस में ग्राफिक्स कार्ड ड्राइवर लगे हैं, तो मैं विंडोज डेस्कटॉप में नहीं जा सकता। मुझे विंडोज लॉगिन स्क्रीन मिलती है, फिर लॉग इन करने के बाद, स्क्रीन फ्रीज हो जाती है, बस "वेलकम" कहकर, साथ-साथ कताई-लेकिन-इसके आगे ब्लू सर्कल नहीं है।

में /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)

इसे ठीक करने के लिए कोई भी विचार?

अपडेट करें:

मुझे अब कर्नेल बूटिंग के साथ मिल गया है intel_iommu=on, लेकिन चीजें अभी भी पूरी तरह से काम नहीं कर रही हैं .. मेजबान को रिबूट करने के बाद, अतिथि शुरू होता है, ठीक है में लॉग करता है और सब कुछ लगता है जैसे कि यह किसी भी शुरू करने से पहले था। मेरा दूसरा ग्राफिक्स कार्ड कुछ भी आउटपुट नहीं कर रहा है।

डिवाइस मैनेजर में, क्वाड्रो एफएक्स डिवाइस के बगल में एक विस्मयादिबोधक चिह्न होता है, और डिवाइस के गुणों में 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

यदि मैं अतिथि OS को दूसरी बार शुरू करता हूं, तो मेजबान को रिबूट किए बिना, प्रदर्शन "वेलकम" चरण में फिर से जमा होता है। यह निश्चित रूप से लॉग-इन चरण को समाप्त करता है, क्योंकि मैं एक शटडाउन मजबूर किए बिना मशीन को बंद करने के लिए विंडोज़ शॉर्टकट का उपयोग कर सकता था।

अब मैं विचारों से बाहर हूँ ... इस काम को करने के लिए कोई सुझाव? किसी भी अधिक जानकारी मैं प्रदान कर सकते हैं?

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
यदि IOM हार्डवेयर का समर्थन करता है, तो IOMMU सेटिंग डिफ़ॉल्ट रूप से डेबियन स्थिर पर सक्रिय होनी चाहिए। चूंकि यह लॉग में परेशानी और टन त्रुटियों के कारण था, इसलिए मुझे इसे निष्क्रिय करना पड़ा intel_iommu=soft। आप पास होने की कोशिश कर सकते हैं intel_iommu=on
मार्को

1
कूल, बस फ़ाइल और लाइन मिली जहां इसे बदलना है; केडीई के कोड़ना-config मॉड्यूल डाल CONFIG_CMDLINE_LINUX=intel_iommu=onकरने के लिए /etc/default/grub। अब अतिथि जूते, लेकिन ग्राफिक्स कार्ड का पता नहीं लगाता है ...
एलेक्स लीच

intel_iommu=softयह एक वैध कर्नेल विकल्प नहीं लगता है, और जब मैंने इसका उपयोग किया, तो यह वापस आ गया intel_iommu=on.. www.kernel.org से , आपके पास हो सकता है iommu=soft, लेकिन मुझे इसके लिए कोई दस्तावेज नहीं मिल सकता है .. क्या आप जानते हैं कि यह क्या है कर देता है?
एलेक्स लीच

3
तुम सही हो, यह है iommu=soft। यह हार्डवेयर IOMMU (जो मेरे सिस्टम पर कई DMA त्रुटियों का कारण बनता है) को निष्क्रिय कर देता है और इसके बजाय एक IOMMU सॉफ़्टवेयर का उपयोग करता है। यहाँ एक पुराने सूत्र का लिंक दिया गया है: iommu = सॉफ्ट का उपयोग करने के लिए सभी कर्नेल संकुल के लिए सुझाव
Marco

धन्यवाद। जब मैं अगली रीबूट कर सकता हूं तो मैं उसे एक शॉट दे सकता हूं। मुझे लगता है कि मेरे सभी हार्डवेयर IOMMU का समर्थन करते हैं, हालांकि, यह सुनिश्चित नहीं है कि एक सॉफ्टवेयर इम्यूलेशन एक अच्छा विचार होगा। संबंधित नोट पर, निश्चित नहीं है कि मेरे GPU में DMAR इकाई है, और क्या यह उपयोग करने के लिए एक अच्छा विचार है intel_iommu=igfx_off...
एलेक्स लीच

जवाबों:


2

मुझे vgaio-vga के साथ एक हाइपरविजर के रूप में KVM का उपयोग करके एक NVIDIA GTX 760 के साथ काम करने वाला वीजीए पॉश्चथ्रू मिला; मैंने इसे वर्चुअलबॉक्स के साथ कभी नहीं आज़माया है। यह एक दर्द था, लेकिन कॉन्फ़िगरेशन सही होने के बाद अच्छी तरह से काम करता है। KVM आपके डेस्कटॉप से ​​त्वरित VMs के लिए वर्चुअलबॉक्स जितना सुविधाजनक है और आप इसे एक अन्य विकल्प के रूप में मान सकते हैं।

इस थ्रेड में बहुत सारे अलग-अलग कॉन्फ़िगरेशन और समस्या निवारण चरणों के बारे में जानकारी है, और वास्तव में मददगार थी: https://bbs.archlinux.org/viewtopic.php?id=162768


1
CUDA काम करता है?
Dub:

वह ब्लॉग अब पुराना होने का दावा करता है और vfio.blogspot.com
Aleksandr Dubinsky

ठीक है, ठंड जमीन से एक कुशल KVM + qemu की स्थापना इतनी तेजी से नहीं हो सकती है।
सिटिलाज

@AleksandrDubinsky, वर्तमान में CUDA को काम पर लाने के लिए, एक विशिष्ट लिनक्स कर्नेल का उपयोग करना होगा: superuser.com/a/1392031/109803
गेब्रियल फेयर

0

यदि आपका एनवीडिया ड्राइवर कह रहा है कि यह पर्याप्त मुक्त संसाधन नहीं पा सकता है, तो डिवाइस प्रबंधक में "मानक VGA एडाप्टर" को अक्षम करने का प्रयास करें। अतिथि को रिबूट करें, और आप निम्न क्रम में हो सकते हैं:

1) आपका वीएम पोस्ट / बूट एमुलेटेड वीजीए एडॉप्टर पर होता है। 2) एमजीए ड्राइवर को लोड करने से ठीक पहले एमजीए ड्राइवर को लोड करता है और पेसथ्रू जीपीयू लाता है, और आपको एनवीडिया कार्ड पर लॉगिन स्क्रीन मिलती है।

थोड़े से भाग्य के साथ, आप पा सकते हैं कि चीजें वहाँ से ठीक काम करती हैं। यह कमोबेश एक्सपी के साथ मेरे समान सेटअप पर होता है। कृपया, परिणाम रिपोर्ट करें। :)


0

ऐसा लगता है कि आपके पास दो अलग-अलग मुद्दे हैं। वीजीए पास के साथ काम करने के लिए रीबूट करना एक वास्तविक भालू हो सकता है। एक्सईएन में, वीजीए डिवाइस अक्सर एक हटाने योग्य डिवाइस के रूप में दिखाई देता है और कुछ लोगों ने डिवाइस को रिबॉन्डिंग करने से पहले "बेदखल" करना बेहतर समझा।

कोड 12 त्रुटि शायद विंडोज डिवाइस मैनेजर में वर्चुअल वीडियो डिवाइस को अक्षम करके तय की जा सकती है।


0

इनमें से किसी एक को सेट करने का प्रयास करें /etc/grub:

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

मेरे पास नया एएमडी 64 बिट सिस्टम है और पाया गया कि लिनक्स को आईओएस में आईओएमयू सेटिंग्स के कारण एनवीडिया और डीएमए सेटिंग से परेशानी है, इसलिए इन्हें ग्रब में सेट करना मेरे लिए तय है।

इसे और अधिक विस्तार से पढ़ें ।


-1

"IOMMU मिला" संदेश देखने के लिए HP dc7900 पर परीक्षण किया गया:

एकीकृत वीडियो को निष्क्रिय करें

iommu=calgary intel_iommu=on intel_iommu=igfx_off
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.