KVM & PCI-Passthrough

这篇博客详细介绍了在Linux环境下,如何配置KVM(Kernel-based Virtual Machine)以及进行PCI设备直通(PCI-Passthrough)的步骤。内容涵盖硬件信息检查、KVM的安装配置、网卡直通的准备工作,包括加载vfio-pci驱动、绑定设备到vfio-pci驱动,以及在虚拟机中查看网卡工作情况。此外,还讨论了使用qemu-kvm、virt-manager和virt-install创建虚拟机的方法,以及KVM的源码编译和GDB调试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 本机信息

https://www.cnblogs.com/ggjucheng/archive/2013/01/14/2859613.html

1.1 系统信息:Linux内核版本

# uname -a
Linux dengnan-ThinkStation-P300 4.15.0-142-generic #146~16.04.1-Ubuntu SMP Tue Apr 13 09:27:15 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

1.2 CPU

查看CPU信息概要:# lscpu
查看CPU详细信息:# cat /proc/cpuinfo

# lscpu
CPU(s):                8
On-line CPU(s) list:   0-7
Thread(s) per core:    2
Core(s) per socket:    4
Socket(s):             1
Virtualization:        VT-x

1.3 Memory

查看内存信息概要:# free -m
查看内存详细使用:# cat /proc/meminfo
查看内存硬件信息:# dmidecode -t memory
在这里插入图片描述

# cat /proc/meminfo
MemTotal:       24601528 kB
MemFree:        21265328 kB
MemAvailable:   22022324 kB
Buffers:           84680 kB
Cached:          1131480 kB
...
Mapped:           591092 kB
Shmem:            183488 kB
...
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      273228 kB
DirectMap2M:     4888576 kB
DirectMap1G:    20971520 kB

1.4 磁盘

查看硬盘和分区分布:# lsblk
查看硬盘和分区的详细信息:# fdisk -l
查看使用情况:#df -hl

1.5 网卡

查看网卡硬件信息:# lspci | grep -i ‘eth’
查看系统的所有网络接口:# ifconfig -a 或者 # ip link show
查看某个网络接口的详细信息,例如eth0的详细参数和指标:#ethtool eth0
查看某个网络接口的驱动程序:lspci -s 00:19.0 -k

# lspci | grep -i 'eth'
00:19.0 Ethernet controller: Intel Corporation Ethernet Connection I217-LM (rev 04)
04:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8169 PCI Gigabit Ethernet Controller (rev 10)

加了一块瑞昱的千兆网卡

1.6 IOMMU配置

6.1 在bios中打开对VT-d的支持,设置为enabled
6.2 检查硬件VT-d是否成功打开(这里输出的信息很少 需要进一步在kernel中配置)

# dmesg | grep -e DMAR -e IOMMU

在这里插入图片描述
6.3 检查VT-d在kernel中是否enabled

# cat /proc/cmdline | grep iommu=pt
# cat /proc/cmdline | grep intel_iommu=on

都没有输出
在这里插入图片描述
修改 /etc/default/grub 文件进行设置:

# sudo gedit /etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

改为

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash iommu=pt intel_iommu=on"

更新配置信息并重启

# sudo grub-mkconfig -o /boot/grub/grub.cfg 
# sudo reboot

再次查看

# dmesg | grep -e DMAR -e IOMMU

在这里插入图片描述OK

2 KVM的安装和配置-apt-get

https://linux.cn/article-9707-1.html
KVM(基于内核的虚拟机)是一款为类 Linux 系统提供的开源的全虚拟化解决方案,KVM 使用虚拟化扩展(如 Intel VT 或 AMD-V)提供虚拟化功能。
在Linux 机器上安装 KVM,会通过加载诸如 kvm-intel.ko(基于 Intel 的机器)或 kvm-amd.ko(基于 amd 的机器)的内核模块,使其成为管理程序hypervisor。

2.1 确认硬件是否支持虚拟化

执行 # egrep 命令以验证机器硬件是否支持虚拟化,

$ egrep -c '(vmx|svm)' /proc/cpuinfo
8

输出结果大于 0,表示硬件支持虚拟化。否则需要重启进入 BIOS 设置中启用 VT 技术。

使用如下命令安装 kvm-ok 实用程序,用于确定机器是否能够运行硬件加速的 KVM 虚拟机。

#  sudo apt install cpu-checker

运行 kvm-ok 命令确认输出结果

# sudo kvm-ok
INFO: /dev/kvm exists
KVM acceleration can be used

2.2 安装 KVM 及其依赖包

运行下面的 apt 命令安装 KVM 及其依赖项:

$ sudo apt update
$ sudo apt install qemu qemu-kvm libvirt-bin  bridge-utils  virt-manager

本地用户将被自动添加到 libvirtd 群组

2.3 启动并启用 libvirtd 服务

安装 qemu 和 libvirtd 软件包之后,它就会自动启动并启用 libvirtd 服务,如果 libvirtd 服务没有开启,则运行以下命令开启,

$ sudo service libvirtd start
$ sudo update-rc.d libvirtd enable

现在使用下面的命令确认 libvirtd 服务的状态,

$ service libvirtd status

输出结果如下所示:
在这里插入图片描述

2.4 网卡直通准备工作

查看网卡信息,准备将eno1网卡直通给VM

$ ifconfig
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值