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