多核高性能 cpu 配置

本文最新更新已經遷移到了獨立blog上:http://www.hiyoufu.com/?p=187


我們知道現在服務器都是多核, 最新的intel Sandybridge是NUMA IO結構, 以網卡爲例, 也就是說PCI插槽並不像westmere一樣, 通過一個bridge連接到cpu上, 目前SNB是直接pci鏈接到cpu上。


有時候我們測試performance的時候會看到性能忽高忽低的現象, 原因比較難找, 一頭霧水, 下面我根據自己的實際經驗列出下面幾個cpu對性能的影響:


多核並行編程cpu的親和性以及frequence對性能的影響可能比較大, 如果設置不好cpu的affinity, 通過跨QPI 來訪問另一個CPU上的內存, 那麼性能差距經過測試, 會有10倍的差距(兩個10G網口收包, 平均包長256, 最壞的情況2.5Gbps, 最好的情況19.8Gbps, 64byte小包在L4 上能達到16.5Gbps)。

首先我們保證在硬件cpu上不受影響,在這裏暫時不考慮cache一致性的問題 :


1.保證cpu運行最高的頻率, 目前默認基本都是ondemand, 也就是根據cpu的空閒程度來自動調節頻率, C state, 爲了保證CPU 運行在P狀態, 也就是performance狀態(當然耗電會大一些) 

2.cpu的set affinity或者taskset僅僅對用戶層的程序有用, 陷入內核後就無法保證當前線程運行在哪個cpu上了, 我們要保證在內核上分配內存時通過vmalloc_node來指定正確的socket。

3.linux 內核目前提供了offline cpu的功能, 當然cpu core 0目前是無法進行offline的(我認識的一個內核大師正在做cpu 0 offline的功能, 估計很快內核會支持), 所以我們爲了排除cpu NUMA的影響, 可以將socket 1上的所有的core進行logical offline, 這樣內核就看不到socket 1上的所有的cpu core了, 內存分配會自動到node 0上。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章