Search code examples
gem5

Icache and Dcache in Simple.py configuration of gem5


I am trying to understand the models generated using gem5. I simulated a build/X86/gem5.opt with the gem5/configs/learning_gem5/part1/simple.py configuration file provided in gem5 repo. In the output directory I get the following .dot graph:

enter image description here

I have the following doubts:

  1. Does this design not have any Instruction and Data Cache? I checked the config.ini file there were no configuration statistics such as ICache/Dcache size.
  2. What is the purpose of adding the icache_port and dcache_port? system.cpu.icache_port = system.membus.slave system.cpu.dcache_port = system.membus.slave

Solution

  • Does this design not have any Instruction and Data Cache? I checked the config.ini file there were no configuration statistics such as ICache/Dcache size.

    I'm not very familiar with that config, but unless caches were added explicitly somewhere, then there aren't caches.

    Just compare it to an se.py run e.g.:

    build/ARM/gem5.opt configs/example/se.py --cmd hello.out \
      --caches  --l2cache --l1d_size=64kB --l1i_size=64kB --l2_size=256kB`
    

    which definitely has caches, e.g. that config.ini at gem5 211869ea950f3cc3116655f06b1d46d3fa39fb3a contains:

    [system.cpu.dcache]
    size=65536
    

    What is the purpose of adding the icache_port and dcache_port?

    I'm not very familiar with the port system.

    I think ports are used as a way for components to communicate, often in master / slave pairs, e.g. CPU is a master and the cache is a slave. So here I think that the CPU port is there but there is nothing attached to it, so no caches.

    For example on the above se.py example we see this clearly:

    enter image description here