所谓的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占有率才会达到百分之几百的效果。
--------------------- 作者:费晓行 来源:CSDN 原文:https://blog.csdn.net/feixiaoxing/article/details/84980734 版权声明:本文为博主原创文章,转载请附上博文链接!