ใช้ NVidia GPU จาก VirtualBox หรือไม่


29

ฉันจะทำให้แขก VirtualBox ใช้กราฟิก NVidia ได้อย่างไร

การตั้งค่าโฮสต์:

  • Windows 7 x64

  • NVidia Optimus

  • ในNVIDIA Control Panelฉันเลือกโปรเซสเซอร์ NVIDIA ประสิทธิภาพสูง สำหรับ:

     C:\Program Files\oracle\VirtualBox\VirtualBox.exe
     C:\Program Files\Oracle\VirtualBox\VBoxSVC.exe
    
  • เมื่อ VirtualBox ทำงานซอฟต์แวร์ NVidia จะไม่แสดงรายการเป็นแอปพลิเคชั่นที่ใช้ NVidia GPU ดังนั้นฉันคิดว่า VirtualBox ไม่ได้ใช้ Nvidia GPU แน่นอน

Guest:

  • Windows 7 x64 (เช่นเดียวกับโฮสต์)

  • ติดตั้งการเพิ่มของผู้เยี่ยมชมแล้ว

  • เปิดใช้งานการเร่งความเร็ว 3 มิติในการตั้งค่า VirtualBox: แสดง / วิดีโอ / เปิดใช้งานการเร่งความเร็ว 3D

  • แรดตัวใดแอพพลิเคชั่นที่สามารถใช้งาน OpenGL ได้รายงานว่าเป็นอะแดปเตอร์วิดีโอ:

    Humper
    Chromium
    OpenGL version: 2.1 Chromium 1.9
    Render version: 2.0
    Shading Language: 1.40 - Intel Build 9.17.10.3517
    Driver Date: NA
    Driver Version: NA
    Maximum Texture size: 8192 x 8192
    Z-Buffer depth: 32bits
    Maximum Viewport size: 8192 x 8192
    Total Video Memory: 64 MB
    

    สำหรับฉันดูเหมือนว่าเครื่องเสมือนใช้การเร่งด้วยฮาร์ดแวร์ 3 มิติของโฮสต์ แต่น่าเสียดายที่ Intel ตัวหนึ่ง


2
VM ไม่ได้รับการเข้าถึงฮาร์ดแวร์โดยตรง - พวกเขาได้รับ GPU เสมือน . . คำถามที่เกี่ยวข้อง: superuser.com/questions/395245/…
ernie

6
@ernie VirtualBox สามารถให้สิทธิ์ผู้ใช้โดยตรงในการเข้าถึง OpenGL API ของ GPU ของโฮสต์ เท่าที่ฉันสามารถบอกได้ว่าทำงานบนเครื่องของฉัน มีเพียง VirtualBox เท่านั้นที่ใช้ Intel GPU แทนที่จะเป็น NVidia GPU อ้างจากคู่มือ VirtualBox : "ด้วยคุณสมบัตินี้หากแอปพลิเคชันภายในเครื่องเสมือนของคุณใช้คุณสมบัติ 3 มิติผ่านอินเตอร์เฟสการเขียนโปรแกรม OpenGL หรือ Direct3D 8/9 แทนที่จะจำลองในซอฟต์แวร์ (ซึ่งจะช้า) VirtualBox จะพยายามใช้ ฮาร์ดแวร์ 3 มิติของโฮสต์ของคุณ "
feklee

@feklee หัวข้อของคำถามนั้นทำให้เข้าใจผิด: คุณต้องการใช้ nVidia GPU สำหรับ VBox 'จาก' ก็เป็นไปได้เช่นกัน อนุญาต GPU ของโฮสต์โดยตรงจากภายใน VBox
larkey


ค้นหาเกี่ยวกับ "virtualbox passthrough video"
e-info128

คำตอบ:


20

ฉันรู้ว่าไม่กี่ปีที่ผ่านมา แต่ต้องการที่จะตอบเนื่องจากโพสต์นี้ปรากฏขึ้นค่อนข้างสูงเมื่อคุณ google สำหรับ "virtualbox 3d GPU หลายตัว" ในเวลาที่ผ่านไปสิ่งต่าง ๆ ได้ง่ายขึ้นและดีขึ้นมาก

คนที่สะดุดในหัวข้อนี้น่าจะมาที่นี่เพราะพวกเขามีแล็ปท็อปหรือพีซีที่มี GPU สองตัวซึ่งเป็นเรื่องธรรมดาในทุกวันนี้โดยเฉพาะอย่างยิ่งในเกมแล็ปท็อป ออนบอร์ด Intel GPU ใช้สำหรับแสดงผลหน้าต่างและแอพพลิเคชั่นทั่วไป แต่แอพพลิเคชั่นที่ใช้ประโยชน์จากฟังก์ชั่น GPU 3D ควรทำเช่นนั้นผ่าน Nvidia GPU ที่มีประสิทธิภาพสูงกว่า

วันนี้ฉันกำลังสร้าง Ubuntu VM บนแล็ปท็อปของฉันเพื่อทำการพัฒนาข้ามแพลตฟอร์มและทุกอย่างดียกเว้น VM ของผู้เยี่ยมชมช้ามากและไม่มีคำอธิบายใด ๆ เพราะ CPU หน่วยความจำดิสก์ทั้งหมดแสดงการใช้งานต่ำ

ใช้เวลาไม่นานในการพิจารณาว่าเป็นวิดีโอที่ทำให้เกิดปัญหา การเปิดตัวแอพพลิเคชั่น, การเพิ่ม / ลดขนาดหน้าต่าง - สิ่งที่เราได้รับอนุญาตในปี 2562 แต่ต้องการความเร่งแบบ 3 มิติในการทำงานด้วยความเร็วที่สมเหตุสมผล - กำลังใช้ GPU 0

ง่ายต่อการตรวจสอบเนื่องจาก Windows 10 มีความสามารถในการดูการใช้ GPU โดยใช้ "ตัวจัดการงาน" จากนั้นแท็บ "ประสิทธิภาพ" และฉันก็เห็นได้ว่าเมื่อฉันย้ายหน้าต่างขยายใหญ่สุดย่อเล็กสุดที่ทำผ่าน GPU บนโฮสต์ GPU บนโฮสต์นั้นเป็น Intel HD GPU แบบรวมและฉันต้องการใช้ NVidia GTX-1050ti ซึ่งเป็น GPU1

หลังจากค้นหารอบ ๆ ฉันไม่พบที่ใดที่คุณสามารถระบุ GPU ที่จะใช้ แต่หัวข้อนี้และอื่น ๆ เตือนฉันว่าในการตั้งค่าประเภทนี้คุณต้องเข้าไปในแผงควบคุม NVidia จากนั้น "จัดการการตั้งค่า 3 มิติ" จากนั้นแท็บ "การตั้งค่าโปรแกรม"

คุณอาจจะไม่พบ "Virtualbox" ในรายการ แต่คุณสามารถกดปุ่ม "เพิ่ม" และเพิ่ม virtualbox.exe คุณอาจต้องเจาะไดรฟ์ / เส้นทางที่ติดตั้ง Virtualbox ของคุณ เมื่อคุณเพิ่มเข้าไปในการตั้งค่าด้านล่างตรวจสอบให้แน่ใจว่ารายการที่ 2 "เลือกตัวประมวลผลกราฟิกที่ต้องการสำหรับโปรแกรมนี้" ถูกตั้งค่าเป็น GPU ที่คุณต้องการใช้งานซึ่งในกรณีของฉันคือ "ตัวประมวลผล NVIDIA ประสิทธิภาพสูง" .

อย่าตั้งค่าเป็นอัตโนมัติและแน่นอนไม่ได้ตั้งเป็นรวม แน่นอนว่าคุณต้องมีการตั้งค่า VM ที่ตั้งค่าด้วยกล่องการเร่งความเร็วแบบ 3 มิติและคุณจำเป็นต้องมีการติดตั้งส่วนเพิ่มเติมของแขกบนโฮสต์ แต่เมื่อคุณตั้งค่าโฮสต์วิดีโอ 3d ตามที่อธิบายไว้ข้างต้นแล้วให้ปิด guest VM ออกจากกล่องเสมือนแล้วเปิด virtualbox และ VM อีกครั้ง

หากคุณใช้ตัวจัดการงาน | ดำเนินการและดูกระบวนการ "ผู้จัดการกล่องเสมือน" และดูว่าจะใช้ GPU ตัวใดเมื่อคุณนำทาง UI ของผู้เยี่ยมชม VM คุณควรเห็นมันโดยใช้ GPU ที่ดีขึ้นในตอนนี้ ดูภาพที่วางด้านล่าง

ทั้งหมดที่กล่าวมาอย่าคาดหวังว่าจะสามารถเรียกใช้เกมในเกสต์ VM ได้ การเร่งความเร็วแบบ 3 มิติผ่านไปยังไม่ไกลมากนัก แต่คุณสามารถคาดหวังว่าจะมีระบบปฏิบัติการและ UI ที่ทันสมัยในแขกของคุณและมีประสบการณ์ที่ยอมรับได้ หนึ่งจะสามารถเล่นเกมที่เก่ากว่าใน guest VM เช่นเดียวกับอะไรก็ตามบน directX9 โชคไม่ดีที่ความสามารถในการจำลอง GPU eveolves ทำให้เทคโนโลยีการเล่นเกม 3 มิติมีวิวัฒนาการเร็วขึ้น

ภาพหน้าจอ


2
ฉันได้ทำการวิจัยเล็กน้อยในวันนี้เกี่ยวกับความสามารถในการเร่งความเร็วแบบ 3 มิติของ VirtualBox และ VMWare และในเดือนมกราคม 2019 หากการเร่งความเร็ว GPU ในเกสต์ VM เป็นสิ่งสำคัญสำหรับคุณแล้วการเลือก VMWare เป็นทางออกที่ดีที่สุดของคุณ VirtualBox รองรับความสามารถในการเร่งความเร็วของ GPU นั้นได้รับการพัฒนาน้อยลงเนื่องจากคุณสามารถให้ VM แขกได้สูงสุด RAM วิดีโอ 128MB เท่านั้นและใน VMWare อนุญาตให้จัดสรรหน่วยความจำวิดีโอได้สูงสุด 2GB VMWare รองรับ DirectX 10 และ Virtualbox รองรับ DirectX9 ดังที่ฉันพูดในโพสต์ directx 9 นั้นค่อนข้างเก่า
Thomas Carlisle

1
"" เลือกตัวประมวลผลกราฟิกที่ต้องการสำหรับโปรแกรมนี้ "ถูกตั้งค่าเป็น GPU ที่คุณต้องการให้ใช้" ฉันไม่เห็นตัวเลือกด้านบน ฉันเห็น Ambinetn, Ansiotropic กรอง ... ฯลฯ แต่ไม่มีอะไรที่ "เลือกหน่วยประมวลผล grapics ต้องการ"
moondra

คุณต้องการ PCI passthrough แม้ว่าฉันจะไม่ได้ทำงานบน Optimus แต่ฉันก็ยังคิดว่ามีแฮ็กบางอย่างที่เป็นไปได้
kensai

ฉันพยายามที่จะใช้กลอุบายที่คล้ายกันเพื่อบังคับให้เปิดใช้งานการ์ด nvidea สำหรับ Virtualbox แต่ไม่มีตัวควบคุมกราฟิกที่มีให้โดย Virtualbox 3 ตัวถูกปลุกอย่างถูกต้องกับ Neon KDE guest OS ของฉัน ฉันได้รับความผิดพลาดของ UI ขนาดใหญ่ดังนั้นการใช้ nvidea ในกรณีของฉันไม่ใช่ตัวเลือก ขอบคุณข้อเสนอของ @ThomasCarlisle ฉันจะพยายามเล่นกับ VMware
Arkemlar

17

การให้สิทธิ์การเข้าถึง GPU โดยผู้เยี่ยมชมอาจเป็นไปไม่ได้ หากเครื่องเสมือนมีการเข้าถึง GPU ของคุณโดยตรงในขณะที่โฮสต์ของคุณกำลังใช้งานเครื่อง Bad Things TMจะเกิดขึ้นเพราะการแชร์หน่วยความจำระหว่างคอมพิวเตอร์สองเครื่องที่มีประสิทธิภาพแตกต่างกันนั้นไม่ใช่เรื่องสำคัญ พอยน์เตอร์และที่อยู่และสิ่งที่จะไม่แตกต่างกันมากระหว่างพวกเขา (ไม่มีการ์ดที่รองรับสำหรับผู้บริโภครองรับการให้บริการคอมพิวเตอร์สองเครื่องพร้อมกัน)

อย่างไรก็ตามมีบางสิ่งที่คุณสามารถลองได้ ก่อนอื่นให้ตั้งค่าตัวประมวลผลกราฟิกที่คุณต้องการเป็นตัวที่ดีในแผงควบคุม NVidia ( การตั้งค่า 3Dจัดการการตั้งค่า 3Dตัวประมวลผลกราฟิกที่ต้องการ ) นั่นอาจทำให้ VirtualBox ไปกับการ์ด NVidia สำหรับ OpenGL

หากวิธีนี้ไม่ได้ผลให้ลองติดตั้ง Guest Additions ใน Safe Modeบนเกสต์

ในที่สุดบนโฮสต์ Linuxคุณสามารถลองส่งผ่าน GPU ไปยังเครื่องเสมือนได้ แต่จะใช้งานได้กับการ์ด PCI เท่านั้นและฉันไม่สามารถค้นหาได้ว่าคุณเป็น PCI หรือไม่และคุณมีโอกาสที่ดี ฉีก GPU ออกจากโฮสต์หรือทำให้เกิดปัญหาอื่น ๆ ก่อนอื่นให้ค้นหาที่อยู่ PCI (บัสอุปกรณ์และฟังก์ชัน) สำหรับการ์ดที่ดี ตั้งค่าชิปเซ็ต VM ของคุณเป็น ICH9; สิ่งนี้ไม่ได้ทำลายอะไรทันทีเมื่อฉันลอง จากนั้นใช้ยูทิลิตี้ VBoxManage เพื่อแนบการ์ด:

vboxmanage modifyvm "Your VM Name" --pciattach BB:DD.F@bb:dd.f

แทนที่Your VM Nameตามความเหมาะสม BBคือหมายเลขบัสของ GPU ของคุณบนโฮสต์ DDเป็นอุปกรณ์; Fเป็นฟังก์ชั่น หลังจากนั้นให้@ป้อนสล็อต PCI ที่จะให้กับแขก ตัวอย่างเช่น:

vboxmanage modifyvm "Windows 7 x64" --pciattach 01:00.0@03.01.0

โดยทั่วไป GPU passthrough มีแนวโน้มที่จะเป็นไปได้มากขึ้นบนโฮสต์ Linux ดูวิธีการติดตั้งเครื่องเกมกับ GPU passthrough


2
หลักฐานที่แนบ GPU กับ VM คือ "สิ่งที่ไม่ดี" ไม่ถูกต้อง มีชุมชนขนาดใหญ่ของคนที่ต้องการทำมันเพื่อสร้างเกม VM บนไฮเปอร์ไวเซอร์ที่ไม่มีโลหะ หากใครต้องการทำสิ่งนี้ใน Linux มันจะต้องขึ้นบัญชีดำ PCIe GPU เพื่อให้เคอร์เนลไปที่ชิปเซ็ตกราฟิกเท่านั้น สิ่งนี้จะป้องกันปัญหา "หน่วยความจำที่ใช้ร่วมกัน" การป้องกันไม่ให้ Windows ยกการ์ดขึ้นมาอาจเป็นปัญหาที่ยากที่สุดในการแก้ปัญหาสำหรับคำถามนี้และอาจต้องปิดการใช้งานอุปกรณ์หรือถอนการติดตั้ง optimus และไดรเวอร์ nvidia
ทิม G

@TimG จุดดีฉันได้ชี้แจงโพสต์ของฉันเล็กน้อย ขอบคุณ!
Ben N

@ BenN คำตอบที่ดี แต่ฉันต้องการจุดที่จะชี้แจง คุณเคยลองสิ่งนี้ด้วยตัวคุณเองบนโฮสต์ของ Windows หรือไม่? คู่มือบอกว่านี่ใช้ได้เฉพาะกับโฮสต์ Linux ( virtualbox.org/manual/ch09.html#pcipassthrough ) และตัวฉันเองไม่มีโชคเลยที่ทำงานกับโฮสต์ Windows
Baris Demiray

@BarisDemiray หากฉันจำได้ถูกต้องคำสั่งจะไม่รายงานข้อผิดพลาดใด ๆ เมื่อฉันลองใช้ แต่ฉันไม่คิดว่าฉันทดสอบว่า VM สามารถใช้อุปกรณ์ได้ แม้ว่ามันจะนานมาแล้วขออภัย
เบ็น N

สวัสดี @BenN ขอบคุณมากที่สละเวลาตอบ นั่นคือสิ่งที่เกิดขึ้นเมื่อฉันพยายามไม่มีข้อผิดพลาดในบรรทัดคำสั่ง แต่ไม่มีการ์ดกราฟิกใน VM
Baris Demiray
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.