关于vtune的几个问题...
我profile选择了BUS_TRANS_ANY和MEM_LOAD_RETIRED.L2_LINE_MISS两个event,然后发现在一个函数中L2 cache miss很多,hotspot显示的位置刚好在load一个volatile变量之后,我的问题是:
1. hotspot的显示位置是精确的么?sampling interrrupt之后保留下来的pc位置就是发生cache miss的那条memory指令么?
2. 如果hotspot的显示是精确的,我不能理解为啥这个函数会有这么多的cache miss,这个函数基本上就是个循环,spin在一个变量上等待其状态改变,照理说他们都应该spin在L1 cache上,如果有lock也只应该lock l1 cache line,循环很小,不可能是线程自己evict出去,虽然别的线程也会读取这个spin的变量,那也应该是MESI的share状态,没有道理l2 miss那么多,有什么可能的解释么?
3. 我的cpu是quad-core nehalem,运行4个线程,BUS_TRANS_ANY的统计对每个线程/core是准确的么?Vtune能够知道这次的bus transaction是哪个线程/core触发的?
4. 我的Vtune都没有LLC_MISS,MEM_UNCORE_RETIRED.LOCAL_DRAM之类的event,版本是9.1,内核是2.6.9-67.ELsmp #1 SMP,是版本的问题么?
谢谢解疑。。