Kích hoạt IOMMU trong kernel để truyền qua card đồ họa


16

Câu hỏi ngắn:

Làm cách nào để bật intel_iommucài đặt trong nhân Linux? Tôi chạy một máy chủ Debian, sử dụng bộ tải khởi động grub2. Tài liệu tôi từng thấy nói là chỉnh sửa /boot/grub/menu.lst, dường như chỉ liên quan đến grub 1.x, vì tôi không có tệp đó.

Theo hiểu biết của tôi (và tùy chọn cuối cùng tôi có thể nghĩ đến) rằng việc thay đổi tùy chọn khởi động này có thể thoát khỏi thông báo lỗi sau trong /var/log/kern.log

vboxpci: No IOMMU domain (attach)

Câu hỏi dài:

Cho phép một hệ điều hành khách truy cập trực tiếp vào card đồ họa

Gần đây tôi nhận ra rằng có thể chuyển qua một thiết bị PCI-express để chạy hệ điều hành khách trong Virtualbox. Thật tuyệt, tôi nghĩ! Tôi đã có hai card đồ họa NVIDIA Quadro FX (có kết nối cầu SLI, điều mà tôi hy vọng không gây ra sự đau buồn) và muốn dành tặng card đồ họa thứ 2 cho HĐH khách, để tôi có thể sử dụng các tính năng OpenGL trong Photoshop và cộng sự.

NVIDIA tiếp thị cấu hình " SLI Multi-OS " này, về cơ bản là những gì tôi muốn thiết lập từ lâu, nhưng tôi không muốn chi quá nhiều cho phần mềm Virtualisation (cực kỳ máy trạm Parallels), khi tôi đã sử dụng VirtualBox khá hạnh phúc trong nhiều năm nay.

Hệ thống máy chủ

Tôi đang chạy linux-3.5.0-19 từ kho lưu trữ Debian, trên thiết bị máy trạm khá cao cấp (Asus P6T7 WS Supercomputer mobo w / chipset Intel ICH10R và CPU Xeon W3680) và muốn bật hỗ trợ IOMMU trong kernel , tốt nhất là không cần phải tự biên dịch nó.

BIOS

Trong cài đặt BIOS, tôi đã bật hỗ trợ VT-x và VT-d. Tôi không thể thấy bất cứ điều gì đặc biệt đề cập đến IOMMU, mặc dù.

Gắn thiết bị PCI

Điều này thật đơn giản đến bất ngờ! Tài liệu VirtualBox chính thức có ở đây . Những gì tôi đã làm, điều mà tôi thấy ít mơ hồ hơn, là mở nvidia-settings, chọn card đồ họa thứ cấp và lưu ý ID Bus ("PCI: 5: 0: 0" trong trường hợp của tôi). Sau đó, từ dòng lệnh của máy chủ: -

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

. để cài đặt trình điều khiển mới cần thiết. Khởi động lại sau và mọi thứ đều hoạt động tốt, vì vậy tôi tắt máy khách và chạy lại lệnh.)

Không có đầu ra, và tôi đã được đưa trở lại dòng lệnh gần như ngay lập tức.

Sử dụng GPU máy chủ từ khách

Trước khi bật máy khách, trước tiên tôi khởi động lại máy chủ, trong trường hợp có điều gì đó không có giấy tờ cần thiết xảy ra trong kernel, bởi virtualbox-dkms. Tuy nhiên, khi tôi chạy lệnh trước mà không có sudođặc quyền, tôi nghi ngờ bất kỳ thay đổi nào đã được thực hiện.

Khi tôi bắt đầu tiếp khách, Windows Update bắt đầu thực hiện công việc của mình và tự động phát hiện và cài đặt trình điều khiển NVIDIA chính xác. Tất cả nhìn tốt cho đến nay. Trước khi tôi có thể sử dụng thiết bị, tôi phải khởi động lại khách ...

Vấn đề

Bây giờ trình điều khiển card đồ họa đã được cài đặt trên máy khách và thiết bị PCI được đính kèm, tôi không thể vào máy tính để bàn Windows. Tôi vào màn hình đăng nhập Windows, sau đó sau khi đăng nhập, màn hình đóng băng, chỉ nói "Chào mừng", với một vòng tròn đáng lẽ phải quay nhưng không phải là màu xanh bên cạnh.

Trong /var/log/kern.log, các tin nhắn cuối cùng được in là: -

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)

Bất kỳ ý tưởng làm thế nào để khắc phục điều này?

CẬP NHẬT:

Bây giờ tôi đã có kernel khởi động intel_iommu=on, nhưng mọi thứ vẫn không hoạt động hoàn toàn .. Sau khi khởi động lại máy chủ, khách bắt đầu, đăng nhập ổn và mọi thứ dường như trước khi bắt đầu bất kỳ điều gì. Card đồ họa thứ 2 của tôi không xuất ra bất cứ thứ gì.

Trong Trình quản lý thiết bị, có dấu chấm than bên cạnh thiết bị Quadro FX và có mã lỗi 12 trong thuộc tính của thiết bị, với thông báo "Thiết bị này không thể tìm đủ tài nguyên miễn phí". Mô tả thêm về technet.microsoft.com .

Trong nhật ký kernel, có vẻ đầy hứa hẹn: -

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

Nếu tôi khởi động HĐH khách lần thứ hai, mà không khởi động lại máy chủ, màn hình sẽ đóng băng lại ở giai đoạn "Chào mừng". Nó chắc chắn kết thúc giai đoạn đăng nhập, vì tôi có thể sử dụng các phím tắt windows để tắt máy mà không cần tắt máy ..

Bây giờ tôi đã hết ý tưởng ... Có gợi ý nào để thực hiện công việc này không? Tôi có thể cung cấp thêm thông tin gì không?

CẬP NHẬT2:

dmesg chứa một số lỗi thú vị hơn, nhưng tôi không biết tôi có thể làm gì với chúng:

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
Cài đặt IOMMU phải được kích hoạt theo mặc định trên Debian ổn định nếu phần cứng hỗ trợ nó. Vì nó đã gây ra sự cố và hàng tấn lỗi trong nhật ký, tôi đã phải hủy kích hoạt nó intel_iommu=soft. Bạn có thể thử đi qua intel_iommu=on.
Marco

1
Thật tuyệt, chỉ cần tìm tập tin và dòng nơi để thay đổi điều này; Mô-đun grub-config của KDE được đặt CONFIG_CMDLINE_LINUX=intel_iommu=onvào /etc/default/grub. Bây giờ khách khởi động, nhưng không phát hiện ra card đồ họa ...
Alex Leach

intel_iommu=softdường như không phải là một tùy chọn kernel hợp lệ và khi tôi sử dụng nó, nó được hoàn nguyên về intel_iommu=on.. Từ www.kernel.org , bạn có thể có iommu=soft, nhưng tôi không thể tìm thấy bất kỳ tài liệu nào cho điều đó .. Bạn có biết nó là gì không làm?
Alex Leach

3
Bạn nói đúng, đó là iommu=soft. Nó vô hiệu hóa IOMMU phần cứng (gây ra nhiều lỗi DMA trên hệ thống của tôi) và sử dụng phần mềm IOMMU thay thế. Đây là một liên kết đến một chủ đề cũ: Đề xuất sử dụng iommu = soft cho tất cả các gói kernel
Marco

Cảm ơn. Tôi có thể cho nó một shot khi tôi khởi động lại lần sau. Tuy nhiên, tôi nghĩ rằng tất cả phần cứng của tôi đều hỗ trợ IOMMU, vì vậy không chắc việc mô phỏng phần mềm có phải là một ý tưởng hay không. Về một lưu ý liên quan, không chắc GPU của tôi có đơn vị DMAR hay không và liệu nó có nên sử dụng không intel_iommu=igfx_off...
Alex Leach

Câu trả lời:


2

Tôi đã nhận được thông qua VGA khi làm việc với NVIDIA GTX 760 bằng cách sử dụng KVM như một trình ảo hóa với vfio-vga; Tôi chưa bao giờ thử nó với Virtualbox. Đó là một nỗi đau, nhưng hoạt động tốt sau khi cấu hình đúng. KVM tiện lợi như Virtualbox cho máy ảo nhanh từ máy tính để bàn của bạn và bạn có thể coi nó là một tùy chọn khác.

Chủ đề này có rất nhiều thông tin về nhiều cấu hình và các bước khắc phục sự cố khác nhau và thực sự hữu ích: https://bbs.archlinux.org/viewtopic.php?id=162768


1
CUDA có hoạt động không?
Alexanderr Dubinsky

Blog đó bây giờ tuyên bố đã lỗi thời và đề xuất vfio.blogspot.com
Aleksandr Dubinsky

Chà, thiết lập một KVM + qemu hiệu quả từ mặt đất lạnh có thể không nhanh như vậy.
sitilge

@AleksandrDubinsky, Hiện tại để CUDA hoạt động, một nhân Linux cụ thể phải được sử dụng: superuser.com/a/1392031/109804
Gabriel Fair

0

Nếu trình điều khiển Nvidia của bạn nói rằng nó không thể tìm thấy đủ tài nguyên miễn phí, hãy thử tắt "Bộ điều hợp VGA tiêu chuẩn" được mô phỏng trong Trình quản lý thiết bị. Khởi động lại khách và bạn có thể thấy những điều sau đây xảy ra, theo thứ tự:

1) VM POST / boot của bạn xảy ra trên bộ chuyển đổi VGA được mô phỏng. 2) Bộ điều hợp VGA được mô phỏng bị trống ngay trước khi vào màn hình đăng nhập 3) Trình điều khiển Nvidia tải và đưa GPU thông qua và bạn nhận được màn hình đăng nhập trên thẻ Nvidia.

Với một chút may mắn, bạn có thể thấy rằng mọi thứ hoạt động tốt từ đó. Đây ít nhiều chính xác là những gì xảy ra trên thiết lập tương tự của tôi với Xen. Xin vui lòng, làm báo cáo kết quả. :)


0

Có vẻ như bạn có hai vấn đề riêng biệt. Bắt đầu khởi động lại để làm việc với VGA đi qua có thể là một con gấu thực sự. Trong Xen, thiết bị VGA thường hiển thị dưới dạng thiết bị di động và một số người đã may mắn hơn "đẩy" thiết bị trước khi khởi động lại.

Có thể sửa lỗi mã 12 bằng cách vô hiệu hóa thiết bị video ảo trong trình quản lý thiết bị Windows.


0

Hãy thử đặt một trong những thứ này trong /etc/grub:

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

Tôi có hệ thống AMD 64bit mới và thấy rằng Linux gặp sự cố với cài đặt Nvidia và DMA do cài đặt iommu trong BIOS, do đó, cài đặt chúng trong grub đã sửa nó cho tôi.

Đọc này để biết thêm chi tiết .


-1

đã thử nghiệm trên HP dc7900 để xem thông báo "Đã tìm thấy IOMMU":

hủy kích hoạt video tích hợp

iommu=calgary intel_iommu=on intel_iommu=igfx_off
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.