ubuntu 安装GPU黑屏 修改GRUB_qemu-kvm安装and配置桥接和SR-IOV - 山河故人abin
kvm和docker的区别:kvm是全虚拟化,需要模拟各种硬件,docker是容器,共享宿主机的CPU,内存,swap等。本文安装的qemu-kvm属于kvm虚拟化,其中:kvm负责cpu虚拟化和内存虚拟化,QEMU模拟IO设备(网卡、磁盘等)。
参考资料:
qemu和docker区别:https://www.cnblogs.com/boyzgw/p/6807986.html
qemu,kvm,qemu-kvm关系:https://www.cnblogs.com/echo1937/p/7138294.html
1. 安装
ubuntu环境安装:
sudo apt-get install qemu virt-manager
centos环境安装:
yum install qemu-kvm qemu-img virt-manager libvirt libvirt-python virt-manager libvirt-client virt-install virt-viewer -y
其中,virt-manager是虚拟机管理工具,相当于windows环境下的vmware软件。
2. 新建虚拟机
下载系统镜像(以为例):
wget
创建一个虚拟磁盘, -f指定格式, 文件名 ,大小为20G
qemu-img create -f qcow2 -o preallocation=metadata ubuntu14_04.qcow2 20G
通过命令行安装虚拟机:
virt-install --virt-type=kvm --name=ubuntu14_04 --vcpus=2 --memory=2048 --location=ubuntu-14.04.6-server-amd64.iso --disk path=ubuntu14_04.qcow2,size=20,format=qcow2 --network network=default --graphics none --extra-args='console=ttyS0' --force
参数 | 含义 |
---|---|
--virt-type | 虚拟化类型 |
--name | 虚拟机的名字 |
--vcpus | CPU个数 |
--memory | 内存大小,单位MB |
--location | ISO系统镜像位置 |
--disk path | 磁盘位置, 大小, 格式等 |
--network | 网络 |
--graphics | guest显示设置, 设置为none时,表示从命令行安装 |
--extra-args | 如果从命令行安装,需要指定该参数为 'console=ttyS0' |
安装虚拟机时指定网桥(需要先配置好桥接,方法在下面):
virt-install --virt-type=kvm --name=ubuntu14_04 --vcpus=2 --memory=2048 --location=ubuntu-14.04.6-server-amd64.iso --disk path=ubuntu14_04.qcow2,size=20,format=qcow2 --network bridge=br0 --graphics none --extra-args='console=ttyS0' --force
安装虚拟机时指定PCI设备(需要先配置好SR-IOV,方法在下面,02:是SR-IOV虚拟出来的网卡的PCI编号):
virt-install --virt-type=kvm --name=ubuntu14_04 --vcpus=2 --memory=2048 --location=ubuntu-14.04.6-server-amd64.iso --disk path=ubuntu14_04.qcow2,size=20,format=qcow2 --network network=default --hostdev=02: --graphics none --extra-args='console=ttyS0' --force
其中,hostdev可以是以下几种形式:
--hostdev pci_0000_02_00_1
A node device name via libvirt, as shown by
virsh nodedev-list
--hostdev 001.003
USB by bus, device (via lsusb).
--hostdev 0x1234:0x5678
USB by vendor, product (via lsusb).
--hostdev 02.
PCI device (via lspci).
如果出现错误:
WARNING /home/user/ubuntu14_04.qcow2 may not be accessible by the hypervisor. You will need to grant the 'qemu' user search permissions for the following directories: ['/home/user']
出现这种错误是因为qemu用户没有权限访问当前用户的家目录,修改权限为其他用户可以访问当前用户目录即可解决:
cd /home
chmod 755 user
drwxr-xr-x. 12 user user 4096 Oct 19 11:43 user
3. 使用虚拟机
命令 | 含义 |
---|---|
virsh dumpxml name | 查看虚拟机配置文件 |
virsh start name | 启动kvm虚拟机 |
virsh shutdown name | 正常关机 |
virsh destroy name | 非正常关机,相当于物理机直接拔掉电源 |
virsh undefine name | 彻底删除,无法找回,如果想找回来,需要备份/etc/libvirt/qemu的xml文件 |
virsh define file-name.xml | 根据配置文件定义虚拟机 |
virsh suspend name | 挂起,终止 |
virsh resume name | 恢复挂起状态 |
virsh edit name | 编辑虚拟机配置文件 |
配置桥接网络:
virsh iface-bridge --interface eth0 --bridge br0
eth0是设置桥接的物理网卡名称,br0是桥接网卡的名称。
查看桥接网络:
brctl show
virsh iface-list
删除桥接网卡:
virsh iface-unbridge br0
OR 通过修改配置文件配置桥接网络:
virsh edit ubuntu14_04
修改的内容如下:
<interface type='network'> ###这一行修改接口模式为"bridge"<mac address='52:54:00:c6:9f:8a'/><source network='default'/> ###这一行修改源为"bridge='br0'"<model type='virtio'/><address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/></interface>
4. qemu配置SR-IOV使用RDMA网卡
查看物理机是否开启VT:
cat /proc/cpuinfo | grep vmx
如果输出内容中有 vmx,仅仅说明CPU支持 VT,还需要通过如下命令查看是否开启:
lsmod |grep kvm
如果已经开启VT,会显示 kvm_intel 和 kvm,如果没开启,需要进BIOS设置。
已经开启的显示示例:
在启动菜单的内核CMDLINE中开启iommu,/boot/grub2/不能直接修改,需通过修改 /etc/default/grub:
vim /etc/default/grub
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet intel_iommu=on iommu=pt"
然后更新grub配置:
grub2-mkconfig -o /boot/grub2/
更新配置后,重启。
为RDMA网卡设置SR-IOV之前,确认已安装好网卡驱动。
在固件上开启SR-IOV
运行 mst(以下命令均是在root账户执行)
mst start
Starting MST (Mellanox Software Tools) driver set
Loading MST PCI module - Success
Loading MST PCI configuration module - Success
Create devices
Unloading MST PCI module (unused) - Success
查看PCI插槽中的HCA设备
mst status
MST modules:
------------
MST PCI module is not loaded
MST PCI configuration module loaded
MST devices:
------------
/dev/mst/mt4119_pciconf0 - PCI configuration cycles access.
domain:bus :dev.fn=0000:02:00.0 addr.reg=88 data.reg=92 cr_bar.gw_offset=-1
Chip revision is: 00
/dev/mst/mt4119_pciconf1 - PCI configuration cycles access.
domain:bus :dev.fn=0000:81:00.0 addr.reg=88 data.reg=92 cr_bar.gw_offset=-1
Chip revision is: 00
查询设备的SRIOV是否开启、虚拟化数量
mlxconfig -d /dev/mst/mt4119_pciconf0 q | grep -E "SRIOV_EN|NUM_OF_VFS"
NUM_OF_VFS 0
SRIOV_EN False(0)
开启SR-IOOV并设置VFS的数量
- SRIOV_EN=1; 开启SRIOV
- NUM_OF_VFS=4 ; 将VFS数量设置为4
mlxconfig -d /dev/mst/mt4119_pciconf0 set SRIOV_EN=1 NUM_OF_VFS=4
查看是否设置成功
mlxconfig -d /dev/mst/mt4119_pciconf0 q | grep -E "SRIOV_EN|NUM_OF_VFS"
NUM_OF_VFS 4
SRIOV_EN True(1)
注意:此时,无法通过lspci看到VFS,只有在MLNX OFED驱动程序上启用SR-IOV后,你才能看到它们。
在MLNX_OFED驱动上开启SR-IOV
找到设备,本示例中,有两个设备处于激活动态:mlx5_0对应接口 "ib0",mlx5_1对应接口 "ib1",我们只配对 "mlx5_0" 配置。
ibstat
CA 'mlx5_0'
......
Port 1:
State: Active
Physical state: LinkUp
......
CA 'mlx5_1'
......
Port 1:
State: Active
Physical state: LinkUp
......
ibdev2netdev
mlx5_0 port 1 ==> ib0 (Up)
mlx5_1 port 1 ==> ib1 (Up)
查看固件中配置的VFS数量
cat /sys/class/net/ib0/device/sriov_totalvfs
4
注意:这是一个查看操作,配置VFS数量应使用上面用到的命令:
mlxconfig -d /dev/mst/mt4119_pciconf0 set SRIOV_EN=1 NUM_OF_VFS=4
查看当前设备的VFS数量(三种方式结果一样)
cat /sys/class/infiniband/mlx5_0/device/mlx5_num_vfs cat /sys/class/net/ib0/device/sriov_numvfs cat /sys/class/net/ib0/device/mlx5_num_vfs
0
注意:如果命令执行失败,可能意味着未加载驱动程序。
注意:mlx5_num_vfs和sriov_numvfs的区别在于,即使操作系统未加载虚拟化模块(未向grub文件添加intel_iommu=on),mlx5_num_vfs也存在;sriov_numvfs 仅在将intel_iommu=on添加到grub文件时才适用。因此,如果没有sriov_numvfs文件,请检查是否已将Intel_iommu=on添加到grub文件中。
注意:因内核版本不同,可能没有部分选项。
设置VFS的数量(三种方式,任选其一)
echo 4 > /sys/class/infiniband/mlx5_0/device/mlx5_num_vfs cat /sys/class/infiniband/mlx5_0/device/mlx5_num_vfs
echo 4 > /sys/class/net/ib0/device/sriov_numvfs cat /sys/class/net/ib0/device/sriov_numvfs
echo 4 > /sys/class/net/ib0/device/mlx5_num_vfs cat /sys/class/net/ib0/device/mlx5_num_vfs
4
如出现错误信息:
echo: write error: Cannot allocate memory
修改 /etc/default/grub并重新生成/boot/grub2/:
vim /etc/default/grub
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet intel_iommu=on iommu=pt pci=realloc"
grub2-mkconfig -o /boot/grub2/
更新配置后,重启。
注意:
1.更改VFS的数量是临时的,服务器重新启动后,设置的值会丢失。
2.写入sysfs文件时,适用以下规则:
- 如果未分配VFS,则VFS的数量可以更改为任何有效值(0-固件设置步骤中设置的最大VFS);
- 如果有分配给虚拟机的VFS,则无法更改VFS的数量;
- 如果在未分配VFS的情况下,管理员在PF上卸载驱动程序,则驱动程序将卸载并禁用SRI-OV;
- 如果在卸载PF驱动程序时分配了VFS,则不会禁用SR-IOV。这意味着VF在VM上可见,但它们将无法运行。这适用于使用pci_stub而非vfio内核的操作系统。
- VF驱动程序将发现这种情况并关闭其资源;
- 重新加载PF上的驱动程序后,VF可以运行。 VF的管理员将需要重新启动驱动程序才能继续使用VF。
查看PCI设备
lspci -D | grep Mellanox
0000:02:00.0 Infiniband controller: Mellanox Technologies MT27800 Family [ConnectX-5]
0000:02: Infiniband controller: Mellanox Technologies MT27800 Family [ConnectX-5 Virtual Function]
0000:02:00.2 Infiniband controller: Mellanox Technologies MT27800 Family [ConnectX-5 Virtual Function]
0000:02:00.3 Infiniband controller: Mellanox Technologies MT27800 Family [ConnectX-5 Virtual Function]
0000:02:00.4 Infiniband controller: Mellanox Technologies MT27800 Family [ConnectX-5 Virtual Function]
0000:81:00.0 Infiniband controller: Mellanox Technologies MT27800 Family [ConnectX-5]
注意:带 Virtual Function 的四个PCI设备就是通过SR-IOV虚拟化出来的RDMA网卡。
ibdev2netdev -v
0000:02:00.0 mlx5_0 (MT4119 - MCX555A-ECAT) CX555A - ConnectX-5 QSFP28 fw 16.26.4012 port 1 (ACTIVE) ==> ib0 (Up)
0000:81:00.0 mlx5_1 (MT4119 - MCX555A-ECAT) CX555A - ConnectX-5 QSFP28 fw 16.27.2008 port 1 (ACTIVE) ==> ib1 (Up)
0000:02: mlx5_2 (MT4120 - NA) fw 16.26.4012 port 1 (DOWN ) ==> ib2 (Down)
0000:02:00.2 mlx5_3 (MT4120 - NA) fw 16.26.4012 port 1 (DOWN ) ==> ib3 (Down)
0000:02:00.3 mlx5_4 (MT4120 - NA) fw 16.26.4012 port 1 (DOWN ) ==> ib4 (Down)
0000:02:00.4 mlx5_5 (MT4120 - NA) fw 16.26.4012 port 1 (DOWN ) ==> ib5 (Down)
此时,你可以看到PF上有4个VF:
PCI 编号 VF 编号 0000:02: 0 0000:02:00.2 1 0000:02:00.3 2 0000:02:00.4 3 在ip池查看VFS
ip link show
......
4: ib0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 2044 qdisc mq state UP mode DEFAULT group default qlen 256
link/infiniband 20:00:0a:12:fe:80:00:00:00:00:00:00:ec:0d:9a:03:00:c0:41:d4 brd 00:ff:ff:ff:ff:12:40:1b:ff:ff:00:00:00:00:00:00:ff:ff:ff:ff
vf 0 MAC 00:00:00:00:00:00, spoof checking off, link-state disable, trust off, query_rss off
vf 1 MAC 00:00:00:00:00:00, spoof checking off, link-state disable, trust off, query_rss off
vf 2 MAC 00:00:00:00:00:00, spoof checking off, link-state disable, trust off, query_rss off
vf 3 MAC 00:00:00:00:00:00, spoof checking off, link-state disable, trust off, query_rss off
......
为qemu添加SR-IOV虚拟化的网卡
查看PCI设备信息
lshw -c network -businfo
Bus info Device Class Description
========================================================
......
pci@0000:02: ib2 network MT27800 Family [ConnectX-5 Virtual Function]
pci@0000:02:00.2 ib3 network MT27800 Family [ConnectX-5 Virtual Function]
pci@0000:02:00.3 ib4 network MT27800 Family [ConnectX-5 Virtual Function]
pci@0000:02:00.4 ib5 network MT27800 Family [ConnectX-5 Virtual Function]
......
这一步看到的信息,其实在刚才通过 "ibdev2netdev -v" 命令已经得到了。
将设备从宿主机deattach
virsh nodedev-detach pci_0000_02_00_1
命令中,pci_0000_02_00_1 是根据上面由SR-IOV虚拟化出来的PCI设备编号拼接起来的:
0000:02:00.1 --> pci_0000_02_00_1
也可以直接通过如下命令查看:
virsh nodedev-list --tree | grep pci
......
| +- pci_0000_02_00_1
| +- pci_0000_02_00_2
......
如果该虚拟设备不再被使用,需要在 virt-manager 中首先将该设备移除,然后在主机上重新挂载该设备:
virsh nodedev-reattach pci_0000_02_00_1
配置VF直通
方法1(interface):在devices段落里加入(该方法未成功)
virsh edit ubuntu14_04
内容如下:
<interface type='hostdev' managed='yes'><mac address='52:54:00:ad:ef:8d'/><source><address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x1'/></source><vlan><tag id='4010'/></vlan> </interface>
如不需要设置mac和vlan,可以去掉相应标签。
其中,address中的参数是根据 "lshw -c network -businfo" 获得的信息配置的,例如,我要配置的PCI设备编号是:
pci@0000:02:00.1 ib2
注意对应关系,domain: 0x0000, bus: 0x02, slot: 0x00, function: 0x1.
方法2(hostdev):在devices段落里加入(本文测试中,该方法有效)
<hostdev mode='subsystem' type='pci' managed='yes'><source><address domain='0x0000' bus='0x02' slot='0x00' function='0x1'/></source>
方法选择:
方法1:功能多,可以配置mac和vlan;
方法2:mac和vlan需要自己在宿主上敲ip命令设置。
连接虚拟机,验证是否有RDMA网卡
lspci | grep Mellanox
00:06.0 Infiniband controller: Mellanox Technologies MT28800 Family [ConnectX-5 Virtual Function]
可以看到,在虚拟机中有RDMA网卡,接下来就是安装驱动等操作了。
RDMA配置SR-IOV参考资料:
ubuntu 安装GPU黑屏 修改GRUB_qemu-kvm安装and配置桥接和SR-IOV - 山河故人abin相关推荐
- ubuntu 安装GPU黑屏 修改GRUB_Ubuntu 18.04 安装笔记
概述:Ubuntu 18.04 的安装配置笔记, :two_hearts:. 简介:基础使用环境的搭建,暂定目标为一篇文章解决大部分疑问. 协议:本文章使用 CC BY-NC-SA 4.0 协议(转载 ...
- ubuntu 安装GPU黑屏 修改GRUB_手把手教你Windows+Linux双系统的安装与卸载
公众号关注 "菜鸟要飞" 设为 "星标",和12万程序员一起成长! Windows+Linux双系统的安装 1. 准备工作 1.1 U盘启动盘的制作 准备一个 ...
- ubuntu 安装GPU黑屏 修改GRUB_Hasee TX9 Windows10+Ubuntu20.04双系统安装
本人曾尝试Ubuntu16.04,一直卡在try install/install..回车后黑屏.辗转无数经验贴依然失败,后来尝试20.04成功安装,20版本界面真漂亮啊! 1.Ubuntu磁盘准备 具 ...
- ubuntu 安装GPU黑屏 修改GRUB_仅支持legacy bios 情况下 win10 安装 ubuntu 双系统踩的一坑...
今天安装 ubuntu 双系统,因为电脑主板只支持 Legacy BIOS (也就是"传统 BIOS"),自己又毛手毛脚的,花了很多的时间,网上一些教程,在我遇到的关键点处往往含糊 ...
- ubuntu 安装GPU黑屏 修改GRUB_Ubuntu安装mysql后修改用户名和密码
Ubuntu安装mysql后修改用户名和密码 01 获取用户名和密码 在前面文章中,提到过刚安装mysql数据库后获取用户名和密码,这里不做复述,请见Ubuntu下mysql安装后登录不进去的解决方法 ...
- u盘安装centos8黑屏_u盘centos7 安装 黑屏苹果电脑怎么安装win7系统还原
3.然后进入资料备份界面,通过勾选可以选择对"我的文档"."收藏夹"."桌面文件"进行备份,备份资料会保存到自动生成的"XBGho ...
- 安装引导黑屏_给电脑安装系统老是装不上,重启就黑屏,原来是这项设置在作怪!...
很多人和我反映说:给电脑安装系统重启电脑后就黑屏无法正确解压系统,这个问题大家有没有遇到呢?遇到这个问题的人可能会认为自己电脑的硬盘坏了,明明已经把需要的Windows操作系统拷贝到硬盘已经成功了,重 ...
- linux安装nvidia黑屏,GTX 550 Ti 安装Linux遇到的问题 黑屏 显示器休眠
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 前两天刚想起来给自己的电脑安装一个Linux操作系统.今天付诸实践的时候才发现了一个问题,就是用Live CD进行引导的 ...
- mac上用refind安装linux黑屏,在 Mac 上安装 rEFInd 等第三方引导程序
Mac电脑原装的引导程序虽然使用简单,但功能有限,也缺少自定义功能.本文就将根据官方指南介绍如何安装第三方的引导程序,以著名的 rEFInd 为例. 和 Linux 和 Windows 电脑上常用的 ...
最新文章
- Python学习笔记之爬取网页保存到本地文件
- Google BERT模型提取句子Token特征
- 【VBA研究】怎样将单元格数据赋给数组
- 山东科技大学c语言完全题库,“山东科技大学十大未解之谜”之完全解答
- 如果让你选择计算机本科最重要的三门课,会选什么?高手都选他们!
- 数据分析李小璐PG one出轨门自卫反击战
- 神奇的python(五)之python强制退出报错(异常)解决方法
- Going Further with Point Pair Features: PPF, 如何走的更远?
- (12)H5新增语义化标签布局案例
- mysql序列号生成_超详细的mysql数据库GTID介绍—概念、优缺点、原理、生命周期等
- 微软人工智能-服务和 API
- VTD软件说明书阅读之OpenDRIVE Scenario Editor
- 适合新手入门—嵌入式C语言
- PS的液化功能使用(瘦身,拉长专用)
- Verilog练习:HDLBits笔记4
- Python3网络爬虫之requests静态爬虫:链家深圳二手房
- [luoguT30208]太极剑
- OpenCV基础(7)OpenCV中的颜色空间
- 自学Java语言网络编程局域网内与电脑无线传输视频,图片文件,调用系统媒体播放视频图片文件
- 测评 | 谷歌智能耳机Pixel Buds体验:耳朵里的语音助手
热门文章
- 用表格完成个人信息网页的设计 基本信息:姓名,学号,出生日期,手机号码,证件类型,证件号码,学校,学院,专业,学制,入学时间,个人证件图像兴趣爱好
- Linux虚拟机与主机共享文档
- 诺基亚升级Android10,诺基亚Android 10系统更新,诺基亚7+的性能得到可完善
- pjmedia系列之媒体设备pjmedia_snd_port
- 闭关修炼——one——struts2
- Arm芯片上电启动流程剖解
- Android bugreport 充电日志解读
- 今年元宵月52年来最圆最大
- 大学计算机成绩构成,大学计算机平时成绩占多少?
- 如何创建 Ping app 中的 UIViewController 转换动画?