用于多显卡在不同应用间的负载均衡方法及系统与流程

文档序号:29854254发布日期:2022-04-30 08:52阅读:404来源:国知局
用于多显卡在不同应用间的负载均衡方法及系统与流程

1.本公开属于计算机技术领域,尤其涉及一种用于多显卡在不同应用间的负载均衡方法及系统。


背景技术:

2.本部分的陈述仅仅是提供了与本公开相关的背景技术信息,不必然构成在先技术。
3.在云流化类型的业务系统中,3d应用、游戏等,都是运行在gpu服务器上,为了节省成本,往往是一台机器使用专用主板,安装4张或8张甚至10几张显卡,共用一台主机的cpu和内存,这样可以节省硬件成本、机柜托管成本,并且可以节约能耗、减排低碳,并且如果只有少部分3d应用在运行时,由于cpu和内存是可以集中在少量的这些应用上的,则速度可以有更好的体验。
4.但在云流化系统中,有个突出的难点就是:如何充分利用多张显卡的渲染能力,将显卡的算力负载均衡到多个应用中去。
5.windows操作系统对于一个用户会话只使用一张独立gpu显卡,即使操作系统可以识别到有多张gpu显卡,但如果不做其他额外工作,所有启动的应用,都会运行在一张独立显卡上,无法通过简单设置实现运行在多张显卡;目前在windows下指定某个应用由哪个显卡来渲染,并无相关资料和成熟的简便方法。
6.发明人发现,现今主流的云流化(云渲染、云游戏等)技术中,充分利用多张显卡实现负载均衡的方式,主要以下几类,且均存在诸多问题无法解决:
7.(1)需要应用开发者在开发时,就要支持多显卡的api处理,在启动时通过选择使用哪张显卡。这种方式受限于必须应用开发者配合,而且需要在编程研发阶段就要做多显卡兼容的工作。该方式很难满足云流化业务的需要,因为作为云流化厂商,是要兼容很多已经开发、生产出来的软件的,这些已经发布的、广为使用的应用,要求其开发者重新修改,是不现实的。
8.(2)基于对directx众多api接口进行hook的方式,该方式是通过对已有的3d应用,进行外挂式dll注入,修改其内部启动逻辑,在其调用d3d11createdevice等函数时,动态修改其原有的执行流程,指定一个对应的gpu显卡进入这些应用。这种方式对应用的兼容性存在问题,因为是基于外挂式注入,很多应用是有反注入、反外挂机制,这种方式就不可行;并且directx等调用相关gpu显卡的api函数众多,挨个去尝试注入,也是需要耗费很多时间的事情,不够简洁和稳定。
9.(3)采用一些虚拟化的方案,比如将每张gpu虚拟直通到一台单独的虚拟机中,这种方式就更为麻烦,而且虚拟化后,很多系统资源的使用,需要经过虚拟化中转一层,也造成了一定的资源损耗。
10.(4)从硬件层借助多显卡交火、sli等技术,通过硬件连接线,将多张显卡连接到一起,当一张显卡使用。但这种模式一方面要求所有显卡型号必须完全相同,有诸多限制;另
一方面,通过交火这种连接后,性能并不是两张显卡的叠加,比如显存等并不是叠加的效果,两张显卡连接后,可能只能起到1.5张显卡左右的性能效果,浪费了很多gpu算力。


技术实现要素:

11.本公开为了解决上述问题,提供了一种用于多显卡在不同应用间的负载均衡方法及系统,所述方案基于操作系统中内置的api接口,通过进行主显示设备切换的方式,实现了不同应用间的负载均衡;所述方案不需要侵入原有应用,也不需要复杂的虚拟化,更容易兼容各种应用,不存在兼容性问题。
12.根据本公开实施例的第一个方面,提供了一种用于多显卡在不同应用间的负载均衡方法,其用于安装有若干块显卡的服务器,在服务器内安装所有显卡的驱动程序,并为每张显卡连接独立的显示设备,所述方法包括:
13.基于操作系统内置的api函数,获取当前可用的显卡;
14.获取每张可用显卡所对应的显示设备信息及其负载情况;
15.基于所述属性信息,利用预设的均衡算法筛选出可用显卡中的最优显卡,并通过调用系统设置主显示设备属性的接口函数,将该显卡对应的显示设备设置为主显示设备;其中,每次启动待运行的应用,均需进行主显示设备的更新;
16.启动待运行的应用,所述应用利用主显示设备对应的显卡进行渲染。
17.进一步的,所述将该显卡对应的显示设备设置为主显示设备,具体为:将主显示设备坐标设置为(0,0),基于主显示设备的坐标及其尺寸,获得其他显示设备的坐标。
18.进一步的,所述基于操作系统内置的api函数,获取当前可用的显卡,所述api函数具体为changedisplaysettingsex。
19.进一步的,所述均衡算法采用轮询方法或最低负载优先算法,其中,所述轮询方法为每次启动待运行的应用时,按照显卡编号顺序进行使用;显卡数量不足时,从初始编号的显卡进行循环;所述最低负载有限算法为从所有可用显卡中选择负载最低的显卡。
20.进一步的,所述属性信息包括显卡对应的显示设备信息及其负载情况。
21.进一步的,所述显示设备可采用实际主显示设备或虚拟主显示设备,所述虚拟主显示设备采用显卡欺骗器。
22.根据本公开实施例的第二个方面,提供了一种用于多显卡在不同应用间的负载均衡系统,包括:
23.可用显卡获取单元,其用于基于操作系统内置的api函数,获取当前可用的显卡;
24.显卡属性获取单元,其用于获取每张可用显卡的属性信息;
25.主显示设备设置单元,其用于基于所述属性信息,利用预设的均衡算法筛选出可用显卡中的最优显卡,并通过调用系统设置主显示设备属性的接口函数,将该显卡对应的显示设备设置为主显示设备;其中,每次启动待运行的应用,均需进行主显示设备的更新;
26.渲染单元,其用于启动待运行的应用,所述应用利用主显示设备对应的显卡进行渲染。
27.根据本公开实施例的第三方面,提供了一种服务器,包括主板和处理器,所述主板上安装有若干张显卡,其处理器执行的应用程序在选择显卡进行渲染时,采用上述的一种用于多显卡在不同应用间的负载均衡方法。
28.根据本公开实施例的第四个方面,提供了一种电子设备,包括存储器、处理器及存储在存储器上运行的计算机程序,所述处理器执行所述程序时实现所述的一种用于多显卡在不同应用间的负载均衡方法。
29.根据本公开实施例的第五个方面,提供了一种非暂态计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现所述的一种基于动静检测结合的会议轮询中人体目标检测方法一种用于多显卡在不同应用间的负载均衡方法。
30.与现有技术相比,本公开的有益效果是:
31.(1)本公开提供了一种用于多显卡在不同应用间的负载均衡方法及系统,其提供了一种极为简单便捷的切换不同独立显卡,执行不同应用的方法,该方法相比目前已有的其他方法,只需要简单的几个函数调用,在便捷性上极具优势;同时,本方法基于的是windows的一些api使用,不需要侵入原有应用,也不需要复杂的虚拟化,所以更容易兼容各种应用,不存在兼容性问题;
32.(2)本公开所述方案结合显卡欺骗器,以及主显示器的相关设置,就可以实现gpu切换。
33.本公开附加方面的优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本公开的实践了解到。
附图说明
34.构成本公开的一部分的说明书附图用来提供对本公开的进一步理解,本公开的示意性实施例及其说明用于解释本公开,并不构成对本公开的不当限定。
35.图1为本公开实施例一中所述的一种用于多显卡在不同应用间的负载均衡方法流程图;
36.图2为本公开实施例一中所述的主显示设备设置原理示意图。
具体实施方式
37.下面结合附图与实施例对本公开做进一步说明。
38.应该指出,以下详细说明都是示例性的,旨在对本公开提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本公开所属技术领域的普通技术人员通常理解的相同含义。
39.需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本公开的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。
40.在不冲突的情况下,本公开中的实施例及实施例中的特征可以相互组合。
41.实施例一:
42.本实施例的目的是提供一种用于多显卡在不同应用间的负载均衡方法,其用于安装有若干块显卡的服务器,在服务器内安装所有显卡的驱动程序,并为每张显卡连接独立的显示设备,所述方法包括:
43.基于操作系统内置的api函数,获取当前可用的显卡;
44.获取每张可用显卡所对应的显示设备信息及其负载情况;
45.基于所述属性信息,利用预设的均衡算法筛选出可用显卡中的最优显卡,并通过调用系统设置主显示设备属性的接口函数,将该显卡对应的显示设备设置为主显示设备;其中,每次启动待运行的应用,均需进行主显示设备的更新;
46.启动待运行的应用,所述应用利用主显示设备对应的显卡进行渲染。
47.进一步的,所述将该显卡对应的显示设备设置为主显示设备,具体为:将主显示设备坐标设置为(0,0),基于主显示设备的坐标及其尺寸,获得其他显示设备的坐标。
48.进一步的,所述基于操作系统内置的api函数,获取当前可用的显卡,所述api函数具体为changedisplaysettingsex。
49.进一步的,所述均衡算法采用轮询方法或最低负载优先算法,其中,所述轮询方法为每次启动待运行的应用时,按照显卡编号顺序进行使用;显卡数量不足时,从初始编号的显卡进行循环;所述最低负载有限算法为从所有可用显卡中选择负载最低的显卡。
50.进一步的,所述属性信息包括显卡对应的显示设备信息及其负载情况。
51.进一步的,所述显示设备可采用实际主显示设备或虚拟主显示设备,所述虚拟主显示设备采用显卡欺骗器。
52.具体的,为了便于理解,以下结合附图对本公开所述方案进行详细说明:
53.为了解决现有技术存在的问题,本公开提供了一种用于多显卡在不同应用间的负载均衡方法,包括如下步骤:
54.步骤1:安装所有显卡的驱动程序;
55.步骤2:每张显卡插一台主显示设备,考虑到机房idc托管插入主显示设备不方便,也可以直接插入“显卡欺骗器”等虚拟成主显示设备的硬件设备(京东等电子商城均有销售)。
56.步骤3:在windows操作系统中,使用enumdisplaydevices等枚举显卡列表的系统api函数,枚举当前可用显卡;
57.作为可选择的实施方式,还可以选择英伟达等显卡厂商的sdk中的相关函数,进行显卡的列举;
58.其中,所述可用显卡具体含义为:有些显卡如果没插入显卡欺骗器,或者是机器上安装了某种虚拟的显卡驱动,则可能虽然可以被枚举出来,但状态是:不可用;所以在枚举时,通过状态是否可用,过滤掉这些不可用的显卡,最终获得的显卡为可用显卡;
59.步骤4:获取每张显卡上所对接的主显示设备的坐标位置、长宽等信息;其获取方法采用系统内置的enumdisplaysettingsapi函数;
60.步骤5:获取每张显卡当前的使用率等负载情况;其中,所述显卡负载情况基于显卡厂家的sdk的函数,获取显卡的负载情况;例如:英伟达显卡,基于nvmldevicegetutilizationrates函数来获取当前负载情况(即显卡使用率);
61.步骤6:基于轮询或者最低负载优先等均衡算法,选出某张显卡n,再找到其对应的任意一台主显示设备,对该主显示设备调用系统设置主显示设备属性的api函数:changedisplaysettingsex,将其设置为主主显示设备,并且主主显示设备坐标务必为0,0,其他主显示设备为更好的效果,需保持布局不变,依据其相对主主显示设备的坐标,结合主显示设备的长宽等计算相应的位置,在主主显示设备左边的为负数坐标,右边的为正数坐
标,一起设置到该api函数,具体原理如图2所示;
62.其中,对所述轮询的含义进行解释,例如:第一次启动应用使用第一张;第二次启动使用第二张,如果一共4张,那么第5次又从第一张开始,按顺序来;所述最低负载优先为:每次启动一个应用之前,找当前负载率最低的显卡。永远选负载率最低的一个启动。
63.步骤7:启动要运行的应用,则该应用将会自动使用显卡n的运算资源做渲染。
64.进一步的,本公开所述方案的创新点在于:设置了主主显示设备后,主主显示设备所连接的显卡被操作系统当成当前要渲染用的显卡;此时,启动任意应用,都会在该显卡上渲染。如果该显卡启动了一些程序后,负载比较高,会切换主主显示设备到另一张显卡所接的主显示设备上,则随后再启动的程序,就都跑在另一张显卡上。
65.实施例二:
66.本实施例的目的是提供一种用于多显卡在不同应用间的负载均衡系统。
67.一种用于多显卡在不同应用间的负载均衡系统,包括:
68.可用显卡获取单元,其用于基于操作系统内置的api函数,获取当前可用的显卡;
69.显卡属性获取单元,其用于获取每张可用显卡的属性信息;
70.主显示设备设置单元,其用于基于所述属性信息,利用预设的均衡算法筛选出可用显卡中的最优显卡,并通过调用系统设置主显示设备属性的接口函数,将该显卡对应的显示设备设置为主显示设备;其中,每次启动待运行的应用,均需进行主显示设备的更新;
71.渲染单元,其用于启动待运行的应用,所述应用利用主显示设备对应的显卡进行渲染。
72.实施例三:
73.本实施例的目的是提供一种服务器。
74.一种服务器,包括主板和处理器,所述主板上安装有若干张显卡,其处理器执行的应用程序在选择显卡进行渲染时,采用上述的一种用于多显卡在不同应用间的负载均衡方法。
75.在更多实施例中,还提供:
76.一种电子设备,包括存储器和处理器以及存储在存储器上并在处理器上运行的计算机指令,所述计算机指令被处理器运行时,完成实施例一中所述的方法。为了简洁,在此不再赘述。
77.应理解,本实施例中,处理器可以是中央处理单元cpu,处理器还可以是其他通用处理器、数字信号处理器dsp、专用集成电路asic,现成可编程门阵列fpga或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
78.存储器可以包括只读存储器和随机存取存储器,并向处理器提供指令和数据、存储器的一部分还可以包括非易失性随机存储器。例如,存储器还可以存储设备类型的信息。
79.一种计算机可读存储介质,用于存储计算机指令,所述计算机指令被处理器执行时,完成实施例一中所述的方法。
80.实施例一中的方法可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器、闪存、只读存储器、可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于
存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。为避免重复,这里不再详细描述。
81.本领域普通技术人员可以意识到,结合本实施例描述的各示例的单元即算法步骤,能够以电子硬件或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本公开的范围。
82.上述实施例提供的一种用于多显卡在不同应用间的负载均衡方法及系统可以实现,具有广阔的应用前景。
83.以上所述仅为本公开的优选实施例而已,并不用于限制本公开,对于本领域的技术人员来说,本公开可以有各种更改和变化。凡在本公开的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1