» 您尚未登录:请 登录 | 注册 | 标签 | 帮助 | 小黑屋 |


 32 123
发新话题
打印

[其他] J3455安装PVE折腾记录(直通GPU至Libreelec当HTPC+黑群+OMV)20190703更新简易版

posted by wap, platform: Android
----------------------------20190703更新----------------------------------
最近帮几个网友在铭瑄和华擎的J3455板子上搞定了GPU直通,惊喜的发现vga rom是通用的
下面这个压缩包里包含了更改后的PVE配置文件和vga rom,按以下步骤操作:
1.将包里的etc usr文件夹覆盖到pve根目录
2.在shell里执行
    update-grub
    update-initramfs -u
3.虚拟机配置文件里添加如下:
args: -device vfio-pci,host=00:02.0,addr=0x02,x-igd-gms=1,romfile=J3455_HD500.bin
hostpci0: 00:0e,rombar=0
vga: none

记得备份!!!记得备份!!!记得备份!!!

链接: https://pan.baidu.com/s/19QgiUh7r84MlqERQxc-g1w 提取码: xrds 复制这段内容后打开百度网盘手机App,操作更方便哦
密码:edfc

PS:实现直通的这批主板的HDMI固件都是1.66,如果出现死机请检查下HDMI固件的版本
PS2:转载请注明TGFC出处!
--------------------------------------------------------------------------
折腾起源于朋友的暴风矿渣,他的需求是一台机搞定HTPC+转码+硬盘休眠+群晖moments
拜托我帮他折腾,搞定后写个简单的教程当个记录,免得以后忘记了,当然过程还是挺折腾的
各位自取所需
PS:各位如果用其他CPU也实现了,麻烦跟个贴做个记录,减少后来者的折腾成本:贱 :贱

-------------------------前言---------------------------------------------
要实现他的这些需求就必须直通iGPU和SATA控制器给各个虚拟机,SATA好办
关键是GPU的直通,翻遍了全网都没有成功实现iGPU直通并输出HDMI的案例
在寻找资料的过程中找到了这个网页
https://www.redhat.com/archives/ ... -July/msg00076.html
结合pve官方wiki,关于独显直通的教程,猜测只要dump出legacy模式下的vga rom
并设定虚拟机在legacy启动的时候,加载vga rom就能成功输出
一番折腾后成功了,测试结果为
Win7无驱动,Win10卡成翔,但Libreelec能流畅播放4K原盘并源码输出至功放!!
Libreelec安装Docker+Jellyfin后还能转码hevc
但4K remux视频只有0.8-0.9的速度,也就是说一部120分钟的片子
你要等它转码10多分钟后再观看才能流畅看完一部片,算是勉强能用

PS:可惜的是J3455不能点亮HDR,不然就真的完美了:r5:

搞定后我发现这套其实用起来蛮爽的,就自己也搞了块梅捷J3455来用,也没问题
我的配置和系统架构如下:
硬件:梅捷J3455主板+内存8G*2+SATA 2口扩展卡+SATA 4口扩展卡+82576 双口网卡
虚拟机1:Libreelec
1.直通GPU看电影,Docker+Jellyfin实现影库和串流转码
2.流程播放4K原盘
3.源码直通正常点亮功放(全景声没试)
4.Jellyfin转码4K Remux的速度是0.8-0.9X
虚拟机2:黑群3617 6.21
直通82576的一个网口 和 sata 2口扩展卡
Moments正常识别人物和主题
虚拟机3:OMV
直通SATA 4口扩展卡
硬盘正常休眠

教程开始
-------------------------直通GPU前期准备---------------------------------------------
bios设置
C-state:Disable
GPU RAM:开到最大

PVE设置
第一步:开启PVE直通功能
1.内核开启IOMMU支持
vi /etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT="quiet"
改为
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on video=efifb:off,vesafb:off"
如果不需要GPU直通,改成
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"
保存后执行update-grub

2.添加Vfio驱动
nano /etc/modules
添加以下内容并保存
-------分隔符---------
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
-------分隔符---------

3.添加驱动黑名单
nano /etc/modprobe.d/blacklist.conf
添加以下内容并保存
-------分隔符---------
blacklist snd_hda_intel
blacklist snd_soc_skl
blacklist snd_hda_codec_hdmi
blacklist i915
-------分隔符---------
4.绑定iGPU至Vfio
使用lspci命令查看GPU和声卡的总线地址
然后用lspci -n -s XX:XX查询vender id并记录(XX:XX替换为你的GPU和声卡总线地址,igpu的地址一般都是00:02)
然后将查询到的vender id替换至以下命令并执行
echo "options vfio-pci ids=[igpu vender id],[声卡 vender id]" > /etc/modprobe.d/vfio.conf
具体操作请参考proxmox关于pci passthrough的wiki
如果你的主板是华擎、铭瑄、梅捷J3455则直接执行
echo "options vfio-pci ids=8086:5a85,8086:5a98" > /etc/modprobe.d/vfio.conf

5.执行以下指令
echo "options vfio_iommu_type1 allow_unsafe_interrupts=1" > /etc/modprobe.d/iommu_unsafe_interrupts.conf(未验证是否必须)
echo "options kvm ignore_msrs=1" > /etc/modprobe.d/kvm.conf(非必须)

6.更新initramfs,后重启宿主
update-initramfs -u

7.重启后,使用
lspci -v 查看gpu和声卡驱动是否绑定至Vifo
find /sys/kernel/iommu_groups/ -type l 查看iommu分组是否正确

第二步:Dump VGA romfile
1.换个临时硬盘或U盘安装个用legacy方式启动的Ubantu然后启动
2.打开终端,按以下顺序命令
a. git clone https://github.com/awilliam/rom-parser
b. cd rom-parser
c. make
d. cd /sys/bus/pci/devices/0000:02:00.0/
e. echo 1 > rom
f. cat rom > /tmp/[自定Rom文件名].bin (自定义rom文件)
g. echo 0 > rom
h. cd /tmp
i. rom-fixer [自定Rom文件名].bin
重点来了,根据提示用之前记录下的gpu vender id修复romfile
修复后,用个U盘把romfile复制出来后关机,换上pve系统的硬盘
将以上步骤dump的romfile复制到PVE /usr/share/kvm/ 目录下
至此直通GPU的前期准备就完成了

参考链接:
https://www.redhat.com/archives/ ... -July/msg00076.html
https://pve.proxmox.com/wiki/Pci_passthrough
https://github.com/awilliam/rom-parser

-------------------------以下为虚拟机安装---------------------------------------------
Libreelec虚拟机安装:
如何建立虚拟机和安装Libreelec略过不表,只挑重点的说
1.建立虚拟机时,Machine选默认的Default (i440fx)
2.启动方式选择Seabios
3.建好虚拟机后,修改虚拟机配置文件,位置:/etc/pve/qemu-server/[vmid].conf
添加以下内容
-------分隔符---------
args: -device vfio-pci,host=00:02.0,addr=0x02,x-igd-gms=1,romfile=[rom文件名].bin
hostpci0: [声卡地址],rombar=0
vga: none
-------分隔符---------
若是J3455主板,直接添加以下
-------分隔符---------
args: -device vfio-pci,host=00:02.0,addr=0x02,x-igd-gms=1,romfile=[rom文件名].bin
hostpci0: 00:0e,rombar=0
vga: none
-------分隔符---------

黑裙和OMV有空再写

[

本帖最后由 xif7456 于 2019-6-26 01:54 通过手机版编辑

[ 本帖最后由 xif7456 于 2019-7-4 14:50 编辑 ]


本帖最近评分记录
  • 水口腐乳 激骚 +1 最骚 Rated by wap 2019-6-26 11:02
  • zsj1zsj 激骚 +1 评分 2019-6-26 09:38
  • LcSter 激骚 +3 最骚 Rated by wap 2019-6-26 02:18

TOP

posted by wap, platform: Android
引用:
原帖由 @長瀬湊  于 2019-6-26 03:01 发表
感觉有点麻烦了,其实PVE就是基于debian,所以可以直接安装xfce桌面之后安装kodi,然后设置开机自动进入kodi。HTPC不需要装在虚拟机里面,也就不需要直通核显了。而且PVE下也可以直接装docker
Kodi和docker不装在pve里是为了保持宿主的纯净,方便迁移备份快照,不然以后换硬盘或主板又得折腾一遍



TOP

posted by wap, platform: Android
引用:
原帖由 @qwased  于 2019-6-26 03:04 发表
lz你试试在cpu没有负载的时候群晖的读写速度是不是千兆?
我朋友买的j3455和网上很多人一样碰到了低负载的时候cpu频率太低以至于不能跑满千兆读写的问题
虚拟的黑群没这个问题,在bios里把C SATE关闭试试


TOP

posted by wap, platform: Android
引用:
原帖由 @yufe  于 2019-6-26 09:46 发表
虚拟机没办法硬件转码
可以转码也可以硬解,gpu都直通过去了

TOP

posted by wap, platform: Android
引用:
原帖由 @長瀬湊  于 2019-6-26 10:53 发表
PVE好像没有迁移功能?没搞清楚怎么迁移
建立集群后可以在线迁移,但有直通设备的虚拟机不能在线迁移

TOP

引用:
原帖由 egbluecats 于 2019-7-2 20:20 发表
你好,我在NUC6 J3455上尝试

按照Dump VGA romfile这步时
先后试了UEFI启动live U盘,cat rom时cat: rom: Input/output error
然后传统方式用live U盘和安装到硬盘上,cat rom没问题

以下是我操作步骤,不知 ...
你好,能否贴下你的虚拟机配置
下面这条在你的配置里有吗?
Vga:none

TOP

引用:
原帖由 egbluecats 于 2019-7-3 12:22 发表
boot: cdn
bootdisk: sata0
cores: 1
ide2: none,media=cdrom
memory: 2048
name: LibreELEC
net0: virtio=AA:42:8E:B2:5F:88,bridge=vmbr0,firewall=1
numa: 0
ostype: l26
sata0: local-lvm:vm-100-disk- ...
修复的过程没有问题,但必须要在legacy模式下dump vga rom
你试试我的rom吧,看看得不得
最近我发现这个rom是通用的
用同样的rom,已经在梅捷、铭瑄、华擎这3块主板上成功实现直通了

链接: https://pan.baidu.com/s/19QgiUh7r84MlqERQxc-g1w 提取码: xrds 复制这段内容后打开百度网盘手机App,操作更方便哦
密码:edfc

rom在usr/share/kvm里

对了,你的hdmi固件是什么版本的?搞成功的这批都是1.66

[ 本帖最后由 xif7456 于 2019-7-3 15:37 编辑 ]

TOP

引用:
原帖由 egbluecats 于 2019-7-3 17:13 发表
kvm: -device vfio-pci,host=00:02.0,addr=0x02,x-igd-gms=1,romfile=J3455_HD500.bin: IGD device 0000:00:02.0 cannot support legacy mode due to existing devices at address 1f.0
TASK OK

用上还是这样,我 ...
这个报错跟主板和host启动方式没关系的,应该是Machine type的问题
虚拟机要在00:1f.0创建LPC/ISA bridge,而现阶段Q35不支持
你的Machine确定是i440fx,不是Q35吗?

HDMI固件要在win下用intel的软件查看
好像1.72HDMI固件会造成直通的时候host死机,但也有个人说用1.72成功了,所以这个问题还没有确定

[ 本帖最后由 xif7456 于 2019-7-3 20:19 编辑 ]

TOP

引用:
原帖由 egbluecats 于 2019-7-3 21:49 发表
我又试了下

当我在web里设置主GPU时
配置文件是这样hostpci0: 00:02.0,x-vga=1

启动输出是
kvm: -device vfio-pci,host=00:02.0,id=hostpci1,bus=pci.0,addr=0x11,x-vga=on: Failed to mmap 0000:00:02.0 BA ...
奇怪了,搞了几台都没问题亚。。。。

检查下如下问题吧
vt-d是否打开?
更改host配置后是否更新配置?
update-grub
update-initramfs -u
虚拟机是否启动方式是否为Seabios?
Machine是否为i440fx?

Shell里运行如下,输出的内容复制过来看下~
cat /etc/default/grub
cat /etc/modprobe.d/blacklist.conf
cat /etc/modprobe.d/vfio.conf
cat /etc/modules
cat /etc/pve/qemu-server/[vmid].conf
find /sys/kernel/iommu_groups/ -type l

如果还是不行,+群讨论吧。。。。

[ 本帖最后由 xif7456 于 2019-7-4 12:57 编辑 ]

TOP

引用:
原帖由 ChinaBoyFF 于 2019-7-4 12:11 发表
kvm: -device vfio-pci,host=00:02.0,addr=0x02,x-igd-gms=1,romfile=J3455_HD500.bin: IGD device 0000:00:02.0 cannot support legacy mode due to existing devices at address 1f.0
TASK OK提示只有一行
你的问题好像和楼上兄弟一样,把上一楼的命令运行一遍,然后复制输出的内容过来看下

TOP

这是我的运行结果说明以下,我还打了内核pcs补丁,跟你们的grub和iommu输出会有不同
但这个补丁不影响直通,我是在直通成功后才打的
引用:
root@J3455:~# cat /etc/default/grub
# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'

GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="Proxmox Virtual Environment"

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on pcie_acs_override=downstream video=efifbff,vesafbff"
引用:
cat /etc/pve/qemu-server/201.conf
agent: 1
args: -device vfio-pci,host=00:02.0,addr=0x02,x-igd-gms=1,romfile=J3455_HD500_HDMI1.72.bin
balloon: 0
bios: seabios
boot: cdn
bootdisk: sata0
cores: 2
hostpci0: 00:0e
memory: 4096
name: LibreELEC
net0: virtio=4A:2D:18:90:38:95,bridge=vmbr1
numa: 0
ostype: l26
sata0: local-lvm:vm-201-disk-0,size=32G
smbios1: uuid=ddb7edd1-9a48-43bf-88d7-718fcb86a0c6
sockets: 1
usb0: host=046d:c534
vga: none
vmgenid: dffbbe8f-2aff-49bf-b1a9-f2740392eec5
引用:
root@J3455:~# find /sys/kernel/iommu_groups/ -type l
/sys/kernel/iommu_groups/7/devices/0000:00:13.2
/sys/kernel/iommu_groups/15/devices/0000:04:00.0
/sys/kernel/iommu_groups/5/devices/0000:00:13.0
/sys/kernel/iommu_groups/13/devices/0000:02:00.1
/sys/kernel/iommu_groups/3/devices/0000:00:0f.0
/sys/kernel/iommu_groups/11/devices/0000:01:00.0
/sys/kernel/iommu_groups/1/devices/0000:00:02.0
/sys/kernel/iommu_groups/8/devices/0000:00:13.3
/sys/kernel/iommu_groups/6/devices/0000:00:13.1
/sys/kernel/iommu_groups/14/devices/0000:03:00.0
/sys/kernel/iommu_groups/4/devices/0000:00:12.0
/sys/kernel/iommu_groups/12/devices/0000:02:00.0
/sys/kernel/iommu_groups/2/devices/0000:00:0e.0
/sys/kernel/iommu_groups/10/devices/0000:00:1f.0
/sys/kernel/iommu_groups/10/devices/0000:00:1f.1
/sys/kernel/iommu_groups/0/devices/0000:00:00.0
/sys/kernel/iommu_groups/9/devices/0000:00:15.0

TOP

引用:
原帖由 ChinaBoyFF 于 2019-7-4 13:52 发表
已经正常了,这个坑好深
居然是因为我们太吝啬了,把内存放大到4GB就正常直通了
恭喜恭喜~没想到居然是因为这个问题,我的GPU内存一直都是开到最大的

TOP

引用:
原帖由 egbluecats 于 2019-7-4 18:35 发表
/etc/default/grub# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple conf ...
上的兄弟把GPU ram调大后搞定了,你也试试?

还有你的虚拟机配置里有两个参数没加上

TOP

引用:
原帖由 egbluecats 于 2019-7-4 19:00 发表

那也不是GPU ram 啊 调成4096也没用,还是之前的错误 我指的是Failed to mmap 0000:00:02.0 BAR 2. Performance may be slow
配置两个参数 是指的是args里的?反正那addr不能用。
把虚拟机内存分配到4G试试
IGD直通到虚拟机里的总线地址一定要在0x02,所以addr=0x02是必须的
x-igd-gms=1 这个参数如果不加会造成低于5G内存的虚拟机起不来

参考:https://patchwork.kernel.org/patch/9859317/

[ 本帖最后由 xif7456 于 2019-7-4 21:26 编辑 ]

TOP

引用:
原帖由 ChinaBoyFF 于 2019-7-4 20:09 发表
不知道对不对,我发现Libreelec启动时占用内存走到3G去了,还有就是SCSI控制器要选为默认的,不要用创建时自动选的VirtIO SCSI,我就改了就这两个,然后就直通正常了1075601
网卡可以换成virtio,e1000效率很差
还有cpu分配2个核心就够了

这是播放星际穿越4K原盘时的CPU占用


[ 本帖最后由 xif7456 于 2019-7-4 21:33 编辑 ]
附件: 您所在的用户组无法下载或查看附件

TOP

 32 123
发新话题
     
官方公众号及微博