日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

intel 性能监控计数器PMC寄存器详解

發布時間:2024/5/8 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 intel 性能监控计数器PMC寄存器详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

所有內容來自intel官方手冊,章節號已給出。。。


一 ?以下內容來自(P279):30.1 PERFORMANCE MONITORING OVERVIEW


從Pentium奔騰處理器開始,Intel引入了一組計數寄存器用于做系統性能監視(System Performance monitoring)。針對不同型號的CPU處理器,它們各自擁有的性能計數寄存器是不同的,因此,相對ISA標準的普通寄存器而言,這些寄存器被稱之為屬于PMU中的MSR寄存器。

注解:
PMU:Performance Monitoring Unit,性能監視單元
MSR:Model-Specific Register

性能計數器允許用戶對選定的處理器參數進行監視和統計,根據這些統計值進行系統調優。從Intel P6開始,性能監視機制得到了進一步的改進和增強,允許用戶選擇更廣泛的事件進行監控。在奔騰4以及至強處理器,又引入了新的性能監視機制和一組新的性能監視事件。

從Intel Core Solo and Intel Core Duo處理器開始,性能監視事件被分為兩類:
1,non-architectural?performance events(后文簡稱為特定架構事件、特定架構監視事件)
model-specific,即不同型號的處理器各自所擁有的不同事件。

2,architectural performance events(后文簡稱為架構兼容事件、架構兼容監視事件)
compatible among processor families,即在不同型號的處理器之間是兼容的事件。因為要提供各個型號處理器之間的兼容,因此這一類事件比較少。




二 ?以下內容來自(P280):30.2 ARCHITECTURAL PERFORMANCE MONITORING


如果性能監視事件在不同微架構上的性能保存一致,那么它就是架構兼容事件。架構兼容事件可以在處理器發展過程中逐步增強,也就是可以認為架構兼容事件具有版本更新的概念,即在新型號的處理器上,提供的架構兼容事件可能要比舊型號的處理器要多,同一個架構兼容事件的功能可能也要更強大。通過CPUID.0AH可以獲取到當前處理器支持的架構兼容事件版本ID。



三 以下內容來自(P281):30.2.1 Architectural Performance Monitoring Version 1


通過兩組寄存器來實現對架構兼容事件的使用,一組為事件選擇寄存器(IA32_PERFEVTSELx),一組為計數寄存器(IA32_PMCx),這兩組寄存器是一一對應的,另外,它們的個數也非常有限。

為了保證這兩組寄存器在各個架構之間兼容,它們有如下一些約定:
1,在各個微架構之間,IA32_PERFEVTSELx的bit位布局是一致的。
2,在各個微架構之間,IA32_PERFEVTSELx的地址是不變的。
3,在各個微架構之間,IA32_PMCx的地址是不變的。
4,每一個邏輯處理器擁有它自己的IA32_PERFEVTSELx和IA32_PMCx。也就是說,如果某一個處理器核上有兩個邏輯處理器,那么這兩個邏輯處理器擁有它各自的IA32_PERFEVTSELx和IA32_PMCx。



四 以下內容來自(P282):30.2.1.1 Architectural Performance Monitoring Version 1 Facilities


每一個邏輯處理器擁有的MSR寄存器IA32_PERFEVTSELx和IA32_PMCx對數可以通過CPUID.0AH:EAX[15:8]獲取。這些MSR寄存器有如下一些特點:
1,IA32_PMCx寄存器的起始地址為0C1H,并且占據一塊連續的MSR地址空間。
對應到linux-3.7內核代碼為

1 #define MSR_ARCH_PERFMON_PERFCTR0???????????????? 0xc1

2,IA32_PERFEVTSELx寄存器的起始地址為186H,并且占據一塊連續的MSR地址空間。從該地址開始的每一個IA32_PERFEVTSELx寄存器與從0C1H開始的IA32_PMCx寄存器一一對應。
對應到linux-3.7內核代碼為宏:

1 #define MSR_ARCH_PERFMON_EVENTSEL0?????????????? 0x186

3,通過CPUID.0AH:EAX[23:16]可獲取IA32_PMCx寄存器的bit位寬。

4,在各個微架構之間,IA32_PERFEVTSELx的bit位布局是一致的。

IA32_PERFEVTSELx寄存器的bit位布局如下:
0-7:Event select field,事件選擇字段
8-15:Unit mask (UMASK) field,事件檢測掩碼字段
16:USR (user mode) flag,設置僅對用戶模式(privilege levels 1, 2 or 3)進行計數,可以和OS flag一起使用。
17:OS (operating system mode) flag,設置僅對內核模式(privilege levels 0)進行計數,可以和USR flag一起使用。
18:E (edge detect) flag
19:PC (pin control) flag,如果設置為1,那么當性能監視事件發生時,邏輯處理器就會增加一個計數并且“toggles the PMi pins”;如果清零,那么當性能計數溢出時,處理器就會“toggles the PMi pins”?!皌oggles the PMi pins”不好翻譯,其具體定義為:“The toggling of a pin is defined as assertion of the pin for a single bus clock followed by deassertion.”,對于此處,我的理解也就是把PMi針腳激活一下,從而觸發一個PMI中斷。
20:INT (APIC interrupt enable) flag,如果設置為1,當性能計數溢出時,就會通過local APIC來觸發邏輯處理器產生一個異常。
21:保留
22:EN (Enable Counters) Flag,如果設置為1,性能計數器生效,否則被禁用。
23:INV (invert) flag,控制是否對Counter mask結果進行反轉。
24-31:Counter mask (CMASK) field,如果該字段不為0,那么只有在單個時鐘周期內發生的事件數大于等于該值時,對應的計數器才自增1。這就可以用于統計每個時鐘周期內發生多次的事件。如果該字段為0,那么計數器就以每時鐘周期按具體發生的事件數進行增長。
32-63:保留

對應到linux-3.7內核代碼的相關宏為:

1 2 3 4 5 6 7 8 9 10 11 #define ARCH_PERFMON_EVENTSEL_EVENT???????? 0x000000FFULL #define ARCH_PERFMON_EVENTSEL_UMASK???????? 0x0000FF00ULL #define ARCH_PERFMON_EVENTSEL_USR?????????? (1ULL << 16) #define ARCH_PERFMON_EVENTSEL_OS??????????? (1ULL << 17) #define ARCH_PERFMON_EVENTSEL_EDGE????????? (1ULL << 18) #define ARCH_PERFMON_EVENTSEL_PIN_CONTROL?????? (1ULL << 19) #define ARCH_PERFMON_EVENTSEL_INT?????????? (1ULL << 20) #define ARCH_PERFMON_EVENTSEL_ANY?????????? (1ULL << 21) #define ARCH_PERFMON_EVENTSEL_ENABLE??????????? (1ULL << 22) #define ARCH_PERFMON_EVENTSEL_INV?????????? (1ULL << 23) #define ARCH_PERFMON_EVENTSEL_CMASK???????? 0xFF000000ULL


五 以下內容來自(P284):30.2.2 Additional Architectural Performance Monitoring Extensions

第二個版本的架構兼容監視機制包含如下增強特性:
1,提供有三個固定功能的性能計數器,IA32_FIXED_CTR0、IA32_FIXED_CTR1和IA32_FIXED_CTR2,每一個固定功能性能計數器一次只能統計一個事件。通過寫位于地址38DH的IA32_FIXED_CTR_CTRL寄存器bit位來配置這些固定功能性能計數器,而不再是像通用IA32_PMCx性能計數器那樣,通過對應IA32_PERFEVTSELx寄存器來配置。
對應到linux-3.7內核代碼的相關宏為:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 /* ?* All 3 fixed-mode PMCs are configured via this single MSR: ?*/ #define MSR_ARCH_PERFMON_FIXED_CTR_CTRL 0x38d ? /* ?* The counts are available in three separate MSRs: ?*/ ? /* Instr_Retired.Any: */ #define MSR_ARCH_PERFMON_FIXED_CTR0 0x309 #define INTEL_PMC_IDX_FIXED_INSTRUCTIONS??? (INTEL_PMC_IDX_FIXED + 0) ? /* CPU_CLK_Unhalted.Core: */ #define MSR_ARCH_PERFMON_FIXED_CTR1 0x30a #define INTEL_PMC_IDX_FIXED_CPU_CYCLES? (INTEL_PMC_IDX_FIXED + 1) ? /* CPU_CLK_Unhalted.Ref: */ #define MSR_ARCH_PERFMON_FIXED_CTR2 0x30b #define INTEL_PMC_IDX_FIXED_REF_CYCLES? (INTEL_PMC_IDX_FIXED + 2) #define INTEL_PMC_MSK_FIXED_REF_CYCLES? (1ULL << INTEL_PMC_IDX_FIXED_REF_CYCLES) ? /* ?* We model BTS tracing as another fixed-mode PMC. ?* ?* We choose a value in the middle of the fixed event range, since lower ?* values are used by actual fixed events and higher values are used ?* to indicate other overflow conditions in the PERF_GLOBAL_STATUS msr. ?*/ #define INTEL_PMC_IDX_FIXED_BTS???????????? (INTEL_PMC_IDX_FIXED + 16)

2,簡化的事件編程,一般的編程操作也就是啟用事件計數、禁用事件計數、檢測計數溢出,因此提供有三個專門的架構兼容MSR寄存器:
IA32_PERF_GLOBAL_CTRL:允許軟件通過一條WRMSR指令實現對所有或任何組合的IA32_FIXED_CTRx或任意IA32_PMCx進行啟用或禁用事件計數的操作。
IA32_PERF_GLOBAL_STATUS:允許軟件通過一條RDMSR指令實現對任何組合的IA32_FIXED_CTRx或任意IA32_PMCx的溢出狀態的查詢操作。
IA32_PERF_GLOBAL_OVF_CTRL:允許軟件通過一條WRMSR指令實現對任何組合的IA32_FIXED_CTRx或任意IA32_PMCx的溢出狀態的清除操作。

對應到linux-3.7內核代碼的相關宏為:

1 2 3 4 5 6 7 8 /* Intel Core-based CPU performance counters */ #define MSR_CORE_PERF_FIXED_CTR0??? 0x00000309 #define MSR_CORE_PERF_FIXED_CTR1??? 0x0000030a #define MSR_CORE_PERF_FIXED_CTR2??? 0x0000030b #define MSR_CORE_PERF_FIXED_CTR_CTRL??? 0x0000038d #define MSR_CORE_PERF_GLOBAL_STATUS 0x0000038e #define MSR_CORE_PERF_GLOBAL_CTRL?? 0x0000038f #define MSR_CORE_PERF_GLOBAL_OVF_CTRL?? 0x00000390

參考:
http://blog.csdn.net/gengshenghong/article/details/7383438
http://blog.csdn.net/gengshenghong/article/details/7384862


轉載地址:http://lenky.info/2013/02/23/intel-%e6%80%a7%e8%83%bd%e7%9b%91%e8%a7%86%e5%99%a8/?或?http://lenky.info/?p=2207





總結

以上是生活随笔為你收集整理的intel 性能监控计数器PMC寄存器详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。