我的KVM显卡直通实践

2023-05-16

·为什么放弃使用VMwareESXi

因为需要两台电脑,用其中一台对另一台进行直通的管理,这太麻烦了。


前期准备:

安装KVM

#apt-get install qemu-kvm qemu virt-manager virt-viewer libvirt-bin python-libvirt bridge-utils


准备直通的显卡编号:

pci_0000_04_00_0

pci_0000_04_00_1

0000:04:00.0VGA compatible controller [0300]: NVIDIA Corporation GM204GL [Quadro M4000] [10de:13f1] (rev a1)

0000:04:00.1Audio device [0403]: NVIDIA Corporation GM204 High Definition Audio Controller [10de:0fbb] (rev a1)


方案1PCIPass-throughlibvirt

来源:http://www.it165.net/admin/html/201506/5722.html

1.BIOS中打开IntelVT-d(成功)

2.Linux内核中方启用PCIPass-through(成功:sudogedit \etc\default\grub

3.重启系统,使配置生效(成功)

4.使用lspci-nn命令找到待分配的PCI设备(成功)

5.使用virshnodedev-list命令找到设备的PCI编号(成功)

6.使用virshnodedev-dettach命令将设备从主机上移除(失败,系统直接卡住,或者终端卡住,多次实验均没有效果)

7.使用virt-manager将设备直接分配给一个启动了的虚拟机(试图跳过第六步直接执行词步,失败,KVM直接卡住)


NodeDevice (help keyword 'nodedev'):

nodedev-create create a device defined by an XML file on the node

nodedev-destroy destroy (stop) a device on the node

nodedev-detach detach node device from its device driver

nodedev-dumpxml node device details in XML

nodedev-list enumerate devices on this host

nodedev-reattach reattach node device to its device driver

nodedev-reset reset node device


方案2PCIPass-throughqemu

来源:http://blog.csdn.net/halcyonbaby/article/details/37776211

1.与方案11~5相同(成功)

2.

modprobe pci_stub

(成功)

3.
echo "10de 13f1" > /sys/bus/pci/drivers/pci-stub/new_id
(成功)
4.
echo 0000:04:00.0 > /sys/bus/pci/devices/0000:04:00.0/driver/unbind
(失败,系统直接卡住,多次试验结果均相同)
5.
echo 0000:04:00.0 > /sys/bus/pci/drivers/pci-stub/bind
(失败:bash:echo: write error: No such device

方案3PCIPass-throughVFIO

来源:http://blog.csdn.net/halcyonbaby/article/details/37776211

1.安装kernelmodule(系统已经默认安装)

2.

sudo modprobe vfio
(成功)

3.

sudo modprobe vfio-pci
(成功)

4.

cd /sys/bus/pci/devices/0000:04:00.0/
(成功)

5.

readlink iommu_group
(成功: ../../../../kernel/iommu_groups/11

6.

ll iommu_group/devices
(成功:

total0

drwxr-xr-x2 root root 0 51610:22 ./

drwxr-xr-x3 root root 0 51610:06 ../

lrwxrwxrwx1 root root 0 51610:22 0000:04:00.0 ->../../../../devices/pci0000:00/0000:00:1c.4/0000:04:00.0/

lrwxrwxrwx1 root root 0 51610:22 0000:04:00.1 ->../../../../devices/pci0000:00/0000:00:1c.4/0000:04:00.1/

7.

echo 0000:04:00.0 > /sys/bus/pci/devices/0000:04:00.0/driver/unbind
(与方案 2 第四步相同,但是居然成功了

8.

echo 10de 13f1 > /sys/bus/pci/drivers/vfio-pci/new_id
(失败,终端卡住)

9.将第八步改为echo"10de 13f1" > /sys/bus/pci/drivers/vfio-pci/new_id(失败,终端卡住)

10.尝试使用nano命令改变该文件内容(失败,终多端卡住)

11.尝试先chmod744/777再用echo改变文件内容(失败,终端卡住)

12.重启之后又试了一次(终端依然卡住)

13.尝试sh-c "echo 10de 13f1 > /sys/bus/pci/drivers/vfio-pci/new_id"(失败)

14.由于7.成功了,尝试转向方案2,依然失败

执行第七步之后/sys/bus/pci/devices/0000:04:00.0/下的文件有明显改变,可能会对之后的操作方案有影响


方案4GPUPassthrough via vfio-pci with KVM on Ubuntu 15.04

1.Install Ubuntu, I'm using 15.04 Server. You should also update your kernel tov4.0.0.(我的:ubuntu14.04,内核版本4.4.0

2.

sudo apt-get install qemu-kvm
(完成)

3.in/etc/default/grub:

GRUB_CMDLINE_LINUX_DEFAULT="nomodeset intel_iommu=on pcie_acs_override=downstream pci=assign-bussesigb.max_vfs=2"
(成功)

Notice:"pci=assign-busses igb.max_vfs=2" were for my i350 SR-IOV.You can ignore them if you do not have SR-IOV in mind.

补充:这里应该再

sudo update-gru

4.Inetc/modprobe.d/local.conf(new file): (成功)

optionsvfio-pciids=1002:ffffffff:ffffffff:ffffffff:00030000:ffff00ff,1002:ffffffff:ffffffff:ffffffff:00040300:ffffffff,10de:ffffffff:ffffffff:ffffffff:00030000:ffff00ff,10de:ffffffff:ffffffff:ffffffff:00040300:ffffffff

补充:我使用的命令是sudo visudo gedit

5.Reboot(成功)

然而此方案后面语焉不详,所以暂时放弃了


方案5:重新尝试之前的方案

研究了一下显卡驱动的问题,发现我的显卡驱动没安好。

默默安好了显卡驱动。

尝试方案1:卡死在第6步。

尝试方案2:系统卡死在之前成功了的第3步。重启后又尝试了一下,第3/4步成功。最后一步卡死。

尝试方案3:第7步卡死


方案6GPU Passthrough, VGA Passthrough in KVM

来源:https://blog.lofyer.org/pass-host-gpu-to-guest-via-qemu-ncursescurses/

1.Enable the mainboard VxT, iommu and alter the video device to Intel HD(完成)

2.Modify the kernel parameter,morprobe.d and libvirt.conf

Add follow parameters to grub.conf:

 intel_iommu=onpci-stub.ids=1002:6819,1002:aab0,vfio_iommu_type1.allow_unsafe_interrupts=1
(成功)

3.Addmodprobe.conf to /etc/modprobe.d/ with this content:(成功)

blacklistradeon
optionskvm ignore_msrs=1
optionskvm allow_unsafe_interrupts=1
optionskvm-amd npt=0
optionskvm_intel emulate_invalid_guest_state=0
optionsvfio_iommu_type1 allow_unsafe_interrupts=1

4.changethe following options in /etc/libvirt/qemu.conf:(成功)

#The user ID for QEMU processes run by the system instance.
user= "root"

#The group ID for QEMU processes run by the system instance.
group= "root"

......

#If clear_emulator_capabilities is enabled, libvirt will drop all
#privileged capabilities of the QEmu/KVM emulator. This is enabled by
#default.
#
#Warning: Disabling this option means that a compromised guest can
#exploit the privileges and possibly do damage to the host.
#
clear_emulator_capabilities= 0

5.File:vfio-bind: (成功)

	#!/bin/bash 
	modprobe vfio-pci 
	for var in "$@"; do 
	        for dev in $(ls /sys/bus/pci/devices/$var/iommu_group/devices); do 
	                vendor=$(cat /sys/bus/pci/devices/$dev/vendor) 
	                device=$(cat /sys/bus/pci/devices/$dev/device) 
	                if [ -e /sys/bus/pci/devices/$dev/driver ]; then 
	                        echo $dev > /sys/bus/pci/devices/$dev/driver/unbind 
	                        fi 
	                echo $vendor $device > /sys/bus/pci/drivers/vfio-pci/new_id 
	        done 
	done

6.执行./vfio-bind0000:04:00.0 0000:04:00.1 (失败,终端卡住)

(注:这里我先用了chmod+x才执行了该文件)

总结一下这个方案,不过是之前的方案三换汤不换药。


方案7:修改虚拟机的xml文件

来源:http://www.server110.com/kvm/201402/5547.html

sudovirt-install --name=one --ram 2048 --vcpus=4 --diskpath=/root/one.img,size=40 --accelerate --cdrom/home/ubuntu/Downloads/111/cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso

(成功)

virsh edit One

在xml文件内添加:

    <hostdev mode='subsystem' type='pci' managed='yes'> 
      <source> 
      <address domain='0x0000' bus='0x04' slot='0x00' function='0x0'/> 
      <address domain='0x0000' bus='0x04' slot='0x00' function='0x1'/> 
      </source> 
    </hostdev> 

(成功)


Failed.Try again? [y,n,f,?]:

error:(domain_definition):69: Opening and ending tag mismatch: hostdev line68 and devices

</devices>(已解决)


Failed.Try again? [y,n,f,?]:

error:XML error: Missing <source> element in hostdev device(已解决)


Domain One XML configuration edited.(成功)


virsh undefine One

virsh define One.xml

error:Failed to open file 'One.xml': No such file or directory


方案8:首先编译kernel

来源:http://www.linux-kvm.org/page/How_to_assign_devices_with_VT-d_in_KVM

……正在折腾中,待更新。


方案9:询问百度知道

来源:https://zhidao.baidu.com/question/1823842477872037748.html

在百度知道里面花了点财富值提问了一下我的问题,得到的答案是:

这个现象的原因一般有三个:1、硬件超温过热。2、系统某些基层文件出问题。3、内存松动。解决办法:1、清尘,检查散热风扇。2、重装系统。3、重新插拔内存并擦拭金手指部分。

然而这个电脑是个新电脑,不存在灰尘过多和内存松动的问题。(虽然如此,我还是把显卡和内存条都插拔并且清理了一遍)

重装系统也尝试了。

最终这三个方法都没有解决我的问题。


方案10: 检查显卡驱动

这个方案得到了成功。

具体步骤见在ubuntu 14.04下的KVM虚拟机显卡直通。



/本文第一次编辑于:2017/5/1

/本文第二次编辑于:2017/5/31

/本文第三次编辑于:2017/6/14

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我的KVM显卡直通实践 的相关文章

  • kvm的快照功能 (二、基于libvirt的快照)

    实例二 利用libvirt使用快照 virsh snapshot create domain name 一 创建虚机快照 名字自动生成 可在开机 关机 suspend等各种状态下做 virsh snapshot create test Do
  • linux-删除KVM虚拟机

    1 查看主机 virsh list 2 关闭主机 virsh shutdown 虚拟机名称 3 删除主机定义 virsh undefine 虚拟机名称 4 删除KVM虚拟机文件 find name 虚拟机名称 rm rf 虚拟机文件
  • KVM的HVM虚拟机使用非串口方式建立virsh console 连接

    在去年写的文章中 http blog csdn net dobell article details 14442457 写到了怎么利用serial 设备进行console连接 不过比较麻烦 因为1 需要修改虚拟机内部的grub启动选项 2
  • QEMU-KVM基本操作

    本文主要介绍KVM虚拟机的一些基本实践操作 对KVM虚拟机的管理操作主要是基于libvirt的命令行工具virsh进行的 一 安装与启动 1 KVM模块检查 1 查看当前Linux系统核心是否包含KVM模块 Linux内核2 6 20及以上
  • KVM学习(一)vnc连接

    完整流程Windows连接CentOS7 这个KVM系列是我的本科毕业设计 边学边做 长期更新 1 安装vncserver 首先看下实验环境 windows上跑的vmware虚拟机 vncserver安装在虚拟机上 虚拟机已经安装好了gno
  • kvm虚拟化技术

    前言 kvm是一种虚拟化技术 使用 概念 kvm是linux内核的模块 它需要CPU支持 采用硬件辅助虚拟化技术Intel VT AMD V 内存的相关技术如Intel的EPT和AMD的RVI 是底层虚拟化内核模块 检查cpu是否支持虚拟化
  • 33 KVM管理设备-配置虚拟机PCIe控制器

    文章目录 33 KVM管理设备 配置虚拟机PCIe控制器 33 1 概述 33 2 配置PCIe Root PCIe Root Port和PCIe PCI Bridge 33 2 1 简化配置方法 33 2 1完整配制方法 33 KVM管理
  • qemu-virtio基本原理

    virtio是相当复杂的 网上写virtio原理解析的文章也不少 这里我想通过最简练易懂的方式来解释一下virtio的原理 一方面也完善一下自己对virtio的理解 文中含有大量个人理解 如果发现有错误的地方欢迎与我交流 virtio整体流
  • KVM-6、virsh 命令及功能详解

    1 虚拟机管理操作 attach device 从XML文件附加设备 attach disk 附加磁盘设备 attach interface 连接网络接口 autostart 自动启动一个域 blkdeviotune 设置或查询块设备I O
  • 59 KVM Skylark虚拟机混部-概述、架构及特性

    文章目录 59 KVM Skylark虚拟机混部 概述 架构及特性 59 1 Skylark概述 59 1 1 问题背景 59 1 2 总体介绍 59 2 架构及特性 59 2 1 总体实现框架 59 2 2 功耗干扰控制 59 2 3 L
  • 虚拟化原理与应用第一次作业

    知识点 一 选择题 1 Intel对虚拟化技术的支持不包括以下哪项技术 D A VT x B VT i C VT d D AMD V 2 如果一个虚拟机因为错误而崩溃 同一主机上的其他虚拟机不会受到影响 这属于虚拟机的哪个属性 A A 隔离
  • ovirt-node和ovirt-engine相连遇到的问题解决办法

    1 Host 192 168 70 7 does not comply with the cluster Default emulated machines The Hosts emulated machines are
  • kvm-ovirt-vdsm安装记录

    小技巧 1 fedaro 19自动查找最快yum源 yum install yum fastestmirror 2 libvirt启动sasl添加用户 saslpasswd2 c a libvirt admin 3 查看kvm模块 lsmo
  • 问题:your cpu does not support kvm extensions

    问题 我的BIOS开启了CPU虚拟化 但是虚拟机仍然显示your cpu does not support kvm extensions 解决 1 关闭虚拟机 2 虚拟机上单击右键 设置 3 选择下图选项 4 重启虚拟机 问题解决
  • qemu-guest-agent windows下的监控开发

    windows下的qemu guest agent 简称qga 的名字叫做qemu guest agent win32 目前最新版的版本号是qemu guest agent win32 0 12 1 2 2 355 el6 4 9 x86
  • KVM源代码分析1:基本工作原理

    http www oenhan com kvm src 1 13年的时候准备挖 KVM源代码分析 的坑 陆陆续续2年过去了 坑也没有填上 当时是因为对KVM了解的肤浅 真正的理解必然要深入到代码级别 所谓 摈弃皮毛 看到血肉 看到真相 当时
  • 2020最新版KVM虚拟机安装详解

    VMware Workstation Pro15 5下 1 操作环境 CentOS Linux release 7 7 1908 Core 2 需要用到的工具 XSHELL Centos任意版本镜像 3 必须安装的软件 Xmanager p
  • Linux x86-64 上的物理内存中的用户空间和内核之间是否存在明确的划分?

    也就是说 给定一个物理地址 我可以判断这个地址是否来自用户空间吗 据我所知 在虚拟地址空间中 内核将使用 上半部分和用户空间将使用下半部分 但是关于 在物理地址空间 让问题变得复杂的是我想检查KVM中的客户物理地址 这意味着我无法调用客户操
  • Xen、QEMU 和 KVM 之间有什么区别?

    我知道Xen使用QEMU 而KVM是QEMU的一个分支 那么 KVM 包括 Xen 添加到 QEMU 中吗 是什么名字 Thanks QEMU 是一个功能强大的模拟器 这意味着它可以模拟多种处理器类型 Xen 使用 QEMUHVM http
  • Android 模拟器和 OpenGL ES3:EGL_BAD_CONFIG

    我正在运行一个Android 虚拟设备 https developer android com studio run managing avds html在我的 Ubuntu 主机上 它使用 CPU ABI Intel Atom x86 我

随机推荐