Hi Michael,

The short answer is that it should work. M5 (gem5) was created out of a desire 
to do multi-system simulation of TCP/IP and one of the experiments we did early 
on was cache placement of DMA data from the NIC. By default 
DMADevice::dmaRead() and DMADevice::dmaWrite() should issue standard cacheable 
requests. The read/write requests that the device is doing are no different 
than the read/write requests that a CPU is doing. All DMA devices do this in a 
sense as the IOCache is just a small cache that makes DMA operations coherent 
with the rest of memory (otherwise the devices wouldn't work because they 
couldn't read dirty data (e.g a descriptor ring) out of the caches). There are 
several possibilities. (1) There might be a bug in the code you're using, a 
year is a pretty long time with our code base. (2) You might have created some 
topology that isn't supported. (3) If your cache models don't support the 
is_top_level flag there could definitely be as issue with the cache trying to
  hand ownership to the device (which it shouldn't) in the case of full-block 
reads to dirty data.  A topology like the following should work with the 
current code base:

    CPU              NIC
   |  |              |
   I  D        IOC2/Bridge2
   |  |              |
   -------------------------
             |
             L2
             |
mem ---------------
           | 
         IOC1/Bridge1--------------
                       |     |
                    Other  Devices...
                    

You can see the bridge/cache pairs in our configuration files. The ports are 
setup to only allow accesses in one direction. The I/O cache participates in 
the coherences protocol and converts the read/write transaction into the 
appropriate coherency operations and the bridge provides memory mapped I/O 
access to the peripheral.

Hope that helps,

Ali


On Aug 29, 2011, at 4:01 PM, Michael Levenhagen wrote:

> Do the cache models in M5 support Cache Injection?
> 
> I've created a simulation where I have a memory mapped NIC that uses a 
> DmaDevice to read and write physical memory (note the memory is not 
> restricted to UNCACHEABLE). I've followed WriteReq packets  from the 
> DmaDevice to the Cache and it appears that the data in these packets is not 
> injected into the cache even if the cache block is present.  I've hacked  
> handleSnoop() so it injects write request into  the cache if the cache block 
> is present. This hack has allowed me to run MPI apps such as osu_bw and 
> osu_latency but I'm running into a problem, with another app, that looks like 
> a memory consistency issue. I'd consider my use of the DmaDevice to be pretty 
> standard so I'm stumped why I'm having a problem unless using it to access 
> CACHEABLE memory is not allowed.
> 
> Note that I'm using a snapshot of M5 from last fall.
> 
> Michael Levenhagen
> Sandia National Labs.
> _______________________________________________
> gem5-dev mailing list
> [email protected]
> http://m5sim.org/mailman/listinfo/gem5-dev
> 

_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to