x2go - nxagent的CPU占用为什么这么高?

1. 我在本地客户端做了一个测试:

本地客户端(若没有以+iglx启动服务器)默认直接硬件加速渲染,运行glxgears,cpu占用比较低。当我更改为直接软件渲染,cpu飙升至200%,且识别的openGL显示为vmware。到这里我搞明白了为什么昨天在 x2go中为什么识别的openGL是vmware,因为在x2go中就是做的远端软件渲染,这也是为什么远端客户端cpu飙高的原因。

2. 实验:

(1):

173主机拥有nvidia显卡,通过ssh -X 连接到171主机,glxinfo : direct rendering : No, OpenGL rendering string: GeForce GT 1030/PCIe/SSE2,运行glxgears测试CPU占用和网络流量,171端glxgears的CPU占用较低,173Xorg的CPU占用相对来说比较高,而此时网络上的流量为3-5MB/s。

(2):

当添加环境变量export XXX/libgl-xlib:${LD_LIBRARY_PATH}后(这是自己安装的一个mesa,export后提供了此mesa的libGL.so库的路径),glxinfo : direct rendering: YES ,openGL vender : vmware,OpenGL rendering string: llvmpipe,也就是在171端做直接软件渲染。测试,171端glxgears的CPU占用彪高至140%左右(相比于之前间接硬件渲染glxegars才为10-30%左右来说已经相差太多)。173端Xorg的CPU占用相对来说变得小很多,(而此时网络上的流量达到了70-80MB/s)。

这两个实验验证了我的想法:

x2goclient连接x2goserver后,识别到的openGL驱动是vmware,而且direct rendering : yes,OpenGL rendering string : llvmpipe也就是做的直接软件渲染。所以x2oserver端x2goagent占用的CPU占用非常高。

但是,这里又有一个疑问点:此时的网络流量却非常低,按照上面(1)的实验的分析,网络流量应该飚的很高才对。

我分析了两个原因:

  1. 因为直接软件渲染在x2goserver端做,那么发送到x2goclient端关于图形的数据必定会增多,但是nxagent本身就是能够压缩缓存的,而(1)没有做这样的压缩,所以CPU使用率会低得多,在x2go上网络流量比较低。

  2. 可能存在着“两层”架构,“两层”是我自己逻辑出来的一个词,就是说本身client端和server端都存在着xserver,这里nxagent显示到x2goserver端,这是外一层,可能采用的是实验一的方式间接硬件渲染,而cinnamon桌面内部是里面一层,采用的方式是实验二的方式直接软件渲染。x2go官方文档有一句话:”On Linux, the client part of X2Go uses the local Xorg server"

这里提出一点我自己的想法:

压缩缓存能够降低网络上的流量节省带宽,但是cpu占用高还是因为客户端软件渲染造成。

所以,我想知道x2go是如何进行X显示然后如何识别openGL的,X2go官方:“X2Go uses NX libraries by NoMachine for X Display”,所以到nomachie官方去追踪信息。

nomachie官方:“在NX 3.5.0中,OpenGL应用程序可以使用GLX扩展,但实际上只使用间接渲染。为了能够实现显示迁移和会话弹性等功能,NX需要使用MESA库在相应的图形输出中转换GLX原语。在这种情况下,应用程序无法直接使用硬件。”

但是nomachie它又说:”对于特殊应用,例如工程和CAD应用程序,通过设置nomachine 远程桌面客户端“disable x agent”,可以更改NX配置将OpenGL硬件直接提供给X应用程序:”。 x2go采用nx协议,使用nx-lib库,也就是说也有这个接口。但是x2goclient的GUI并没有此“disable x agent”选项。

在ubuntu FAQ中,网友回答了:“x2go 不使用任何GPU硬件。。。。对于生产力应用程序,通过适当调整压缩和可用带宽,x2go表现非常出色。”。

这个回答又让我把注意力转移到了x2go的GUI上,在Session preference -> Connection上果然有compression选项。通过调节压缩method 可使得 x2goagent的cpu使用率明显降低。(如默认为16m-jpeg,nxagent的cpu占用为80-90%,但是更改为8-tight,nxagent的cpu占用为10-20%,这都是正常使用产生的值,而且画面效果还不错,速度也还好,只是带宽稍微高了一些达到30-50MB/s)。这正好应验了网友所说的:“通过适当调整压缩和可用带宽,x2go表现非常出色”。
x2go - nxagent的CPU占用为什么这么高?_第1张图片
x2goclient默认是高质量的压缩16m-jpeg,我觉得这是针对个人使用远端x2goserver来设定的,cpu占用很高,但是对于多人使用就不合理了。适当的选择压缩方式降低cpu占用才是我们解决问题的办法。

所以通过这一系列的信息,确实能够通过改变压缩大大降低nxagent的cpu使用率,我上面提出的想法显然需要更改一下,cpu占用高很有可能是因为压缩图像造成,但也不排除软件渲染。

你可能感兴趣的:(linux,网络)