pci passthrough with qemu

来源:互联网 发布:如何分析客户数据 编辑:程序博客网 时间:2024/05/22 05:14

http://pic.dhe.ibm.com/infocenter/lnxinfo/v3r0m0/index.jsp?topic=%2Fliaat%2Fliaatbppassthrougtask.htm


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


1. 确定硬件是否支持iommu

这是一个硬件的功能,intel架构上叫vt-d。

从BIOS上可以看出来, 不同版本放的位置不一样。

我的是在 Security->Virtualization->VT-d


2. 配置kernel,支持iommu

在intel机器上有这么个选项,

INTEL_IOMMU

  │   Location:                                                                                                                            │  
  │     -> Device Drivers                                                                                                                  │  
  │ (2)   -> IOMMU Hardware Support (IOMMU_SUPPORT [=y]) 


3. 重启,看看是否enable了。

在intel上,运行

dmesg | grep -e DMAR -e IOMMU


4. 在host上unbind设备

加载pci_stub模块, modprobe pci_stub

选中某个设备, lspci -s 03:00.0 -n, 03:00.0 0280: 8086:0085 (rev 34)

bind/unbind

  • echo "8086 0085" > /sys/bus/pci/drivers/pci-stub/new_id
  • echo 0000:03:00.0 > /sys/bus/pci/devices/0000:01:00.0/driver/unbind
  • echo 0000:03:00.0 > /sys/bus/pci/drivers/pci-stub/bind

5. 把设备给guest

./i386-softmmu/qemu-system-i386 -enable-kvm \

-drive file=../../kvm/ubuntu.qcow2 -boot dc -m 512  \

-monitor stdio \

-netdev user,id=usernet -device rtl8139,netdev=usernet \

-device pci-assign,host=0000:03:00.0


不过偶没有成功,报错了。。。


6. 错误分析,解决

按照上面的办法没成功,我看了一下dmesg,有这么一句。

kvm_iommu_map_guest: No interrupt remapping support, disallowing device assignment. Re-enble with "allow_unsafe_assigned_interrupts=1" module option.


稍微调查了一下,发现和这个选项有关,config IRQ_REMAP。 可惜我enable不了,因为这个必须在x86_64上做。

没办法,那我只好在装载kvm模块的时候加上这个参数的设置了。


加上这个参数后,果然就好了。赞。



接下来我用了vfio来做passthrough。步骤略有不同

1. 安装相关的kernel module

sudo modprobe vfio

sudo modprobe vfio-pci


这样就产生了 /dev/vfio/vfio 设备


2. 按照文档要求,添加设备到一个group

按照现在的要求,需要讲某一个iommu_group下的所有设备都添加到一个vfio group.

cd /sys/bus/pci/devices/0000:0d:00.0/

readlink iommu_group  这样可以显示该设备对应iommu_group的名字

ll iommu_group/devices 这样可以显示和该设备处于一个iommu_group的设备。


echo 0000:0d:00.0 > /sys/bus/pci/devices/0000:0d:00.0/driver/unbind

echo 1180 e823 > /sys/bus/pci/drivers/vfio-pci/new_id

echo 0000:03:00.0 > /sys/bus/pci/devices/0000:03:00.0/driver/unbind

echo 8086 0085 > /sys/bus/pci/drivers/vfio-pci/new_id


这样就生成了 /dev/vfio/6  (数字由iommu_group号决定)


3. 启动 guest

../git/qemu-latest/i386-softmmu/qemu-system-i386 -enable-kvm -drive file=ubuntu.qcow2 -boot dc -m 512  -monitor stdio -netdev user,id=usernet -device vfio-pci,host=0000:03:00.0


如果是在power机器上,则写成

-device "spapr-pci-vfio-host-bridge,id=CXGB3,iommu=4,index=6"


4. fix

默认这么启动会有个错误,当然这是在我的机器上。

vfio_iommu_type1_open: No interrupt remapping support.  Use the module param "allow_unsafe_interrupts" to enable VFIO IOMMU support on this platform


意思是我这个机器不支持remap, 那我就把这个参数直接设成了1.  就好了。





原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 买空调不给发票怎么办 卖苹果手机没有发票怎么办 刷机字库刷坏了怎么办 维棠不能播放视频怎么办 m3u8卡顿的厉害怎么办 下载了PDF不能用怎么办 pdf格式在电脑打不开怎么办 电脑上arm格式打不开怎么办 极米桌面无响应怎么办 jpg格式的文件打印模糊怎么办 苹果迅雷mp4格式看不了怎么办 太阳镜镜片磨花了怎么办 ∪盘插上电脑读不出怎么办 网站被路由器屏蔽了怎么办 电脑无法进入路由器设置页面怎么办 笔记本电脑无线网卡坏了怎么办 笔记本内置无线网卡坏了怎么办 笔记本无线网卡坏了怎么办 wif连上不能上网怎么办 手机wifi有个感叹号怎么办 分手不删qq微信怎么办 优盘提示被锁了怎么办 电视无线网卡插上没反应怎么办 光猫没有wan口怎么办 usb无线网卡坏了怎么办 wifi接收器电脑不识别怎么办 无线路由接收器识别不了怎么办 小米3一直闪红灯怎么办 手机拨号键删了怎么办 联想笔记本电脑无线网卡坏了怎么办 联想z360内置无线网卡坏怎么办 usb无线网卡驱动安装失败怎么办 无线网被禁用了怎么办 未连接无线通信已关闭怎么办 手机设置路由器打不开了怎么办 手机打不开登录路由器的网址怎么办 按了光猫复位后怎么办 按了猫的复位键怎么办 望远镜的镜片小水雾是怎么办 坚果r1不断重启怎么办 忘记Wi-Fi密码了怎么办