Freescale i.MX8 DDR 效能監控單元 (PMU)

DRAM 控制器內部沒有效能計數器,因此效能訊號被引出到控制器的邊緣,在那裡實現了一組 4 x 32 位計數器。 這由計數器控制暫存器中程式設計的 CSV 模式控制,這會導致生成大量的 PERF 訊號。

每個計數器的值的選擇是透過配置暫存器完成的。 每個計數器都有一個暫存器。 計數器 0 非常特殊,因為它總是計數“時間”,當到期時會導致鎖定自身和其他計數器,並引發中斷。 如果任何其他計數器溢位,它會繼續計數,並且不會引發中斷。

“format”目錄描述了 perf_event_attr 結構的 config(事件 ID)和 config1/2(AXI 過濾器設定)欄位的格式,請參閱 /sys/bus/event_source/ devices/imx8_ddr0/format/。“events”目錄描述了硬體支援的事件型別,這些事件型別可以與 perf 工具一起使用,請參閱 /sys/bus/event_source/ devices/imx8_ddr0/events/。“caps”目錄描述了 DDR PMU 中實現的過濾功能,請參閱 /sys/bus/events_source/devices/imx8_ddr0/caps/。

perf stat -a -e imx8_ddr0/cycles/ cmd
perf stat -a -e imx8_ddr0/read/,imx8_ddr0/write/ cmd

AXI 過濾僅由 CSV 模式 0x41 (axid-read) 和 0x42 (axid-write) 使用,用於計數與過濾器設定匹配的讀取或寫入。 過濾器設定因不同的 DRAM 控制器實現而異,這透過驅動程式中的 quirks 來區分。 您還可以從使用者空間轉儲資訊,“caps”目錄顯示 AXI 過濾器的型別(filter、enhanced_filter 和 super_filter)。 值 0 表示不支援,值 1 表示支援。

  • 使用 DDR_CAP_AXI_ID_FILTER quirk(filter: 1, enhanced_filter: 0, super_filter: 0)。 過濾器定義為兩個配置部分:--AXI_ID 定義 AxID 匹配值。 --AXI_MASKING 定義 AxID 的哪些位對匹配有意義。

    • 0:相應的位被遮蔽。

    • 1:相應的位未被遮蔽,即用於進行匹配。

    AXI_ID 和 AXI_MASKING 對映在效能計數器中的 DPCR1 暫存器上。 當非遮蔽位與相應的 AXI_ID 位匹配時,計數器遞增。 如果滿足以下條件,則 Perf 計數器遞增

    AxID && AXI_MASKING == AXI_ID && AXI_MASKING
    

    此過濾器不支援同時過濾 axid-read 和 axid-write 事件的不同 AXI ID,因為此過濾器在計數器之間共享。

    perf stat -a -e imx8_ddr0/axid-read,axi_mask=0xMMMM,axi_id=0xDDDD/ cmd
    perf stat -a -e imx8_ddr0/axid-write,axi_mask=0xMMMM,axi_id=0xDDDD/ cmd
    

    注意

    axi_mask 在使用者空間中被反轉(即,設定的位是要遮蔽的位),它將在驅動程式中自動恢復。 這樣使用者就可以只指定 axi_id 來監視特定的 id,而不必指定 axi_mask。

    perf stat -a -e imx8_ddr0/axid-read,axi_id=0x12/ cmd, which will monitor ARID=0x12
    
  • 使用 DDR_CAP_AXI_ID_FILTER_ENHANCED quirk(filter: 1, enhanced_filter: 1, super_filter: 0)。 這是對 DDR_CAP_AXI_ID_FILTER quirk 的擴充套件,允許與另一組資料計數器併發地計數來自 DDR 讀取和寫入事務的位元組數(而不是突發數)。

  • 使用 DDR_CAP_AXI_ID_PORT_CHANNEL_FILTER quirk(filter: 0, enhanced_filter: 0, super_filter: 1)。 先前的 AXI 過濾器存在一個限制,它不能同時過濾不同的 ID,因為該過濾器在計數器之間共享。 此 quirk 是 AXI ID 過濾器的擴充套件。 一個改進是計數器 1-3 有它們自己的過濾器,這意味著它支援併發地過濾各種 ID。 另一個改進是計數器 1-3 支援 AXI 埠和通道選擇。 支援選擇地址通道或資料通道。

    過濾器定義為每個計數器 1-3 有 2 個配置暫存器。 --Counter N MASK COMP 暫存器 - 包括 AXI_ID 和 AXI_MASKING。 --Counter N MUX CNTL 暫存器 - 包括 AXI CHANNEL 和 AXI PORT。

    • 0:地址通道

    • 1:資料通道

    DDR 子系統中的 PMU,只存在一個埠 0,因此 axi_port 被保留,應該為 0。

    perf stat -a -e imx8_ddr0/axid-read,axi_mask=0xMMMM,axi_id=0xDDDD,axi_channel=0xH/ cmd
    perf stat -a -e imx8_ddr0/axid-write,axi_mask=0xMMMM,axi_id=0xDDDD,axi_channel=0xH/ cmd
    

    注意

    axi_channel 在使用者空間中被反轉,它將在驅動程式中自動恢復。 因此,如果使用者想要監視來自 DDR 事務的資料通道,則無需指定 axi_channel,因為資料通道更有意義。