We're getting a variety of assertion errors in the memory and I/O subsystem after the latest round of patches. Things like:

panic: I/O Read - va0x801fc000005 size 1

or

build/ALPHA_FS/mem/cache/mshr.hh:228: MSHR::Target* MSHR::getTarget() const: Assertion `hasTargets()' failed.

We make the L3 cache like this, essentially:
class L1Cache(BaseCache):
    size = '32kB'
    assoc = 4
    block_size = 64
    latency = '3ns'
    num_cpus = 1
    mshrs = 10
    tgts_per_mshr = 5

class L2Cache(BaseCache):
    size = '256kB'
    assoc = 8
    block_size = 64
    latency = '9ns'
    num_cpus = 1
    mshrs = 20
    tgts_per_mshr = 12

class L3Cache(BaseCache):
    size = '8MB'
    assoc = 16
    block_size = 64
    latency = '25ns'
    num_cpus = 4
    mshrs = 80
    tgts_per_mshr = 12

and config_cache is changed to include:
        system.l3cache = L3Cache()
        system.tol3bus = Bus()
        system.l3cache.cpu_side = system.tol3bus.port
        system.l3cache.mem_side = system.membus.port
        system.l3cache.num_cpus = options.num_cpus

        for i in xrange(options.num_cpus):
system.cpu[i].addTwoLevelCacheHierarchy(L1Cache(), L1Cache(), L2Cache())
            system.cpu[i].connectMemPorts(system.tol3bus)

Anyone know what's going wrong with this configuration? It worked for most PARSEC workloads before the updates in the past 3-4 days.

Joe


On 6/17/2010 2:39 PM, Joe Gross wrote:
That seems to fix the segfault problem, based on my testing thus far.

I seem to have run across another obscure bug as well:
panic: Inconsistent DMA transfer state: dmaState = 2 devState = 0
   @ cycle 437119165559000

#0  0x00007ffff5c5b4b5 in *__GI_raise (sig=<value optimized out>) at
../nptl/sysdeps/unix/sysv/linux/raise.c:64
#1  0x00007ffff5c5ef50 in *__GI_abort () at abort.c:92
#2  0x00000000007086e5 in __exit_message (prefix=<value optimized out>,
code=<value optimized out>, func=<value optimized out>, file=<value
optimized out>, line=323,
      fmt=<value optimized out>, a01=..., a02=..., a03=..., a04=...,
a05=..., a06=..., a07=..., a08=..., a09=..., a10=..., a11=..., a12=...,
a13=..., a14=..., a15=..., a16=...)
      at build/ALPHA_FS/base/misc.cc:90
#3  0x00000000008eac25 in IdeDisk::doDmaTransfer (this=<value optimized
out>) at build/ALPHA_FS/dev/ide_disk.cc:323
#4  0x0000000000907a42 in DmaPort::recvTiming (this=0x2689370,
pkt=0xeb05620) at build/ALPHA_FS/dev/io_device.cc:146
#5  0x00000000004abb15 in Port::sendTiming (this=0x24f16d0,
pkt=0xeb05620) at build/ALPHA_FS/mem/port.hh:186
#6  Bus::recvTiming (this=0x24f16d0, pkt=0xeb05620) at
build/ALPHA_FS/mem/bus.cc:243
#7  0x00000000004dbd5b in Port::sendTiming (this=0x158e9d0) at
build/ALPHA_FS/mem/port.hh:186
#8  SimpleTimingPort::sendDeferredPacket (this=0x158e9d0) at
build/ALPHA_FS/mem/tport.cc:150
#9  0x0000000000413754 in EventQueue::serviceOne (this=<value optimized
out>) at build/ALPHA_FS/sim/eventq.cc:203
#10 0x000000000045e56a in simulate (num_cycles=9223372036854775807) at
build/ALPHA_FS/sim/simulate.cc:73

I was running dedup, from PARSEC, using the kernel and compiled binaries
that are provided.

Prior to that one I ran into a bug in the simulated program (same
simulator run, first attempt at running dedup):
[HOOKS] Entering ROI
*** glibc detected *** ./dedup: corrupted double-linked list:
0x00000200185351a0 ***

I don't think these are related to the 3-level cache setup, but I can't
be sure. We're still using PhysicalMemory also.

Joe


On 6/16/2010 1:21 PM, Steve Reinhardt wrote:
Yea, that even looks familiar... I feel like I've fixed this once
already, but obviously if I did it didn't get checked in.  I think
just changing this conditional to:
      if (prefetcher&&   !mshrQueue.isFull()) {
should take care of it.  Let me know either way, and if it does I'll
commit the fix.

Steve


On Wed, Jun 16, 2010 at 10:04 AM, Joe Gross<joegr...@umd.edu>   wrote:

Hello,

We've modified the cache hierarchy to include private L1, private L2 and a
shared L3 cache, but we get a segfault when running certain PARSEC
workloads. The prefetcher value is NULL, as we have it turned off because
the prefetcher is causing problems lately. Specifically, the problem is at:

Program received signal SIGSEGV, Segmentation fault.
BasePrefetcher::getPacket (this=0x0) at
build/ALPHA_FS/mem/cache/prefetch/base.cc:135
135         if (pf.empty()) {
(gdb) bt
#0  BasePrefetcher::getPacket (this=0x0) at
build/ALPHA_FS/mem/cache/prefetch/base.cc:135
#1  0x0000000000503ceb in Cache<LRU>::getNextMSHR() ()
#2  0x0000000000503dc0 in Cache<LRU>::getTimingPacket() ()
#3  0x000000000050a589 in Cache<LRU>::MemSidePort::sendPacket() ()
#4  0x0000000000413754 in EventQueue::serviceOne (this=<value optimized
out>) at build/ALPHA_FS/sim/eventq.cc:203
#5  0x000000000045e56a in simulate (num_cycles=9223372036854775807) at
build/ALPHA_FS/sim/simulate.cc:73
...

I think the problem is in cache_impl.hh at line 1305:

PacketPtr pkt = prefetcher->getPacket();

Other points in the cache always have a conditional "if (prefetcher)" before
they access it, but not at this point. Hopefully this is the only problem
and is easily fixed.

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


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

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

Reply via email to