从 intel_gpu_top 获取输出作为 bash 中的变量

从 intel_gpu_top 获取输出作为 bash 中的变量

通常使用 grep 就可以解决问题

sudo intel_gpu_top | grep xyz

但在这种情况下,intel_gpu_top 就像 htop 并且不断运行。

我如何在 bash 脚本中提取所需的信息?

我想了解我的平均 iGPU 使用情况,这似乎是唯一可以做到这一点的工具。虽然有一个选项可以将结果输出到文件中,但sudo intel_gpu_top -o file.txt它的制作相当奇怪,它具有不同的统计数据,并且它不会手动覆盖旧结果,而是向文件添加更多内容,从而很难从该文件中读取所需的信息(至少对于像我这样的 bash 新手来说)

编辑:

这是输出sudo intel_gpu_top -o test.txt

Freq MHz      IRQ RC6 Power     IMC MiB/s           RCS/0           BCS/0           VCS/0          VECS/0
 req  act       /s   %     W     rd     wr       %  se  wa       %  se  wa       %  se  wa       %  se  wa
   0    0        0   0  0.00    170     48    0.00   0   0    0.00   0   0    0.00   0   0    0.00   0   0
   6    6       12  99  0.01    545    134    0.81   0   0    0.00   0   0    0.00   0   0    0.00   0   0
   9    9       14  98  0.01    411     78    1.14   0   0    0.00   0   0    0.00   0   0    0.00   0   0
   5    5       10  99  0.01    436     74    0.72   0   0    0.00   0   0    0.00   0   0    0.00   0   0
  12   12       21  98  0.01    431    100    0.76   0   0    0.00   0   0    0.00   0   0    0.00   0   0
   3    3        8 100  0.00    391     52    0.16   0   0    0.00   0   0    0.00   0   0    0.00   0   0

从 sudo intel_gpu_top 开始,不要忘记这将显示为 htop 或 top

intel-gpu-top -    9/   9 MHz;   98% RC6;  0.02 Watts;       17 irqs/s

      IMC reads:      732 MiB/s
     IMC writes:      247 MiB/s

          ENGINE      BUSY                                                                                             MI_SEMA MI_WAIT
     Render/3D/0    1.65% |█▍                                                                                        |      0%      0%
       Blitter/0    0.00% |                                                                                          |      0%      0%
         Video/0    0.00% |                                                                                          |      0%      0%
  VideoEnhance/0    0.00% |                                                                                          |      0%      0%

我对 Render/3D/0、Blitter/0、Video/0 和 VideoEnhance/0 值感兴趣。我实际上不知道两个输出如何相互关联,但是,如果您有想法,请告诉我。

编辑: 编辑:很高兴每次“滴答”都能得到结果,我认为 sudo intel_gpu_top 每秒都会更新自己,但我可能是错的

答案1

我不熟悉 的 GPU 版本top,但从提供的输出来看,它看起来sudo intel_gpu_top捕获了 的一些输出sudo intel_gpu_top -o outfile

一对一对应似乎是:

  • Render/3D/0<> RCS/0%值
  • Blitter/0<> BCS/0%值
  • Video/0<> VCS/0%值
  • VideoEnhance/0<> VECS/0%值

使用从以下位置收集的信息乔治·尤多森回答在这个网站上,借用那个答案上 SO,并正确归因于外汇:

  • “渲染”(空间)似乎与常规 3D 操作的空间使用有关。
  • “Blitter”(引擎)似乎负责 2D 操作(blitting)的硬件加速。
  • “视频命令流媒体(VCS)”:

VCS 单元主要充当操作系统驱动程序和多格式解码器 (MFD) 引擎 [...](获取、解码和分派数据包)之间的软件编程接口。

了解更多信息

  • “视频增强命令流单元(VECS)”:该命令流单元是附加/VCS 增强在那它

允许将视频后期处理卸载到另一个新组件 VEBOX。 VEBOX 引擎用于基于硬件的视频后期处理以及受支持的用户空间代码。

要定期更新您的值,请尝试:

$ sudo intel_gpu_top -o - \
       | awk 'BEGIN {print "\tRender/3D/0 (%)","Blitter/0 (%)","Video/0 (%)","VideoEnhance/0 (%)\n"} 
              NR>=3 {printf "\t%11s%14s%12s%%19s\n" $4,$7,$10,$13}'

编辑:我在这里响应OP作者的请求,将输出限制为1,即不使用intel_gpu_top它的设计方式,即定期显示其更新的输出:

为此,您可以将上面的一行代码转换为:

timeout 1s sudo intel_gpu_top -s 1 -o - \
       | awk 'BEGIN {print "\tRender/3D/0 (%)","Blitter/0 (%)","Video/0 (%)","VideoEnhance/0 (%)\n"} 
              NR>=3 {printf "\t%11s%14s%12s%%19s\n" $4,$7,$10,$13}'
  • timeout 1s:允许后续命令在一秒后超时 ( 1s)
  • 标志intel_gpu_top和参数-s 1设置输出每秒发生一次。

相关内容