Linux+梅萨+OpenGL:测量应用程序的已分配视频内存量

n9vozmp4  于 2023-03-18  发布在  Linux
关注(0)|答案(1)|浏览(185)

问题

我目前正在寻找一个命令或工具(或其他东西),让我能够轻松地测量运行在Linux上的OpenGL应用程序的已分配视频内存量。具体来说,我正在使用Software-MESA驱动程序,目标是测量大型应用程序的一些代码和库更改的影响。
我已经知道我的程序版本之间有一些很大的差异,但现在我发现读取“已用内存”的唯一方法是使用nvidia-smi等图形卡特定命令。这不是一个非常便携或“易于自动化的方式”,因为这些工具需要手动解释,也需要我在硬件上运行所有内容-而不是使用软件梅萨驱动程序!
因此,这里的问题在一个简单的(更多细节如下):

  • 在Linux上的X11+OpenGL架构下,是否有可能准确地做到这一点?
  • 在Linux上测量视频内存使用的可移植选项(或者也可以是不可移植选项)是什么?

在Linux上的X11+OpenGL架构下,是否有可能准确地完成此操作?

我对此感到疑惑,因为据我所知,图形上下文将从X11请求(或者你的帧缓冲区或者其他什么--我用的是Xvfb),它会把OpenGL上下文和你的应用程序关联起来。存储器分配可能在X11服务器级别上完成并且不能容易地关联回单个应用程序。然而,这可能与梅萨OpenGL的软件实现完全不同,在这种情况下,一切都是在应用程序中完成的?!我实际上不知道...
在任何情况下,都可以通过跟踪OpenGL API调用并对所有缓冲区分配进行求和,在某种程度上近似应用程序的OpenGL相关显存使用。我假设GALLIUM_HUD会有一个选项,但在调用GALLIUM_HUD=help glxgears时,我在列表中找不到任何显存相关选项。只有一堆传感器、温度、fps、cpufreq...根本没有内存测量...
或许还有别的原因,我漏掉了什么?

在Linux上测量视频内存使用的可移植选项(或者也可以是不可移植选项)有哪些?

为了测量Linux上的“一般视频内存使用”,我知道一个工具,例如,与我的NVIDIA卡:

然而,这些工具依赖于我有一个nvidia卡。我想避免“在我的开发机器上工作”的问题,但是。另外:这取决于NVIDIA的功能,对于我部署的应用程序,我尝试使用Software-MESA驱动程序,两种OpenGL实现之间的有效内存负载可能不同!
因此,这些工具不是很好地工作。当然,作为近似值已经足够好了,也是我现在唯一知道可以使用的东西!
但也许还有其他的?有没有什么或一些“技巧”,也许跟踪/valgrind的内存使用软件梅萨?也许一些其他的工具或选项的OpenGL层?也许有人知道一些东西,让我做一些更好的形式的剖析,而不是解释nvidia-smi输出手动!
就是这样,欢迎帮助!我会回去跟踪一些nvidia-smi日志,直到那时-

jgovgodb

jgovgodb1#

使用ATI_meminfo和/或NVX_gpu_memory_info在程序启动时获取GL空闲内存(“A”),然后在需要当前分配时再次获取(“B”)。A - B是实际分配的内存。
Radeon RX 6700 XT上的梅萨22.3.3同时支持ATI_meminfoNVX_gpu_memory_info

$ glxinfo
...
Extended renderer info (GLX_MESA_query_renderer):
    Vendor: AMD (0x1002)
    Device: AMD Radeon RX 6700 XT (navi22, LLVM 15.0.6, DRM 3.49, 6.1.0-5-amd64) (0x73df)
    Version: 22.3.3
    Accelerated: yes
    Video memory: 12288MB
    Unified memory: no
    Preferred profile: core (0x1)
    Max core profile version: 4.6
    Max compat profile version: 4.6
    Max GLES1 profile version: 1.1
    Max GLES[23] profile version: 3.2
Memory info (GL_ATI_meminfo):
    VBO free memory - total: 11410 MB, largest block: 11410 MB
    VBO free aux. memory - total: 15549 MB, largest block: 15549 MB
    Texture free memory - total: 11410 MB, largest block: 11410 MB
    Texture free aux. memory - total: 15549 MB, largest block: 15549 MB
    Renderbuffer free memory - total: 11410 MB, largest block: 11410 MB
    Renderbuffer free aux. memory - total: 15549 MB, largest block: 15549 MB
Memory info (GL_NVX_gpu_memory_info):
    Dedicated video memory: 12288 MB
    Total available memory: 28301 MB
    Currently available dedicated video memory: 11410 MB
OpenGL vendor string: AMD
OpenGL renderer string: AMD Radeon RX 6700 XT (navi22, LLVM 15.0.6, DRM 3.49, 6.1.0-5-amd64)
OpenGL core profile version string: 4.6 (Core Profile) Mesa 22.3.3
OpenGL core profile shading language version string: 4.60
...

然而,当经由LIBGL_ALWAYS_SOFTWARE=true强制软件渲染时,这些扩展被 * 不 * 报告;它所能做的最好的是GLX_MESA_query_rendererGLX_RENDERER_VIDEO_MEMORY_MESAVideo memory:线):

$ LIBGL_ALWAYS_SOFTWARE=1 glxinfo
...
Extended renderer info (GLX_MESA_query_renderer):
    Vendor: Mesa/X.org (0xffffffff)
    Device: llvmpipe (LLVM 15.0.6, 256 bits) (0xffffffff)
    Version: 22.3.3
    Accelerated: no
    Video memory: 32026MB
    Unified memory: yes
    Preferred profile: core (0x1)
    Max core profile version: 4.5
    Max compat profile version: 4.5
    Max GLES1 profile version: 1.1
    Max GLES[23] profile version: 3.2
OpenGL vendor string: Mesa/X.org
OpenGL renderer string: llvmpipe (LLVM 15.0.6, 256 bits)
OpenGL core profile version string: 4.5 (Core Profile) Mesa 22.3.3
OpenGL core profile shading language version string: 4.50
...

相关问题