天天看點

CPU性能監控之一------CPU架構

   先說下CPU的緩存吧,都知道CPU的緩存是分為L1,L2和L3的,L1又分為資料緩存和指令緩存,每顆CPU核心都有自己的L1和L2,但L3是各核心共享的,一但涉及共享的東西,當然就有競争咯。

   SMP(SymmetricalMulti-Processing,對稱多處理器)架構:

    在一個主機闆上,能放置多顆CPU,例如4顆,如果每顆4核,那麼一共就是16個核心,這種架構存在什麼問題呢?我們設想一下,CPU有多個,但我的記憶體隻有一個,同樣的,記憶體控制器也是隻有一個的,那麼當我其中的一個CPU去與記憶體控制器進行互動的時候,其它CPU此時此刻能不能同時與我們的記憶體控制器互動呢?很顯然,不能了,是以,CPU的顆數越多,那麼資源競争的越激烈,同樣,性能可能會不容樂觀,是以這種架構一般會随着CPU的增多,性能可能會逐漸下降。

     架構圖類似下圖:

CPU性能監控之一------CPU架構

    NUMA(Non-Uniform Memory Access Architecture,非一緻性記憶體通路)架構:

       由于SMP架構下,多顆CPU之間搶占資源較為激烈,是以NUMA通常有一組CPU(一般為2顆,可能會更多)和本地記憶體組成,每一顆CPU都有自己獨有的記憶體,這樣,就大大避免了多顆CPU之間記憶體争用和總線争用的問題,并且本地CPU和記憶體間距離較短,傳輸速度及快,但是如果我們要通路的資料在對方的記憶體上,這樣,性能就會有所下降,可能會很疑惑,我的本地CPU要通路的資料怎麼會在對方的CPU上呢?預設情況下,如果我們運作了100個程序,CPU0和CPU1各運作50個程序,當然,程序所占用的資料還在記憶體上,過了一會,CPU0結束了10個程序,還運作40個程序,CPU1結束了40個程序,還運作10個程序,此時,CPU根據預設政策,會自動平衡,使兩邊CPU各運作的程序盡可能的一樣多,那麼原來在CPU0上運作的程序就會跑到CPU1上去,那麼當我們再次通路程序資料時,就會出現交叉記憶體通路了。等到下一篇在說如何綁定吧。先看下架構圖吧:

CPU性能監控之一------CPU架構

     NUMA記憶體交叉通路為什麼速度會慢?

    正常情況下CPU通路一次記憶體,最快需要3個時鐘周期:

  向記憶體控制器傳輸一個尋址的指令,記憶體控制器在傳回一個值----->CPU确認記憶體位址,并施加通路的機制,類似鎖機制----〉進行讀寫操作

    在正常情況下通路如上過程,但出現交叉通路是如下過程:

  向記憶體控制器傳輸一個尋址指令----〉通路對方的記憶體控制器,并施加通路機制----〉對資料進行讀寫操作 

    此過程中 由本地記憶體控制器通路對方記憶體控制器需要3個時鐘周期,是以,出現交叉記憶體通路會最快會使用6個時鐘周期。

繼續閱讀