通常使用 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
设置输出每秒发生一次。