PERFORMANCE-MONITORING(轉)

Performance-Monitoring 是Intel提供的可以監測統計CPU內部所產生事件的一組方法。在Intel的手冊上介紹了兩類CPU事件監測方法:architectural performance monitoring 和 non-architectural performance monitoring。Architectural performance monitoring與平臺(CPU系列)無關但所能監測的事件少;non-architectural performance monitoring與平臺密切相關,能監測大量事件。我僅關注architectural performance monitoring。
Architectural performance monitoring介紹
CPU 通過兩個寄存器來完成事件監測工作:事件選擇寄存器IA32_PERFEVTSELx ( programming performance event select registers)和計數器IA32_PMCx (performance monitoring counter)。在計數前,設置事件選擇寄存器并將計數器清零;計數結束時,讀取計數器。
IA32_PERFEVTSELx與 IA32_PMCx都是成對使用,共同完成計數工作。IA32_PMCx寄存器對應于從0xc1開始的一段連續地址,IA32_PERFEVTSELx寄 存器對應于從0x186開始的一段連續地址。每種CPU的寄存器位數和可以使用的寄存器對數可能不一樣,但可以通過CUPID.0AH:EAX指令來獲取 這些元信息:
Bits 07 - 00: Version ID of architectural performance monitoring, If >0, architectural performance monitoring capability is supported.
Bits 15- 08: Number of general-purpose performance monitoring counter per logical processor
Bits 23 - 16: Bit width of general-purpose, performance monitoring counter
Bits 31 - 24: Length of EBX bit vector to enumerate architectural performance monitoring events
事件選擇寄存器IA32_PERFEVTSELx的配置
?未命名
Event select field (bits 0 through 7):事件選擇碼區填寫需要監測的事件碼,這些事件碼都是事先定義好的,可以在Intel的手冊中查找。
Unit mask (UMASK) field (bits 8 through 15):掩碼區填寫與事件選擇碼對應掩碼,掩碼與事件碼共同使用來確定要監測的事件,掩碼與事件碼一樣是事先定義好的,可在Intel手冊上查找。
USR (user mode) flag (bit 16):標識是否統計CPU處于用戶態(CPU處于特權級別為:1、2、3)下發生的事件。可以與下面的OS位配合使用。
OS (operating system mode) flag (bit 17):標識是否統計CPU處于系統態(CPU處于特權級別為0)下發生的事件。可以與上面的USR位配合使用。
EN (Enable Counters) Flag (bit 22):計數允許位。注意:在寫計數器IA32_PMCx之前,必須清除計數允許位(設為0)。
Counter mask (CMASK) field (bits 24 through 31):計算器掩碼,如它不為零,但事件發生是,只有它小于計數器的值,計數器計數才會增加1。
計數示例
下面代碼是統計事件DTLB_MISSES.ANY,其事件碼為0x08,掩碼為0x01。
//寄存器地址碼
#define IA32_PMC0 0xc1
#define IA32_PERFEVTSEL0 0x186
//事件碼及其掩碼
#define EVENT 0x08
#define MASK 0x01
Int nEventMask, nCount;
Int nEventRegisterHigh,nEventRegisterLow;
nEventMask = IA32_PERFEVTSEL0;
nCount = IA32_PMC0;
nEventRegisterHigh=nEventRegisterLow=0;
//設置事件碼及掩碼
nEventRegisterLow |= EVENT;
nEventRegisterLow |= MASK<<8;
//設置用戶態系統態標識位
nEventRegisterLow |= 1<<16;
nEventRegisterLow |= 1<<17;
//清楚計數允許位
nEventRegisterLow &= ~(1<<22);
//設置事件選擇寄存器
wrmsr(nEventMask, -(u32)( nEventRegisterLowl), -1);
//計數器清零
wrmsr(nCount, -(u32)( 0), -1);
//設置計數允許位
nEventRegisterLow |= 1<<22;
wrmsr(nEventMask, -(u32)( nEventRegisterLowl), -1);
。。。。//計數中
//讀起計數結果
rdmsr(nCount, nEventRegisterLow, nEventRegisterHigh);
Non-architectural performance monitoring介紹
(還不太了解這方面的知識!)

?

http://rf-lai.spaces.live.com/blog/cns!8A6F01FE4875D04A!412.entry

轉載于:https://www.cnblogs.com/parrynee/archive/2010/01/21/1653157.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/274901.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/274901.shtml
英文地址,請注明出處:http://en.pswp.cn/news/274901.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ux設計_為企業UX設計更好的數據表

ux設計重點 (Top highlight)If you have worked on enterprise products, you must have noticed the use of lots of data tables. Therefore, I am writing this article to collect the most common use cases and discuss how elegantly we can handle them.如果您使用過企…

hdu1728--------坑爹啊

尼瑪&#xff0c;就因為沒發現‘yes’寫成‘yrs’。整整讓哥找了一個小時的bug。有沒有..........此刻&#xff0c;內流滿面&#xff01; 分析&#xff1a; 開始以為是單純的BFS,結果WA無數次&#xff01;&#xff01; 后來分析后發現是要找到不超過轉向次數的轉向路徑, 最重要…

狼叔直播 Reaction《學習指北:Node.js 2022 全解析》

大家好&#xff0c;我是若川。持續組織了6個月源碼共讀活動&#xff0c;感興趣的可以點此加我微信 ruochuan02 參與&#xff0c;每周大家一起學習200行左右的源碼&#xff0c;共同進步。同時極力推薦訂閱我寫的《學習源碼整體架構系列》 包含20余篇源碼文章。歷史面試系列本文是…

figma下載_Figma中的高級圖像處理

figma下載Figma is not exactly suited for image manipulation, and that’s completely fine. While it does provide an ample amount of tools that let you apply some basic changes to your raster images, for anything more complex you need to look someplace else.…

ToString格式化

在很多對象顯示為字符串的時候都會使用到ToString中的格式化&#xff0c;由于以前沒怎么注意到這個問題&#xff0c;想總結一下各個基礎結構對象的格式化&#xff0c;以便后備之用&#xff01;&#xff01;&#xff01;Int.ToString(format): 格式字符串采用以下形式&#xff1…

xml學習4-dtd

1、DTD元素的定義 <?xml version"1.0" encoding"gb2312"?> <!--*表示0或者多個 表示至少要有一個 ?表示0個或者一個 內容模型 |表示只能包含分隔開中的一個 ,表示序列 下面是DTD元素的聲明 #PCDATA 表示字符數據 EMPTY表示 空元素…

指針和指針的指針_網絡上的iPad指針

指針和指針的指針a week ago I saw a new IPad Pointer presentation and was very excited about what they did. It was very interesting to see how they design different pointer modes and attention to details. Here is the presentation:一周前&#xff0c;我看到了一…

Vue 是如何用 Rollup 打包的?

大家好&#xff0c;我是若川。持續組織了6個月源碼共讀活動&#xff0c;感興趣的可以點此加我微信 ruochuan12 參與&#xff0c;每周大家一起學習200行左右的源碼&#xff0c;共同進步。同時極力推薦訂閱我寫的《學習源碼整體架構系列》 包含20余篇源碼文章。歷史面試系列Rollu…

leetcode 207課程表

class Solution { public:bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {//驗證是否為DAG&#xff0c;每次驗證指向的是否已經存在于當前圖中//建圖vector<int> indegree(numCourses,0);//入度vector<vector<int>> …

2012-04-12

一.JS 中的return Return false&#xff1a;相當于一個終止符,用來阻止提交表單或繼續執行下面的代碼&#xff0c;只在當前函數有效&#xff0c;不會影響其他外部函數的執行 Eg: function a(){if(true) return false;} Function test{a();b();c();} //a方法中的return false 不…

sketch怎么傳到ps_2020年從Sketch移植到Figma的詳細指南

sketch怎么傳到psAs we’re locked up in our homes due to COVID-19 pandemic, many of us are working remotely and Figma is a go-to tool for designers for the same.由于COVID-19流行病使我們被關在家里&#xff0c;我們中的許多人都在遠程工作&#xff0c;而Figma是設計…

還沒搭建過Vue3.x項目?幾行代碼搞定~

大家好&#xff0c;我是若川。持續組織了6個月源碼共讀活動&#xff0c;感興趣的可以點此加我微信 ruochuan12 參與&#xff0c;每周大家一起學習200行左右的源碼&#xff0c;共同進步。同時極力推薦訂閱我寫的《學習源碼整體架構系列》 包含20余篇源碼文章。歷史面試系列相信現…

mysql 常用命令 匯總

參考閱讀 摘要 權限 允許公網訪問列操作 修改列名mysql 修改列屬性其他 登錄設置自動補全與utf-8編碼其他一次添加多條記錄修改表名字允許公網訪問 1,修改表,登錄mysql數據庫,切換到mysql數據庫,使用sql語句查看"select host,user from user ;" mysql -u root -pvmwa…

一步步創建 邊欄 Gadget(二)

相信使用上篇中創建的邊欄Gadget之后&#xff0c;大家會很郁悶。難道視頻窗口就那么小嗎&#xff1f;看起來真費勁。我能通過該Gadget看著一部電視劇。而不能夠定制自己需要的或者想要看的電視劇。 在上一篇一步步創建 邊欄 Gadget&#xff08;一&#xff09;中&#xff0c;我們…

tableau 自定義圖表_一種新的十六進制美國地圖布局的案例-Tableau中的自定義圖表

tableau 自定義圖表For whatever reason, 無論出于什么原因 maps are cool. Even though the earth has mostly been the same since those 地圖很酷 。 即使自Pangaea days, we humans make and remake maps constantly. It might be that old maps remind us of how things …

2022,前端工具鏈十年盤點

大家好&#xff0c;我是若川。持續組織了6個月源碼共讀活動&#xff0c;感興趣的可以點此加我微信 ruochuan12 參與&#xff0c;每周大家一起學習200行左右的源碼&#xff0c;共同進步。同時極力推薦訂閱我寫的《學習源碼整體架構系列》 包含20余篇源碼文章。歷史面試系列2021 …

var result = ![] == []; console.log(result); // 結果是?為什么?

相等操作符會對操作值進行隱式轉換后進行比較&#xff0c;如果一個操作值為布爾值&#xff0c;則在比較之前先將其轉換為數值&#xff0c;這里 ![] 一定是布爾值了。 http://www.csser.com/board/4f3f516e38a5ebc9780004d3轉載于:https://www.cnblogs.com/anjey/archive/2012/0…

講講volatile的作用

講講volatile的作用 講講volatile的作用254推薦一個定義為volatile的變量是說這變量可能會被意想不到地改變&#xff0c;這樣&#xff0c;編譯器就不會去假設這個變量的值了。精確地說就是&#xff0c;優化器在用到這個變量時必須每次都小心地重新讀取這個變量的值&#xff0c;…

書籍排版學習心得_為什么排版是您可以學習的最佳技能

書籍排版學習心得重點 (Top highlight)I was introduced to design in a serpentine fashion. I don’t have any formal training. Instead, I’ve learned everything through the Web, books, and by interacting with designers daily.我被介紹為蛇形設計。 我沒有任何正規…

javascript專題:如何構建自己的js庫

首先看看這個&#xff1a; (function(){ //運行的代碼 })(); 紅色括號里面是一個匿名函數&#xff0c;紅色括號是分割&#xff0c;表示里面的函數是一個部分&#xff0c;綠色的括號表示一個運算符&#xff0c;表示紅色括號里面的函數要運行。 相當于定義完一個匿名函數后讓它直…