下面編譯內(nèi)核:需要2分鐘30秒左右。
再來一遍:這說明make clean, drop_caches后時間也差不多。
現(xiàn)在我們關(guān)閉smt,只保留10個CPU:具體的關(guān)閉方法就是:
sudo?sh?-c?'echo?off?>?/sys/devices/system/cpu/smt/control'
這樣只剩下10個CPU,下面來編譯:時間2分51秒,相對于2分30秒,速度下降僅僅14%。這說明超線程SMT對性能的提升絕對沒有達(dá)到100%,甚至都沒有達(dá)到20%。我們現(xiàn)在重新開啟超線程:
?sudo?sh?-c?'echo?on?>?/sys/devices/system/cpu/smt/control'
看一下哪個CPU和哪個CPU是thread sibling:看起來CPU0和CPU10是一對,CPU1和CPU11是一對,依次類推。剛才我們關(guān)閉SMT是把CPU10-CPU19全關(guān)了,只留下每對里面的1個CPU,也就是留下了CPU0-CPU9。
在開啟SMT的時候(假設(shè)藍(lán)色和紅色是一個CORE里面的兩個CPU):在關(guān)閉SMT的時候,等于每對里面只留1個CPU:現(xiàn)在我們換一種關(guān)法,一對對關(guān),只留下五對:指令如下:實(shí)現(xiàn)效果如下:再重新編譯內(nèi)核:現(xiàn)在耗時是3分10秒,想對于所有CPU全開,下降27%。相對于每個core里面只關(guān)一個線程,下降12%。
這就比較神奇了?為什么我關(guān)了5個core,性能沒有下降100%呢?這至少說明一個問題,從5core到10core,Intel I9編譯內(nèi)核性能并沒有線性地scale。只是從3分10秒,提升到2分30秒。