隨想錄(smp的一些注意事項)
【 宣告:版權所有,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】
所謂的smp,其實就是在soc中出現多個cpu。比如,如果我們說手機是4核cpu,一般指的是soc有4個arm核心。因為自己曾經裸寫過smp的相關程式碼,執行效果還不錯,所以特地做一些紀錄,以備以後使用。
1、smp中一般有主核和從核之分,主核只有一個,從核可以有很多個。
2、一般主核是不能關閉的,但是從核是可以關閉,也可以重新喚醒的。
3、主核完成大部分系統啟動任務,等到系統差不多好的時候,開始喚醒從核。
4、主核和從核的起始執行位置是相同的,都在某個彙編檔案中,但是必須根據cpuid馬上分開。
5、主核和從核的c函式入口點是不一樣的。
6、中斷一般是均勻分佈在主核和從核上面的。
7、主核和從核的資料搶佔必須依靠自旋鎖來解決。
8、如果只是兩個核,那麼可以用佇列的方法完成資料同步。
9、smp可能會出現記憶體屏障,即一個核的亂序執行對另外一個核的cache同步造成了影響。
10、緊急的事情,主核和從核之間只能利用核間中斷來解決。
11、不同核執行的堆疊空間必須提前準備好。
12、bss資料只需要主核clear一遍,不需要每一個核clear一遍,反而有風險。
13、主核和從核之間可以有均衡負載,也可以沒有,不是非要和linux一樣。
14、主核和從核之間可以各自執行一個系統,也可以只執行一個系統。
15、多核除錯可以在qemu虛擬機器上面完成。
16、主核和從核之間的alu、tlb、cache是分開來的,但是float、mac有可能是共享的。
17、主核和從核的一級cache一般是分開來的,二級cache、三級cache一般是共享的。
18、主核和從核的cache同步一般是硬體自動完成,實現方法多采用mesi協議,有記憶體屏障的風險。
19、主核和從核之間的tlb同步、cache同步一定要及時,常常需要designer自己手工完成。
20、只有純運算的時候可以最大程度發揮smp的優勢,cpu佔有率才會達到百分之幾百的效果。