带你读《弹性计算技术指导及场景应用》——1. 单实例上运行Linux桌面多开解决方案(1)

简介: 带你读《弹性计算技术指导及场景应用》——1. 单实例上运行Linux桌面多开解决方案(1)

简介:客户前期使用的旧异构实例面临更新换代,新的推荐异构实例性能更强,客户的业务软件运行时,GPU使用率不高,需要探索多开方案,提高GPU使用率,提高实例性价比。

背景:客户前期使用的旧异构实例面临更新换代,新的推荐异构实例性能更强,客户的业务软件运行时,GPU使用率不高,需要探索多开方案,提高GPU使用率,提高实例性价比。此外,客户的业务软件多开后,必然涉及到多开的每个业务软件分别给不同的用户使用的场景,因此,在一个桌面中多开业务软件的方案不可行(操作及画面显示均互相冲突),需要探索整个Linux桌面多开的方案。

Linux图形应用容器化

在不考虑桌面多开时,参考阿里云官方文档Linux图形应用最佳实践Linux图形应用容器化时,有两种方案:

1)Host(注:此处的Host是相对于容器来说的,容器为Guest,下文不再作重复解释)上运行X ServerHost上安装并启动Xorg,将X Serverunix socket目录(/tmp/.X11-unix)映射到容器中并设置好权限,容器中设置好DISPLAY环境变量后,即可通过共享的unix socketHost上的X Server发送图像渲染命令。此方案下,如果要查看显示结果,可以在Host上运行x11vnc,然后使用VNC Client软件连接。

该方案优缺点:

∙        优点:多个容器可以同时共享Host上的X Server

∙        缺点:多个容器的图像都是渲染到同一个X Server上的,互相之间会遮挡影响;

2)在容器中运行X ServerHost上只需要安装GPU驱动,不做任何配置,在容器中安装并运行Xorg

该方案优缺点:

∙        优点:Host不用做任何配置,定制修改都在容器中,便于保存和迁移;

∙        缺点:GPU是单个容器独占的,不能多个容器共享;

Linux桌面多开方案

单显卡上启动多个X Server进程实现多开

测试了三种方案:

∙        Host上运行多个X Server进程;

∙        Host上和容器中同时运行X Server进程;

∙        Host上不运行X Server,在多个容器中同时运行X Server进程;

均不成功,后启动的X Server会接管硬件,使得后启动的X Server画面正常,而先启动的X Server画面黑屏。

Multiseat方案

Multiseat方案(MultiseatXMultiseatOneCardMultiseat - X.OrgMultiSeatTerminal – X.orgMultiseat - Gentoo Wiki)是在多个显卡或者单个显卡的多个输出的基础上,实现多个独立桌面的方案,它受硬件的限制较大,多开数量有限,配置也相对复杂,暂不考虑该方案。

Xephyr方案

Xephyr是一个嵌套的X Server,它本身运行在X Server中,对X Server来说它是一个应用程序,同时,它自身又是一个X Server,为其他的应用提供服务。

Xephyr方案的最大缺点是,目前不支持GPU硬件加速。

Xpra方案

XpraXephyr类似,是嵌套的X Server,主要区别是,Xephyr会将它提供的嵌套X Server作为一个窗口显示在当前X Server中,而Xpra倾向于提供一个虚拟的X Server环境,将显示转发到客户端去。参考:What's the difference between Xpra and Xephyr?

Xephyr一样,Xpra的最大缺点也是,不支持GPU硬件加速。

VirtualGL方案

方案描述:

VirtualGL官方文档)是一个为Linux/Unix远程显示软件启用OpenGL硬件加速的开源工具。

通常,一个Linux/Unix OpenGL应用程序会发送它所有的(包括2D3D)图形渲染命令和数据到一个X ServerVirtualGL通过在运行时将动态共享对象(Dynamic Shared Object, DSO) VirtualGL Faker预加载到OpenGL应用程序中来实现将3D命令和数据从OpenGL应用程序重定向到应用所在服务器中的GPUVirtualGL Faker拦截并修改某些GLXEGLOpenGLX11XCB函数调用,将OpenGL渲染从3D应用程序的窗口转移到VirtualGLGPU显存中创建的离屏缓冲区(off-screen buffer)

3D应用程序交换OpenGL绘图缓冲区或刷新OpenGL命令缓冲区以表示它已完成渲染帧时,VirtualGL从离屏缓冲区读取渲染好的帧并(通过X Proxy,比如TurboVNC)将它传输出去。

使用VirtualGL时,GPU可以给多个用户共享。

VirtualGL方案的很大一个优点是它的非侵入性。VirtualGL监视一些X11命令和事件,以确定窗口何时被调整大小等等,但它不会以任何方式干扰X11 2D绘图命令到X Server的传递。在大多数情况下,VirtualGL也不会干扰OpenGL命令到GPU的传递。VirtualGL只是强制将OpenGL命令传递给应用服务器上的GPU(通过3D X Server或与GPUEGL设备),而不是传递给2D绘图命令的X Server(2D X Server)。

VirtualGL内建支持两种图像传输协议(还支持协议扩展),VGL传输协议和X11传输协议。

VGL传输协议

2D X Server不在应用程序服务器上时(比如2D X Server运行在客户端机器上),最常使用VGL传输协议。VirtualGL在专用的TCP socket上使用自己的(VGL)协议将渲染的帧发送到客户端,VirtualGL客户端将帧解码并将它们组合到适当的X窗口中。VGL传输协议可以以未压缩的形式(RGB编码)传输帧,也可以使用high-speed JPEG编解码器实时压缩帧。它还支持立体图像对的交付,可以通过VirtualGL客户端将其重建为立体帧。整个框架如下图所示。

image.png

1 VirtualGL使用VGL传输协议框架图

X11传输协议

X11传输协议本身只是使用XPutImage()或类似的X11命令将渲染好的帧绘制到适当的X窗口中。在使用X11传输协议时,VirtualGL本身通常不执行任何图像压缩或编码。相反,它依赖于一个X Proxy(比如VNC)来编码帧并将它们交付给客户端。由于使用X Proxy不需要通过网络发送X11命令,因此在高延迟或者低带宽网络上使用VirtualGL时推荐使用X11传输协议。整个框架如下图所示。

image.png

2 VirtualGL使用X11传输协议框架图



相对来说,VGL协议设置更复杂(客户端需要同时安装2D X ServerVirtualGL Client),且通过网络传输X11命令,受网络影响更大,因此本文后续选择使用X11传输协议。

VirtualGLBackend

1和图 2中的绿色线条表示VirtualGL支持两种BackendGLXEGLVirtualGL最初只支持GLX Backend,它需要一个运行的3D X Server(最常见的如Xorg),多个用户通过VirtualGL共享GPU时,由于它们都具有X Server访问权限,会存在互相影响以及安全问题。从0版本开始,VirtualGL支持了EGL Backend,使得VirtualGL脱离了对3D X Server的依赖。

安装与设置

本文安装环境为阿里云ecs.gn7i-c8g2xlarge实例,Host OSUbuntu 18.04。

使用GLX Backend

Host安装与设置

Host上安装与设置步骤如下:

∙        安装Xorg、桌面环境(本文安装xfce4)、x11vnc

∙        安装NVIDIA驱动;

∙        启动X Server(Xorg)

∙        启动xfce4桌面;

∙        启动x11vnc Server

∙        安装nvidia-docker2

∙        下载NVIDIA官方docker镜像(比如nvidia/cuda:14.3-base-ubuntu18.04);

∙        启动容器(启动时,需要将/tmp/.X11-unix映射到容器中);

 

容器安装与设置

容器中安装与设置步骤如下:

∙        安装桌面环境(本文安装xfce4);

∙        VirtualGL官方网站下载VirtualGLTurboVNC安装包进行安装;

∙        配置VirtualGL/opt/VirtualGL/bin/vglserver_config -config +s +f +t

∙        安装NVIDIA用户态驱动(容器中安装驱动时,不要安装内核态驱动),命令示例:./NVIDIA-Linux-x86_64-470.80run -a -q --ui=none --no-kernel-module

∙        启动运行TurboVNC

export TVNC_VGLRUN="vglrun -d :0 +wm"

/opt/TurboVNC/bin/vncserver -wm xfce -vgl -geometry 1920x1080 -depth 24

其中:0对应Host上创建的桌面监听的DISPLAY;

然后,客户端下载TurboVNC,使用TurboVNC Viewer连接容器中TurboVNC监听的端口即可看到桌面。


带你读《弹性计算技术指导及场景应用》——1. 单实例上运行Linux桌面多开解决方案(2):https://developer.aliyun.com/article/1423691

相关实践学习
在云上部署ChatGLM2-6B大模型(GPU版)
ChatGLM2-6B是由智谱AI及清华KEG实验室于2023年6月发布的中英双语对话开源大模型。通过本实验,可以学习如何配置AIGC开发环境,如何部署ChatGLM2-6B大模型。
相关文章
|
2月前
|
Linux 虚拟化 iOS开发
VMware Remote Console 13.0.1 for macOS, Linux, Windows - vSphere 虚拟机控制台的桌面客户端
VMware Remote Console 13.0.1 for macOS, Linux, Windows - vSphere 虚拟机控制台的桌面客户端
530 0
VMware Remote Console 13.0.1 for macOS, Linux, Windows - vSphere 虚拟机控制台的桌面客户端
|
3月前
|
安全 Linux iOS开发
Tenable Nessus 10.10 (macOS, Linux, Windows) - 漏洞评估解决方案
Tenable Nessus 10.10 (macOS, Linux, Windows) - 漏洞评估解决方案
353 0
Tenable Nessus 10.10 (macOS, Linux, Windows) - 漏洞评估解决方案
|
4月前
|
安全 Linux iOS开发
Tenable Nessus 10.9.3 (macOS, Linux, Windows) - 漏洞评估解决方案
Tenable Nessus 10.9.3 (macOS, Linux, Windows) - 漏洞评估解决方案
513 0
Tenable Nessus 10.9.3 (macOS, Linux, Windows) - 漏洞评估解决方案
|
Linux 数据库 iOS开发
CrossOver 25.1.0 for macOS & Linux - 领先的 Wine 解决方案
CrossOver 25.1.0 for macOS & Linux - 领先的 Wine 解决方案
444 0
|
4月前
|
Ubuntu 安全 小程序
linux|ubuntu.v18.10版本即将发布,linux桌面让您动心
如果你使用闭源系统,那永远也就别想了!有了这样的需求,也许最终将linux带到人类大众通用市场的是我们中国!
138 0
|
4月前
|
Ubuntu Linux 图形学
Linux学习之Linux桌面系统有哪些?
Cinnamon:与MATE类似,Cinnamon 拥有 GNOME 和 Unity 等其它桌面环境所没有的种种功能,是高度可定制的桌面环境,不需要任何外部插件、窗口组件和调整工具来定制桌面。
228 0
|
4月前
|
Linux iOS开发 开发者
Linux桌面版,又被喷了!
罗马不是一天建成的,想要拥有更多的大众用户,在市场份额突破个位数,就需要虚心倾听他们的声音,学习赛道中的优秀者。
|
4月前
|
Ubuntu Unix Linux
24款Linux桌面,有没有你的最爱?
如果您不知所措,请记住台式机是可选的。除了发行版附带的内容外,没有其他尝试的义务。许多Linux的高级用户对Linux发行版摆设的任何桌面都是满意的。重要的是要获得可与您的计算机一起使用的Linux安装,并花一些时间来学习它的工作方式。最终,所有台式机都只能做同一件事:帮助您组织和管理重要数据。但是,如果您已经了解了有关默认桌面的所有知识,那么现在您可以在周末做多种尝试,并为您最喜欢的一款Linux桌面投上一票。
|
3月前
|
Linux 应用服务中间件 Shell
二、Linux文本处理与文件操作核心命令
熟悉了Linux的基本“行走”后,就该拿起真正的“工具”干活了。用grep这个“放大镜”在文件里搜索内容,用find这个“探测器”在系统中寻找文件,再用tar把东西打包带走。最关键的是要学会使用管道符|,它像一条流水线,能把这些命令串联起来,让简单工具组合出强大的功能,比如 ps -ef | grep 'nginx' 就能快速找出nginx进程。
475 1
二、Linux文本处理与文件操作核心命令

热门文章

最新文章