Hi all,

I'm trying to get M5 work with different line sizes in different caches (i-cache, d-cache and l2). I found that M5 works fine with a lot of scenarios where different caches have different line sizes among cores (I verified the simulated apps' outputs). However, when it comes to some other cases, especially when the L2 cache size is small (e.g. 32kB), I got errors "Tried to access/execute unmapped address XXX" from ItbPageFault::invoke() and NDtbMissFault::invoke().

I made M5 dump out messages throughout the memory access process during simulation. I found that the error is caused by an invalid virtual address of PC or data address. For example, in the read() function of TimingSimpleCPU, (system.cpu TimingSimpleCPU::read() addr = 7776240), the passed in parameter addr (which is the virtual address) got the value "7776240", which is obviously an invalid virtual address since in that case normal load/store has the vaddr of sth like "4832631768". Therefore, the next step, which is calling the TLB to translate the address, report such an error after looking up the page table.

There is no error if the line sizes are the same. So I suppose the error comes from line size differences. But I went through the M5 source code and found that actually memory access has taken the line size differences among cache levels into consideration by differentiating "size" stored in Request/Packet and the block size in each cache. Block filling functions are also written in a right manner. Moreover, the error comes from a bad virtual address in the first place, which indeed has nothing to do with cache accesses. I'm confused...

Any help will be appreciated!

Thanks!

--
Best Regards,

Wang, Weixun

_______________________________________________
m5-users mailing list
m5-users@m5sim.org
http://m5sim.org/cgi-bin/mailman/listinfo/m5-users

Reply via email to