天天看點

線程數與多核CPU的關系,VMware中核數的設定

  • CPU數,核數,processor數的概念
    • CPU數
      • 獨立的中間處理單元,展現在主機闆上就是有多少個CPU槽位
    • CPU cores
      • 在每一個CPU上,都可能有多核(core),每個核中都有獨立的ALU,FPU,Cache等元件,可以了解為CPU的實體核數。(我們常說4核8線程中的核)
    • processor
      • 每一個實體核可以模拟出多個邏輯核,"超線程"技術就是通過采用特殊的指令,把邏輯核心模拟為實體超線程,這樣的核就是processor.是一個處理資料的通道,流水線。可以了解為邏輯核(比如我們常說的4核8線程中的線程)
    • 檢視計算機的processor數(虛拟核數)
      • 在linux中使用top 然後輸入1,從CPU0到CPUn顯示的就是CPU的虛拟核數(processor)
        線程數與多核CPU的關系,VMware中核數的設定
    • 檢視實體核數
      • 在linux中輸入 cat /proc/cpuinfo 就可以看到CPU cores 和 processor的概念
        線程數與多核CPU的關系,VMware中核數的設定
  • 關于程序和線程
    • 程序
      • 是CPU排程和配置設定的基本機關
    • 線程
      • 是作業系統進行資源(包括CPU,記憶體,磁盤IO)配置設定的最小機關
    • 關系
      • 打開微信,浏覽器都是一個程序,一個程序中可能有多個子任務,比如微信接受資訊,發送資訊,這些子任務都是線程
      • 程序之間無法共享資源,進行通信。但是線程之間可以通信,共享程序的資源
      • 開啟一個程序,就是打來一個軟體,消耗的資源多。但是線程相較程序就會節省很多資源。
    • 線程之間的切換
      • 分時
        • 将時間平均配置設定,各個線程之間輪流使用
      • 搶占
        • 優先級高的線程搶到資源的機率大
    • 線程開銷
      • 上下文切換,儲存目前線程的執行環境,并恢複要執行線程的環境。
      • 線程建立和消亡的開銷
      • 線程需要儲存維持線程本地棧,會消耗記憶體
      • 當線程多到一定的程度時,就會拖慢系統性能,因為多線程的切換需要資源。是以線上程數應該在性能瓶頸的90%。
  • 多核下線程數量的選擇
    • Master-worker模式
      • 針對多任務,我們通常采用Master-worker模型。Master負責配置設定任務,worker負責執行任務。如果Worker挂掉,就要Master負責重新排程。Hadoop叢集即使這樣NameNode管理DataNode.這是由線程切換到節點。
    • 計算密集型
      • 程式主要是複雜的邏輯判斷和複雜的運算。比如我們常見的機器學習之類的。
      • CPU利用裡高,不應開太多的線程。因為線程太多會因為線程的上下文切換浪費資源。
      • 計算密集型的任務同時進行的數量應當等于CPU的核心數(processo數,虛拟核心也算)
    • IO密集型
      • 程式主要是IO操作,比如磁盤IO和網絡IO。比如Hadoop的MR。
      • 因為IO操作會阻塞線程,CPU大量的時間在等待IO操作的完成,是以CPU的使用率不高,可以多開線程,當IO阻塞時就切換到其他就緒的線程,提高CPU的使用率
      • 如果磁盤IO的性能超過了總線的能力,此時的瓶頸就是IO而不再是CPU,線程開的多也沒有意義。因為總線被打滿了,資料過不來。
  • 關于VMware虛拟機CPU核數的設定
    • 機器設定:E5-2660 V2 兩顆,每顆10核,20線程
    • VMware設定界面
      線程數與多核CPU的關系,VMware中核數的設定
    • 檢視VMware中的各種情況(注意:這裡顯示的都是ID數,不是個數)
      • CPU個數 cat /proc/cpuinfo | grep "physical id"
      • CPU core cat /proc/cpuinfo | grep "core id"
      • CPU processor cat /proc/cpuinfo | grep "processor"
    • 對比
設定 vmCPU個數 vmCPU core vmCPU processor 結論

處理器數量:1

每個處理器的核心數量:4

1 4 4 1U4核4線程

處理器數量:2

每個處理器的核心數量:2

2 2 4 2U1核2線程

處理器數量:4

每個處理器的核心數量:2

4 2 8 4U2核2線程

可見:VMware中的:處理器數量(P)實際代表的是虛拟機的CPU個數

每個處理器的核心數量(C)實際代表的是虛拟機CPU的core

  • VMware設定核心數量的最佳實踐
    • 虛拟機的CPU數設定應該是小于實體機的數量。處理器數量*每個處理器核心數量<實體機的processor數量
    • 如果虛拟機的processor數大于實體機的processor數,虛拟機化管理系統首先按照時間片輪流排程一遍,然後如果還有剩餘的實體CPU資源,就分給需要計算的虛拟CPU
  • 參考資料【感謝你的努力,讓我有進步】
    • http://blog.guoyb.com/2018/08/18/cpu-cores/?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io
    • http://www.cnblogs.com/-new/p/7234332.html
    • http://www.cnblogs.com/52mm/p/p2.html
    • https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001397567993007df355a3394da48f0bf14960f0c78753f000