當一個程序在不同的CPU核心之間遷移時,效能可能受到影響的原因主要包括以下幾點:
快取失效:CPU的快取(L1、L2快取)通常是核心私有的,即每個CPU核心有自己的快取。當一個程序從一個核心遷移到另一個核心時,原來在第一個核心快取中的資料無法直接在第二個核心中使用。這會導致快取失效(cache miss),需要重新從記憶體中載入資料,增加了訪問延遲。頻繁的遷移會導致更高的快取失效率,從而降低效能。
上下文切換開銷:每次遷移都會引入上下文切換(context switch)的開銷。上下文切換包括儲存和恢復程序的CPU狀態、核心棧、頁表等資訊,雖然這些開銷較小,但頻繁的遷移仍會累積大量的開銷,尤其在高頻率遷移時影響顯著。
NUMA延遲(適用於NUMA系統):在NUMA(非統一記憶體訪問)架構中,不同CPU核訪問記憶體的速度不一致。每個CPU節點更適合訪問屬於自己節點的記憶體區域,稱為“本地記憶體”。當程序遷移到另一個CPU核心後,可能需要訪問“遠端記憶體”,導致更高的記憶體訪問延遲,影響效能。
TLB重新整理:遷移後可能需要重新整理TLB(Translation Lookaside Buffer,地址轉換快取記憶體)。TLB儲存了虛擬地址到實體地址的對映關係,通常在CPU遷移時需要重新整理,因為不同核心可能有不同的地址對映。TLB重新整理會導致程序訪問記憶體時需要重新查表,增加了記憶體訪問的延遲。
排程不穩定性:頻繁的核心遷移可能導致程序的排程不穩定,導致排程器無法有效利用CPU快取和其他資源。這種不穩定性可能讓程序更難以預測其執行順序,影響實時性或延遲要求較高的應用。
如果是超執行緒SMT呢?
當一個程序在不同的CPU核心之間遷移時,效能可能受到影響的原因主要包括以下幾點:
快取失效:CPU的快取(L1、L2快取)通常是核心私有的,即每個CPU核心有自己的快取。當一個程序從一個核心遷移到另一個核心時,原來在第一個核心快取中的資料無法直接在第二個核心中使用。這會導致快取失效(cache miss),需要重新從記憶體中載入資料,增加了訪問延遲。頻繁的遷移會導致更高的快取失效率,從而降低效能。
上下文切換開銷:每次遷移都會引入上下文切換(context switch)的開銷。上下文切換包括儲存和恢復程序的CPU狀態、核心棧、頁表等資訊,雖然這些開銷較小,但頻繁的遷移仍會累積大量的開銷,尤其在高頻率遷移時影響顯著。
NUMA延遲(適用於NUMA系統):在NUMA(非統一記憶體訪問)架構中,不同CPU核訪問記憶體的速度不一致。每個CPU節點更適合訪問屬於自己節點的記憶體區域,稱為“本地記憶體”。當程序遷移到另一個CPU核心後,可能需要訪問“遠端記憶體”,導致更高的記憶體訪問延遲,影響效能。
TLB重新整理:遷移後可能需要重新整理TLB(Translation Lookaside Buffer,地址轉換快取記憶體)。TLB儲存了虛擬地址到實體地址的對映關係,通常在CPU遷移時需要重新整理,因為不同核心可能有不同的地址對映。TLB重新整理會導致程序訪問記憶體時需要重新查表,增加了記憶體訪問的延遲。
排程不穩定性:頻繁的核心遷移可能導致程序的排程不穩定,導致排程器無法有效利用CPU快取和其他資源。這種不穩定性可能讓程序更難以預測其執行順序,影響實時性或延遲要求較高的應用。
超執行緒的概念
https://www.cnblogs.com/linhaostudy/p/15502447.html