服务器显卡直通和GPU问题分析_rdp 显卡负载-程序员宅基地

技术标签: radeon  驱动程序  amd  服务器  gpu  云计算  

从最开始买服务器的时候我就问了商家,能不能用显卡,商家答复厚度不超过2CM的刀卡是可以用的;并且在安装macOS的时候,我也发现3M的显存是真的不够用,上显卡的冲动再次涌上心头。

显卡适配关系

服务器作为比较特殊的设备,和普通PC不同,支持的显卡型号有限,以下为我从HPE官网找到的显卡适配关系,与其说是显卡,不如说是GPU,更偏向于计算,适合搞AI(所以一开始有朋友问我是不要开始搞大数据或者人工智能了,让大家失望了)。标红部分为已经查明的支持vGPU的显卡型号,也就是能按需分配给虚拟机。

 

这时我意识到,服务器有适配关系,那VMware ESXi是不是也有适配关系?我就找HPE的售后400工程师咨询了一下,大跌眼镜!直接丢给我一个查询配套关系的软件,下载原始链接如下:

http://h20195.www2.hpe.com/v2/redirect.aspx?/products/quickspecs/15033_div/15033_div.HTML

应该是GFW的原因,源链接打开失败,但是会跳转到一个新的链接:

http://h41370.www4.hpe.com/quickspecs/overview.html

这个是DL360 Gen9所有可扩展配置的配置表,最终查明这款机器只支持一款GPU:

HPE NVIDIA Quadro P4000 Graphics Accelerator

 

并且对电源有要求,好在我的500W电源应该是够用的。

 

上面的图里也有我查的价格,6500块差不多够我再买一台服务器了。并且咨询得知NVIDIA的显卡都涉及授权问题,之前的经验中NVIDIA会针对每个VDI(Virtual Desktop Infrastructure,约等于虚拟机)收取授权费用,大约为每个VDI每5年8000块;这么贵,不如直接去抢钱好了!

远程桌面

假设我是一个很有钱的工程师,我买了NVIDIA的显卡并且购买了授权。那我能不能实现在虚拟机里面打游戏呢?常规操作是不行的。

因为在使用windows远程桌面的时候,调用的不是虚拟机或者原主机的显卡。而是Windows 远程桌面虚拟的显示驱动,也就是说原本的物理显卡根本就没有调用过。微软的相关解释链接如下:

https://docs.microsoft.com/zh-cn/windows/win32/termserv/remote-desktop-protocol

部分说明如下(引用链接: Remote Desktop Protocol):
On the server, RDP uses its own video driver to render display output by constructing the rendering information into network packets by using RDP protocol and sending them over the network to the client. On the client, RDP receives rendering data and interprets the packets into corresponding Microsoft Windows graphics device interface (GDI) API calls. For the input path, client mouse and keyboard events are redirected from the client to the server. On the server, RDP uses its own keyboard and mouse driver to receive these keyboard and mouse events.

在服务器上,RDP通过使用RDP协议将渲染信息构造为网络数据包并将其通过网络发送到客户端,从而使用其自己的视频驱动程序来渲染显示输出。在客户端上,RDP接收渲染数据并将数据包解释为相应的Microsoft Windows图形设备接口(GDI)API调用。对于输入路径,客户端鼠标和键盘事件从客户端重定向到服务器。在服务器上,RDP使用其自己的键盘和鼠标驱动程序来接收这些键盘和鼠标事件。

这部分我在自己电脑上测试过,一台GT 740M(2G显存)显卡的电脑,打游戏帧率能到120帧以上;但是如果通过远程桌面来操作,会同时消耗本地PC的带宽和显卡资源。测试中使用无线网络时,占用十几兆的带宽资源游戏帧率也达不到10帧,已经卡成幻灯片了;当使用有线网络时,带宽占用超过50M时,帧率也没有达到30帧,操作还是会有卡顿。

 

说到这里,我对5G时代下的云端游戏功能产生了怀疑,我到底需要多大的带宽和多低的延迟才能远程打游戏?是不是有其他解决方案?

好像确实有,如果要调用vGPU,需要有特有的软件,才能启用物理显卡功能。现在新华三的CAS貌似有这个东西,远程桌面调用物理显卡。但是也可以用远程工具调用物理显卡,目前测试可行的就有向日葵、TeamViewer。比如说使用向日葵能达到和直接操作物理机比较接近的117 fps。

 

显卡直通

回到现实中,我没有那么多钱来买GPU和授权怎么办呢?我就不能让我的虚拟机用显卡了吗?

通过咨询专家还有上网查找资料,发现可以通过设置PCI设备直通来实现。简单地讲,就是把PCI插槽直接分配给虚拟机,这样的话,一定意义上就跳过了服务器的适配关系,直接在虚拟机上装驱动就可以了。

先检查一下ESXi是否支持。在ESXi管理页面,“管理”→“硬件”→“PCI设备”,选择PCI物理设备,再点击“切换直通”。可将PCI设备模式切换为直通模式(passthrough),这样就可以分配给主机了。

 

然后我就在京东上买了一块AMD的显卡(盈通的RX550,4G显存版本)。服务器的PCI扩展槽是这样的,主要是实现了将显卡从竖插变成了横插,同时将显卡厚度限制到了2CM。

 

插上显卡之后底面是这样的。

 

把PCI扩展插槽撞到服务器上,上面是这样的。

 

切换PCI直通模式

显卡就位之后开机,在iLO中的设备信息里面能看到识别到了显卡,显示信息为AMD Radeon。

 

登录VMware ESXi,在“管理”→“硬件”→“PCI设备”下面,要选择两个PCI物理设备(分别是图形和音频设备),再点击“切换直通”,这样显卡就切换到直通模式了。需要注意的是,切换直通之后需要重启服务器生效。

 

重启完成后,查看显卡的直通状态由“禁用”变成了“活动”。

 

虚拟机添加PCI设备

新建一台Windows7的虚拟机,与之前操作不同的是,现在可以添加“PCI设备”了。点击“添加其他设备”→“PCI设备”。

 

为避免出现问题,我两次添加设备,把显卡的图形设备和音频设备都添加上来了。

 

系统提示:添加PCI设备之后,需要为虚拟机预留所有内存才能启动,可以点击“预留所有内存”同步内存配置。最终虚拟机配置信息如下。

 

Windows7环境下尝试加载

启动虚拟机后发现视频设备是未识别的,首先通过安装VMware Tools可以解决基本系统设备的感叹号问题;VGA图形适配器则需要打设备驱动解决。

 

通过鲁大师检测硬件信息,硬件识别正常。

 

使用360驱动大师完成显卡和声卡的驱动更新。

 

发现有新的AMD Log Utility Driver设备未识别,上网查了一下,大概意思是说版本不匹配导致的。

 

那就去官网下一个匹配的吧,型号和操作系统都选好,下载好驱动;再把之前的驱动卸载。

 

AMD的最新驱动程序Radeon Software。

 

弹出信任驱动程序发布者的弹窗,一度让我认为快成功了。

 

实际上还是没有解决问题,很尴尬。

 

Windows10环境下尝试加载

我又想到Windows7去年停止维护了,是不是这个有影响?那就再装一台Windows10虚拟机,开机竟然直接识别了AMD的显卡。

 

装好VMware Tools之后,看上去好像没有问题了。

 

鲁大师硬件检测信息也正常了不少。

 

但是跑分性能极低!

 

更新驱动之后频率和带宽识别都不正常了。

 

搞得我有点慌了,赶紧找售后。售后先是答复显卡没有服务器的驱动,我说我装的Windows10操作系统;然后加了技术的QQ,技术一顿操作,还是解决不了显卡PCI-E速率和显卡速率不匹配的问题。呦呵,完蛋,可能还是和服务器PCI有关系,只能七天无理由退货了!

所以,没钱搞什么GPU?搞什么vGPU?搞什么显卡直通?只能友情提醒大家最近不要在京东买RX550这款显卡了,免得买到我退货的商品,显得尴尬!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/gtj0617/article/details/108441590

智能推荐

python青果教务系统抢课_名额不够,技术来凑,利用Python实现教务系统强制性抢课...-程序员宅基地

文章浏览阅读1.3k次。最近一学期一次的抢课大戏又来了,几家欢乐几家愁。O(∩_∩)O哈哈~(l我每次一选就过了hah,我还是有欧的时候滴)。看着他们盯着教务系统就着急,何况我们那教务系统,不想说什么。emmm 想周围的朋友,正好下午利用扩容前一段时间写了个小脚本帮助朋友抢课。(当然抢到了啦,^_^)私信小编001即可获取大量Python学习资料,名额有限因为时间不够,来不及仔细琢磨,我第一想法就是直接提交选课的数据包(..._青果教务系统抢课

windows 加 switchyomega + burp 抓https包-程序员宅基地

文章浏览阅读4.6k次。很简单,下载证书后导入到受信任根目录证书下载,直接在代理状态浏览器访问burp点击CA就可以下载了 设置该证书全部信任,,switchyomega 设置如下即可 就可以抓https的包了 ...

用C语言写循环赛日程表,循环赛的方法与编排-程序员宅基地

文章浏览阅读1k次。一、循环赛的种类与特点(一)循环赛的种类循环赛又称循环法。是指参赛队(或个人,下同)之间,都要互相轮流比赛,最后按照各参赛队在全部比赛中的胜负场数、得分多少排定名次的比赛方法。它在对抗性项目比赛中经常被采用。循环赛包括单循环、双循环或分组循环三种。单循环是所有参赛队(人)相互轮赛一次;双循环是所有参赛队(人)相互轮赛二次;分组循环是参赛队(人)较多时,采用种子法,把强队(人)分散在各组,先进行小组..._c语言循环赛互打一场比赛 甲队两胜

springboot项目访问html页面,发现端口不一致&继承WebMvcConfigurationSupport类会导致自动配置失效_springboot项目前端端口号不同怎么办-程序员宅基地

文章浏览阅读1.6k次,点赞4次,收藏6次。最后的解决方法“在config--WebMvcConfig中不要继承WebMvcConfigurationSupport,而是实现WebMvcConfigurer接口”,且不要在idea中直接点击浏览器图标打开对应的html页面,要自己在浏览器输入url。在本次debug过程中,更加清楚地明白了,springboot项目启动过程中,只扫描引导类同包或子包下的程序,而在resources目录下的静态资源文件(没放到),需要被映射,才能被扫描到。_springboot项目前端端口号不同怎么办

k8s.配置管理.configmap&secret_configmap @value-程序员宅基地

文章浏览阅读80次。configmap 和secret 都需要提前创建configmap和secret都可以为pod提供挂载和变量的方式变量的方式有envfrom全部变量和valuefrom单个变量的引用configmap和secret 需要和引用的pod或者资源对象在同一个ns下。_configmap @value

System.TypeInitializationException: 'The type initializer for 'MySql.Data.MySqlClient.Replication.Re...-程序员宅基地

文章浏览阅读2.2k次。下午在调试的时候报错数据库连接就报错我就很纳闷后面用原来的代码写发现还是报错System.TypeInitializationException:'The type initializer for 'MySql.Data.MySqlClient.Replication.ReplicationManager' threw an exception.'应该是出在Mysql包上的问题..._system.typeinitializationexception:““mysql.data.mysqlclient.mysqlpoolmanag

随便推点

二、RSA加密_ctf rsa 多个n和多个c-程序员宅基地

文章浏览阅读3.4k次。CTF中的RSA及攻击方法笔记1 数论基础1.1 模运算规则2 RSA相关题目2.1 已知 n,e,c 求 m2.2 已知 p,q,e 求 d2.3 已知dp,dq,c,p,q 求m2.4 仅已知c,c特别大 【c = m^e mod n】2.5 已知n1,n2,c1,c2,n 求 m2.6 已知n1,n2,e,c2 求m2.7 已知e,d,N 求p,q1 数论基础参考链接:https://www.freebuf.com/articles/web/257835.html1.1 模运算规则模运算与基_ctf rsa 多个n和多个c

mysql中把bigint类型转换为时间格式,与hive中unix_timestamp、FROM_UNIXTIME两个函数之间的区别_bigint转日期-程序员宅基地

文章浏览阅读2w次,点赞4次,收藏15次。数据库中时间类型是这样的,13位bigInt类型的数据select date_format(FROM_UNIXTIME(列名/1000),'%Y%m%d') from xx表原理就是把13位的时间格式/1000等于时间戳,使用FROM_UNIXTIME把时间戳转换成具体的日期ps:将时间转换为时间戳select unix_timestamp('2018-08-30..._bigint转日期

exit status 5: �ܾ����ʡ� exit status 1: ���_exit status 5: exit status 1:-程序员宅基地

文章浏览阅读1.1k次。使用nvm切换node版本出现上述乱码时。使用管理员模式打开CMD就可以解决了~_exit status 5: exit status 1:

对Java和Linux的认识,Java类的认识-程序员宅基地

文章浏览阅读279次。Java使用类来构造自己的数据类型,类其实就是对一类数据和行为的数据封装;可以达到低耦合功能;Java注意啦:用类也是我们为了定义自己数据类型的一种方法,所以结构体,共用体也是一样的;都是为了处理数据而用的方法!类的存放问题: java源代码文件是以类为中心的,一个类的定义源码必须只在一个源文件实现;一个“文件名.java”文件名必须与文件中用public class 修饰的类名一致,java语法..._linux和java

快给你的Vue项目添加一个编辑图片组件吧_vue-image-editor-程序员宅基地

文章浏览阅读8.2k次,点赞20次,收藏59次。快给你的Vue项目添加一个编辑图片组件吧给大家推荐一款功能极其强大的图片编辑插件 tui.image-editor快速体验首选在你的前端项目中安装:npm i tui-image-editor// oryarn add tui-image-editor现在你就去新建一个.vue文件,复制进去下面这段代码:<template> <div id="tui-image-editor"></div></template><scr_vue-image-editor

Flutter混合开发-Null check operator used on a null value_flutter null check operator used on a null value-程序员宅基地

文章浏览阅读4.8k次。标题Flutter与Android混编在Android与Flutter混编中导入flutter的GetX框架时,配置getPages参数出错,在编译时不报错,但是运行之后,debug模式下出现红底白色的错误,错误显示为 Null check operator used on a null value,看一眼懵了,本地开发版本使用的是flutter2,配置的Getx库也确实在很早的版本中就支持了Null safety ,且配置的getPages为数组并且可为空,按照常理怎么也不可能出现这个错误!尝试的方案_flutter null check operator used on a null value

推荐文章

热门文章

相关标签