CPU性能监控之一------CPU架构
? ?先說下CPU的緩存吧,都知道CPU的緩存是分為L1,L2和L3的,L1又分為數(shù)據緩存和指令緩存,每顆CPU核心都有自己的L1和L2,但L3是各核心共享的,一但涉及共享的東西,當然就有競爭咯。
? ?
? ?SMP(SymmetricalMulti-Processing,對稱多處理器)架構:
????在一個主板上,能放置多顆CPU,例如4顆,如果每顆4核,那么一共就是16個核心,這種架構存在什么問題呢?我們設想一下,CPU有多個,但我的內存只有一個,同樣的,內存控制器也是只有一個的,那么當我其中的一個CPU去與內存控制器進行交互的時候,其它CPU此時此刻能不能同時與我們的內存控制器交互呢?很顯然,不能了,所以,CPU的顆數(shù)越多,那么資源競爭的越激烈,同樣,性能可能會不容樂觀,所以這種架構一般會隨著CPU的增多,性能可能會逐漸下降。
???? 架構圖類似下圖:
????? ??
? ? NUMA(Non-Uniform Memory Access Architecture,非一致性內存訪問)架構:
????? ?由于SMP架構下,多顆CPU之間搶占資源較為激烈,所以NUMA通常有一組CPU(一般為2顆,可能會更多)和本地內存組成,每一顆CPU都有自己獨有的內存,這樣,就大大避免了多顆CPU之間內存爭用和總線爭用的問題,并且本地CPU和內存間距離較短,傳輸速度及快,但是如果我們要訪問的數(shù)據在對方的內存上,這樣,性能就會有所下降,可能會很疑惑,我的本地CPU要訪問的數(shù)據怎么會在對方的CPU上呢?默認情況下,如果我們運行了100個進程,CPU0和CPU1各運行50個進程,當然,進程所占用的數(shù)據還在內存上,過了一會,CPU0結束了10個進程,還運行40個進程,CPU1結束了40個進程,還運行10個進程,此時,CPU根據默認策略,會自動平衡,使兩邊CPU各運行的進程盡可能的一樣多,那么原來在CPU0上運行的進程就會跑到CPU1上去,那么當我們再次訪問進程數(shù)據時,就會出現(xiàn)交叉內存訪問了。等到下一篇在說如何綁定吧。先看下架構圖吧:
????
?????NUMA內存交叉訪問為什么速度會慢?
????正常情況下CPU訪問一次內存,最快需要3個時鐘周期:
? 向內存控制器傳輸一個尋址的指令,內存控制器在返回一個值----->CPU確認內存地址,并施加訪問的機制,類似鎖機制----〉進行讀寫操作
????在正常情況下訪問如上過程,但出現(xiàn)交叉訪問是如下過程:
? 向內存控制器傳輸一個尋址指令----〉訪問對方的內存控制器,并施加訪問機制----〉對數(shù)據進行讀寫操作?
????此過程中 由本地內存控制器訪問對方內存控制器需要3個時鐘周期,所以,出現(xiàn)交叉內存訪問會最快會使用6個時鐘周期。
轉載于:https://blog.51cto.com/hl914/1557231
總結
以上是生活随笔為你收集整理的CPU性能监控之一------CPU架构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: laravel实现数据库读写分离配置或者
- 下一篇: 2014 I/O归来:Google连接一