Bash

從 intel_gpu_top 獲取輸出作為 bash 中的變數

  • July 7, 2021

通常使用 grep 就可以了

sudo intel_gpu_top | grep xyz

但在這種情況下,intel_gpu_top 就像 htop 並不斷執行。

我將如何在 bash 腳本中提取所需的資訊?

我想得到我的平均 iGPU 使用率,這似乎是唯一可以做到這一點的工具。雖然可以選擇將結果輸出到文件中,sudo intel_gpu_top -o file.txt但製作起來很奇怪,它具有不同的統計資訊,並且不會手動覆蓋舊結果,而是向文件中添加更多內容,從而難以從該文件中讀取所需的資訊(至少對於像我這樣的 bash noobie)

編輯:

這是來自的輸出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 都會自我更新,但我可能是錯的

我對那個 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% 值

使用從GeorgeUdosen在本網站上的答案中獲得的資訊,從 SO 上的答案中藉用,並正確歸因於FX

  • “渲染”(空間)似乎與正常 3D 操作的空間使用有關。
  • “Blitter”(引擎)似乎負責 2D 操作(blitting)的硬體加速。
  • “影片命令流媒體 (VCS)”:

VCS 單元主要用作作業系統驅動程序和多格式解碼器 (MFD) 引擎之間的軟體程式介面

$$ … $$ (獲取、解碼和發送數據包)。

看到這個了解更多資訊

允許將影片後期處理解除安裝到另一個新組件 VEBOX。VEBOX 引擎用於支持使用者空間程式碼的基於硬體的影片後期處理。

要定期更新您的值,請嘗試:

$ sudo intel_gpu_top -o - \
      | awk 'BEGIN {print "\tRender/3D/0 (%)","Blitter/0 (%)","Video/0 (%)","VideoEnhance/0 (%)\n"} 
             NR&gt;=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&gt;=3 {printf "\t%11s%14s%12s%%19s\n" $4,$7,$10,$13}'
  • timeout 1s: 允許後續命令在一秒後超時 ( 1s)
  • intel_gpu_top標誌和參數設置-s 1輸出每秒發生一次。

引用自:https://unix.stackexchange.com/questions/657124