运行环境:Linux
现象:
1. 只跑一个cpu时, 运行多个进程没有问题。
2.开启SMP后, 四个CPU能正常启动,但是一旦跑多任务(后台多起几个程序),就会百分之百卡死,不进异常。
3.开启SMP后,关闭L1/L2 Dcache后,按照同样方法跑多任务,就不会卡死。
看起开好像是cache一致性问题,请教大家有没有什么好的想法和debug手段?
运行环境:Linux
现象:
1. 只跑一个cpu时, 运行多个进程没有问题。
2.开启SMP后, 四个CPU能正常启动,但是一旦跑多任务(后台多起几个程序),就会百分之百卡死,不进异常。
3.开启SMP后,关闭L1/L2 Dcache后,按照同样方法跑多任务,就不会卡死。
看起开好像是cache一致性问题,请教大家有没有什么好的想法和debug手段?
在使用汇编优化neon时,发现一个问题:
假设函数的输入两个参数x[2048],y[2048],那么x,y的首地址是不连续的
当在汇编中只读x的数据时所用时间明显比即读取x,也读取y的数据要长很多,我猜想是由于cache没有高效利用的原因,即造成了hit miss的现象,有什么方法可以尽可能的利用cache呢?
汇编代码如下:
只读取x
vld1.32 {d0-d1}, [r0]!
vld1.32 {d2-d3}, [r0]!
读取x,y
vld1.32 {d0-d1}, [r0…
大家好,我在读取Cortex-A7 Timer的Physical Counter Register(CNTPCT)时遇到一个问题。 根据手册这个寄存器是通过CP15进行访问的,CRm=14,op1=0,长度是64bit。
我的代码是 mcrr p15, 0, r0, r1, c14。然而在执行时却被当作了Undefined Instruction。 在手册里的确提到了Undefined Instruction是MCRR可能的一种结果,但没有具体解释。
根据手册,在访问这个寄存器之前,已经在monitor…
目前想评估A7的L2 Cache对某些精简版Android系统性能影响,但是由于L1 D-cache与L2 cache公用一个使能位,当L1 d-cache使能后,L2 cache也必然使能;
所以,想请教如何在内核中使能L2 cache,但是L2 cache不起作用,前提是L1 D-cache依然有用。
hi, experts:
以Cortex-A7 CPU为例:
如果在程序执行过程中:发生了一个Asynchrous External Data Abort,它会很快进入Data Abort handler吗?
(Synchrous Data Abort会立即进入Data Abort handler.)
不清楚Asynchrous external data abort,什么时候才会进入Data abort handler!
best wishes,
hi, experts:
以Cortex-A7 MPCore为例:
如何判断一个Core已经成功切换到Non-Secure state?
MPCore reset后,通过读取SCR register,可知当前Core处于Secure state.
执行相关Non-Secure state切换代码后:访问SCR会hang住,这代表切换Non-Secure state成功了吗?
best wishes,
hi, experts:
CA7 CPU:
L2 DCache是一个unify type的DCache,并不区分Instruction and Data.
如果只Enable ICache:那么在预存取Instruction到L1 ICache的过程中,L2 DCache会参与进来吗?
best wishes,
hi, experts:
通过JTAG 接口,debug ARM Cortex-A7平台时:
JTAG tool与CPU Core连接后,通过halt命令,会让CPU停下来?
这是如何做到的?会做一些CoreSight相关register设置吗?
按我的理解:
1. 当我们设置Software breakpoint / Hardware breakpoint时,才会做一些register设置。
best wishes,
hi, experts:
咨询一个flush L2 DCache by MVA问题:
对于Cortex-A7,它的Cache Line = 64 bytes.
那么,通过by MVA方式clean cache,它的最小单位就是Cache Line吗?
例如:
一个Cache Line有64 bytes,而只有1个byte被更改过,变为dirty了。
那么flush的时候,是整条cache line都被flush出去吗?
best wishes,