對ARM CPU進(jìn)行性能分析常用的方法有PMU性能監(jiān)控、Top-Down性能分析、SPE采樣分析等。本文介紹一下SPE采樣分析的方法。
ARMv8.2引入了Statistical Profiling Extension(SPE),它提供了一種非侵入性的軟件和硬件采樣方法,可以對指令集架構(gòu)定義的架構(gòu)指令或uop進(jìn)行采樣分析。
SPE和PMU的對比:PMU可以分析一段代碼執(zhí)行中的event信息,但不能精確分析某一條指令的信息,例如這條指令有沒有cache miss、指令執(zhí)行的latency、分支預(yù)測的地址、指令訪問的虛擬地址和物理地址、數(shù)據(jù)來源是哪一級的cache/另外一個Cluster的CPU/另一個socket的CPU?
而SPE采樣分析則可以做到這些。
1. SPE介紹
SPE通過硬件采集CPU執(zhí)行過程中發(fā)生的event,根據(jù)軟件設(shè)置的采樣間隔對指令進(jìn)行采樣,由硬件產(chǎn)生SPE的record packet并將packet寫入外部內(nèi)存。SPE采樣的指令地址信息是非常精確的,不會漂移。而且采樣記錄的開銷較小,因而采樣率可以設(shè)置得很高。
SPE采樣流程主要包括以下4個步驟:
按照采樣間隔從樣本總體中選一個operation(可以限定為某個EL)。采樣間隔是軟件通過寫入PMSICR_EL1.COUNT來設(shè)置的。這個過程可以加入一些隨機(jī),偽隨機(jī)或擾動到采樣間隔中。
硬件trace這個operation在pipeline的執(zhí)行信息,包括PC,event,時序,數(shù)據(jù)地址,即profiling operation。
在創(chuàng)建一個采樣record之前,可以通過以下條件來過濾profile operation。
a.operation類型;
b.event;
c.latency。
創(chuàng)建一個包含trace信息的sample record。滿足過濾條件的sample record被寫入并存儲在內(nèi)存緩沖區(qū)中。當(dāng)內(nèi)存緩沖區(qū)滿時,可以用軟件處理這些sample record。
2. 采樣record和packet
SPE采集的一個record 表示對一個operation的trace記錄,一個record包含多個packets,不同的packet代表不同的信息,包括Address packet、Counter(LAT) packet、Events(EV) packet、Type(LD) packet、Timestamp(TS) packet、datasource packet、context packet等。
2.1 address packet
統(tǒng)計(jì)operation的地址,包括PC、Branch target address、Data access virtual address和Data access physical address。
2.2 counter packet
統(tǒng)計(jì)operation的latency,包括total latency,issue latency,translation latency這三種。
Issue latency:統(tǒng)計(jì)operation從dispatch到issue出去執(zhí)行之間的cycle數(shù)。包括所有operation。
Total latency: 統(tǒng)計(jì)operation被dispatch到執(zhí)行完成之間的cycle數(shù)。包括所有operation。
Translation latency:統(tǒng)計(jì)operation從虛擬地址送到MMU到MMU地址翻譯完成之間的cycle數(shù)。包括所有l(wèi)oad、store和atomic operation。
2.3 operation type packet
統(tǒng)計(jì)采樣的operation的類型,包括Load、store、atomic、Branch或exception return等指令類型。
2.4 event packet
統(tǒng)計(jì)采樣的operation的event。例如L1D-ACCESS、TLB-ACCESS、L2-MISS等事件。
2.5 data source packet
統(tǒng)計(jì)load數(shù)據(jù)的來源是哪里,例如數(shù)據(jù)是來自L1 cache、L2 cache、peer cluster、DDR、remote socket等等。
3. 使用perf工具分析SPE
可以通過perf工具來進(jìn)行SPE采樣分析。例如獲取SPE采樣數(shù)據(jù):
perf?record -e arm_spe_0/branch_filter=1,load_filter=1,store_filter=1,pa_enable=1,min_latency=10/ ?./user_app
分析SPE采樣數(shù)據(jù):
perf report -D -i ./perf.data ?> ?report.txt
參考內(nèi)容:
https://aijishu.com/a/1060000000398832
https://community.arm.com/arm-community-blogs/b/architectures-and-processors-blog/posts/statistical-profiling-extension-for-armv8-a
https://static.linaro.org/connect/lvc21/presentations/lvc21-302.pdf