gem5.git
10 years agoarm: Enable umask syscall in SE mode
Mitch Hayenga [Wed, 29 Jan 2014 00:00:51 +0000 (18:00 -0600)]
arm: Enable umask syscall in SE mode

Committed by: Nilay Vaish <nilay@cs.wisc.edu>

10 years agobase: Fix race condition in the socket listen function
Mitch Hayenga [Wed, 29 Jan 2014 00:00:51 +0000 (18:00 -0600)]
base: Fix race condition in the socket listen function

gem5 makes the incorrect assumption that by binding a socket, it
effectively has allocated a port. Linux only allocates ports once you call
listen on the given socket, not when you call bind.  So even if the port was
free when bind was called, another process (gem5 instance) could race in
between the bind & listen calls and steal the port. In the current code, if
the call to bind fails due to the port being in use (EADDRINUSE), gem5 retries
for a different port.  However if listen fails, gem5 just panics. The fix is
testing the return value of listen and re-trying if it was due to EADDRINUSE.

Committed by: Nilay Vaish <nilay@cs.wisc.edu>

10 years agomem: Remove redundant findVictim() input argument
Amin Farmahini [Wed, 29 Jan 2014 00:00:50 +0000 (18:00 -0600)]
mem: Remove redundant findVictim() input argument
The patch
(1) removes the redundant writeback argument from findVictim()
(2) fixes the description of access() function

Committed by: Nilay Vaish <nilay@cs.wisc.edu>

10 years agomem: Fixes a bug in simple_dram write merging
Amin Farmahini [Wed, 29 Jan 2014 00:00:49 +0000 (18:00 -0600)]
mem: Fixes a bug in simple_dram write merging
Fixes updating the value of size in the write merge function.

Committed by: Nilay Vaish <nilay@cs.wisc.edu>

10 years agox86: add a warning about the number of memory controllers
Nilay Vaish [Tue, 28 Jan 2014 13:15:53 +0000 (07:15 -0600)]
x86: add a warning about the number of memory controllers
When memory size > 3GB, print a warning that twice the number of memory
controllers would be created.

10 years agox86: use lfpimm instead of limm for fptan
Nilay Vaish [Tue, 28 Jan 2014 00:50:54 +0000 (18:50 -0600)]
x86: use lfpimm instead of limm for fptan

10 years agox86: implements x87 add/sub instructions
Nilay Vaish [Tue, 28 Jan 2014 00:50:53 +0000 (18:50 -0600)]
x86: implements  x87 add/sub instructions

10 years agox86: implements fxch instruction.
Nilay Vaish [Tue, 28 Jan 2014 00:50:52 +0000 (18:50 -0600)]
x86: implements fxch instruction.

10 years agox86: correct error in emms instruction.
Nilay Vaish [Tue, 28 Jan 2014 00:50:51 +0000 (18:50 -0600)]
x86: correct error in emms instruction.

10 years agoconfig: allow more than 3GB of memory for x86 simulations
Nilay Vaish [Tue, 28 Jan 2014 00:50:51 +0000 (18:50 -0600)]
config: allow more than 3GB of memory for x86 simulations
This patch edits the configuration files so that x86 simulations can have
more than 3GB of memory.  It also corrects a bug in the MemConfig.py script.

10 years agostats: update sparc fs stats
Nilay Vaish [Mon, 27 Jan 2014 19:30:37 +0000 (13:30 -0600)]
stats: update sparc fs stats

10 years agostats: update eio stats for recent changes
Steve Reinhardt [Mon, 27 Jan 2014 05:38:58 +0000 (00:38 -0500)]
stats: update eio stats for recent changes

10 years agostats: update stats for ARMv8 changes
Ali Saidi [Fri, 24 Jan 2014 21:29:34 +0000 (15:29 -0600)]
stats: update stats for ARMv8 changes

10 years agoarm: Add support for ARMv8 (AArch64 & AArch32)
ARM gem5 Developers [Fri, 24 Jan 2014 21:29:34 +0000 (15:29 -0600)]
arm: Add support for ARMv8 (AArch64 & AArch32)

Note: AArch64 and AArch32 interworking is not supported. If you use an AArch64
kernel you are restricted to AArch64 user-mode binaries. This will be addressed
in a later patch.

Note: Virtualization is only supported in AArch32 mode. This will also be fixed
in a later patch.

Contributors:
Giacomo Gabrielli    (TrustZone, LPAE, system-level AArch64, AArch64 NEON, validation)
Thomas Grocutt       (AArch32 Virtualization, AArch64 FP, validation)
Mbou Eyole           (AArch64 NEON, validation)
Ali Saidi            (AArch64 Linux support, code integration, validation)
Edmund Grimley-Evans (AArch64 FP)
William Wang         (AArch64 Linux support)
Rene De Jong         (AArch64 Linux support, performance opt.)
Matt Horsnell        (AArch64 MP, validation)
Matt Evans           (device models, code integration, validation)
Chris Adeniyi-Jones  (AArch64 syscall-emulation)
Prakash Ramrakhyani  (validation)
Dam Sunwoo           (validation)
Chander Sudanthi     (validation)
Stephan Diestelhorst (validation)
Andreas Hansson      (code integration, performance opt.)
Eric Van Hensbergen  (performance opt.)
Gabe Black

10 years agostats: update stats for cache occupancy and clock domain changes
Ali Saidi [Fri, 24 Jan 2014 21:29:33 +0000 (15:29 -0600)]
stats: update stats for cache occupancy and clock domain changes

10 years agoarch: Make all register index flattening const
Andreas Hansson [Fri, 24 Jan 2014 21:29:30 +0000 (15:29 -0600)]
arch: Make all register index flattening const

This patch makes all the register index flattening methods const for
all the ISAs. As part of this, readMiscRegNoEffect for ARM is also
made const.

10 years agochecker: CheckerCPU handling of MiscRegs was incorrect
Geoffrey Blake [Fri, 24 Jan 2014 21:29:30 +0000 (15:29 -0600)]
checker: CheckerCPU handling of MiscRegs was incorrect

The CheckerCPU model in pre-v8 code was not checking the
updates to miscellaneous registers due to some methods
for setting misc regs were not instrumented.  The v8 patches
exposed this by calling the instrumented misc reg update
methods and then invoking the checker before the main CPU had
updated its misc regs, leading to false positives about
register mismatches. This patch fixes the non-instrumented
misc reg update methods and places calls to the checker in
the proper places in the O3 model.

10 years agoarch, cpu: Add support for flattening misc register indexes.
Ali Saidi [Fri, 24 Jan 2014 21:29:30 +0000 (15:29 -0600)]
arch, cpu: Add support for flattening misc register indexes.

With ARMv8 support the same misc register id  results in accessing different
registers depending on the current mode of the processor. This patch adds
the same orthogonality to the misc register file as the others (int, float, cc).
For all the othre ISAs this is currently a null-implementation.

Additionally, a system variable is added to all the ISA objects.

10 years agocpu: Add support for Memory+Barrier instruction types in O3 cpu.
Giacomo Gabrielli [Fri, 24 Jan 2014 21:29:30 +0000 (15:29 -0600)]
cpu: Add support for Memory+Barrier instruction types in O3 cpu.

10 years agocpu: Add support for instructions that zero cache lines.
Ali Saidi [Fri, 24 Jan 2014 21:29:30 +0000 (15:29 -0600)]
cpu: Add support for instructions that zero cache lines.

10 years agocpu: Add CPU support for generatig wake up events when LLSC adresses are snooped.
Ali Saidi [Fri, 24 Jan 2014 21:29:30 +0000 (15:29 -0600)]
cpu: Add CPU support for generatig wake up events when LLSC adresses are snooped.

This patch add support for generating wake-up events in the CPU when an address
that is currently in the exclusive state is hit by a snoop. This mechanism is required
for ARMv8 multi-processor support.

10 years agomem: Add flag to request if it was generated by a page table walk
Giacomo Gabrielli [Fri, 24 Jan 2014 21:29:30 +0000 (15:29 -0600)]
mem: Add  flag to request if it was generated by a page table walk

10 years agomem: Add support for a security bit in the memory system
Giacomo Gabrielli [Fri, 24 Jan 2014 21:29:30 +0000 (15:29 -0600)]
mem: Add support for a security bit in the memory system

This patch adds the basic building blocks required to support e.g. ARM
TrustZone by discerning secure and non-secure memory accesses.

10 years agosim: Add openat/fstatat syscalls and fix mremap
Chris Adeniyi-Jones [Fri, 24 Jan 2014 21:29:30 +0000 (15:29 -0600)]
sim: Add openat/fstatat syscalls and fix mremap

This patch adds support for the openat and fstatat syscalls and
broadens the support for mremap to make it work on OS X.

10 years agomem: Remove explict cast from memhelper.
Ali Saidi [Fri, 24 Jan 2014 21:29:30 +0000 (15:29 -0600)]
mem: Remove explict cast from memhelper.

Previously we were casting the result type to the the memory type which
is incorrect for things like dual-memory operations which still return a
single result.

10 years agoCache: Collect very basic stats on tag and data accesses
Timothy M. Jones [Fri, 24 Jan 2014 21:29:30 +0000 (15:29 -0600)]
Cache: Collect very basic stats on tag and data accesses

Adds very basic statistics on the number of tag and data accesses within the
cache, which is important for power modelling.  For the tags, simply count
the associativity of the cache each time.  For the data, this depends on
whether tags and data are accessed sequentially, which is given by a new
parameter.  In the parallel case, all data blocks are accessed each time, but
with sequential accesses, a single data block is accessed only on a hit.

10 years agomem: per-thread cache occupancy and per-block ages
Dam Sunwoo [Fri, 24 Jan 2014 21:29:30 +0000 (15:29 -0600)]
mem: per-thread cache occupancy and per-block ages

This patch enables tracking of cache occupancy per thread along with
ages (in buckets) per cache blocks.  Cache occupancy stats are
recalculated on each stat dump.

10 years agobase: add support for probe points and common probes
Matt Horsnell [Fri, 24 Jan 2014 21:29:30 +0000 (15:29 -0600)]
base: add support for probe points and common probes

The probe patch is motivated by the desire to move analytical and trace code
away from functional code. This is achieved by the probe interface which is
essentially a glorified observer model.

What this means to users:
* add a probe point and a "notify" call at the source of an "event"
* add an isolated module, that is being used to carry out *your* analysis (e.g. generate a trace)
* register that module as a probe listener
Note: an example is given for reference in src/cpu/o3/simple_trace.[hh|cc] and src/cpu/SimpleTrace.py

What is happening under the hood:
* every SimObject maintains has a ProbeManager.
* during initialization (src/python/m5/simulate.py) first regProbePoints and
  the regProbeListeners is called on each SimObject.  this hooks up the probe
  point notify calls with the listeners.

FAQs:
Why did you develop probe points:
* to remove trace, stats gathering, analytical code out of the functional code.
* the belief that probes could be generically useful.

What is a probe point:
* a probe point is used to notify upon a given event (e.g. cpu commits an instruction)

What is a probe listener:
* a class that handles whatever the user wishes to do when they are notified
  about an event.

What can be passed on notify:
* probe points are templates, and so the user can generate probes that pass any
  type of argument (by const reference) to a listener.

What relationships can be generated (1:1, 1:N, N:M etc):
* there isn't a restriction. You can hook probe points and listeners up in a
  1:1, 1:N, N:M relationship. They become useful when a number of modules
  listen to the same probe points. The idea being that you can add a small
  number of probes into the source code and develop a larger number of useful
  analysis modules that use information passed by the probes.

Can you give examples:
* adding a probe point to the cpu's commit method allows you to build a trace
  module (outputting assembler), you could re-use this to gather instruction
  distribution (arithmetic, load/store, conditional, control flow) stats.

Why is the probe interface currently restricted to passing a const reference:
* the desire, initially at least, is to allow an interface to observe
  functionality, but not to change functionality.
* of course this can be subverted by const-casting.

What is the performance impact of adding probes:
* when nothing is actively listening to the probes they should have a
  relatively minor impact. Profiling has suggested even with a large number of
  probes (60) the impact of them (when not active) is very minimal (<1%).

10 years agosim: Expose the current voltage for each object as a stat
Andreas Hansson [Fri, 24 Jan 2014 21:29:30 +0000 (15:29 -0600)]
sim: Expose the current voltage for each object as a stat

10 years agosim: Expose the current clock period as a stat
Andreas Hansson [Fri, 24 Jan 2014 21:29:30 +0000 (15:29 -0600)]
sim: Expose the current clock period as a stat

This patch adds observability to the clock period of the clock domains
by including it as a stat.

As a result of adding this, the regressions will be updated in a
separate patch.

10 years agomem: track per-request latencies and access depths in the cache hierarchy
Matt Horsnell [Fri, 24 Jan 2014 21:29:30 +0000 (15:29 -0600)]
mem: track per-request latencies and access depths in the cache hierarchy

Add some values and methods to the request object to track the translation
and access latency for a request and which level of the cache hierarchy responded
to the request.

10 years agoconfig: Make the Clock a Tick parameter like Latency/Frequency
Andreas Hansson [Fri, 24 Jan 2014 21:29:29 +0000 (15:29 -0600)]
config: Make the Clock a Tick parameter like Latency/Frequency

This patch makes the Clock a TickParamValue just like
Latency/Frequency. There is no longer any need to distinguish it
(originally needed to support multiplication).

10 years agox86: Fix memory leak in table walker
Andreas Hansson [Fri, 24 Jan 2014 21:29:29 +0000 (15:29 -0600)]
x86: Fix memory leak in table walker

This patch fixes a memory leak in the table walker, by ensuring that
the sender state is deleted again if the request packet cannot be
successfully sent.

10 years agocpu: Relax check on squashed non-speculative instructions
Andreas Hansson [Fri, 24 Jan 2014 21:29:29 +0000 (15:29 -0600)]
cpu: Relax check on squashed non-speculative instructions

This patch relaxes the check performed when squashing non-speculative
instructions, as it caused problems with loads that were marked ready,
and then stalled on a blocked cache. The assertion is now allowing
memory references to be non-faulting.

10 years agoutil: updated Streamline flow to support ARM DS-5 v5.17 protocol
Dam Sunwoo [Fri, 24 Jan 2014 21:29:29 +0000 (15:29 -0600)]
util: updated Streamline flow to support ARM DS-5 v5.17 protocol

The previous flow supported ARM DS-5 v5.13 protocol.

10 years agocpu: remove faulty simpoint basic block inst count assertion
Dam Sunwoo [Fri, 24 Jan 2014 21:29:29 +0000 (15:29 -0600)]
cpu: remove faulty simpoint basic block inst count assertion

This patch removes an assertion in the simpoint profiling code that
asserts that a previously-seen basic block has the exact same number
of instructions executed as before. This can be false if the basic
block generates aborts or takes interrupts at different locations
within the basic block. The basic block profiling are not affected
significantly as these events are rare in general.

10 years agoruby: remove unused label no_vector
Nilay Vaish [Fri, 17 Jan 2014 17:02:15 +0000 (11:02 -0600)]
ruby: remove unused label no_vector

10 years agostats: updates due to changes to ruby
Nilay Vaish [Fri, 10 Jan 2014 22:19:58 +0000 (16:19 -0600)]
stats: updates due to changes to ruby

10 years agoruby: move all statistics to stats.txt, eliminate ruby.stats
Nilay Vaish [Fri, 10 Jan 2014 22:19:47 +0000 (16:19 -0600)]
ruby: move all statistics to stats.txt, eliminate ruby.stats

10 years agostats: add function for adding two histograms
Nilay Vaish [Fri, 10 Jan 2014 22:19:40 +0000 (16:19 -0600)]
stats: add function for adding two histograms
This patch adds a function to the HistStor class for adding two histograms.
This functionality is required for Ruby.  It also adds support for printing
histograms in a single line.

10 years agoruby: fix bug introduced to revision 8523754f8885
Nilay Vaish [Thu, 9 Jan 2014 16:45:50 +0000 (10:45 -0600)]
ruby: fix bug introduced to revision 8523754f8885

10 years agoruby: slicc: remove variable 'addr' used in calls to doTransition
Nilay Vaish [Wed, 8 Jan 2014 10:26:25 +0000 (04:26 -0600)]
ruby: slicc: remove variable 'addr' used in calls to doTransition
This variable causes trouble if a variable of same name is declared in a
protocol file. Hence it is being eliminated.

10 years agoruby: add a three level MESI protocol.
Nilay Vaish [Sat, 4 Jan 2014 06:03:34 +0000 (00:03 -0600)]
ruby: add a three level MESI protocol.

The first two levels (L0, L1) are private to the core, the third level (L2)is
possibly shared. The protocol supports clustered designs.  For example, one
can have two sets of two cores. Each core has an L0 and L1 cache. There are
two L2 controllers where each set accesses only one of the L2 controllers.

10 years agoruby: rename MESI_CMP_directory to MESI_Two_Level
Nilay Vaish [Sat, 4 Jan 2014 06:03:33 +0000 (00:03 -0600)]
ruby: rename MESI_CMP_directory to MESI_Two_Level

This is because the next patch introduces a three level hierarchy.

--HG--
rename : build_opts/ALPHA_MESI_CMP_directory => build_opts/ALPHA_MESI_Two_Level
rename : build_opts/X86_MESI_CMP_directory => build_opts/X86_MESI_Two_Level
rename : configs/ruby/MESI_CMP_directory.py => configs/ruby/MESI_Two_Level.py
rename : src/mem/protocol/MESI_CMP_directory-L1cache.sm => src/mem/protocol/MESI_Two_Level-L1cache.sm
rename : src/mem/protocol/MESI_CMP_directory-L2cache.sm => src/mem/protocol/MESI_Two_Level-L2cache.sm
rename : src/mem/protocol/MESI_CMP_directory-dir.sm => src/mem/protocol/MESI_Two_Level-dir.sm
rename : src/mem/protocol/MESI_CMP_directory-dma.sm => src/mem/protocol/MESI_Two_Level-dma.sm
rename : src/mem/protocol/MESI_CMP_directory-msg.sm => src/mem/protocol/MESI_Two_Level-msg.sm
rename : src/mem/protocol/MESI_CMP_directory.slicc => src/mem/protocol/MESI_Two_Level.slicc
rename : tests/long/fs/10.linux-boot/ref/x86/linux/pc-simple-timing-ruby-MESI_CMP_directory/config.ini => tests/long/fs/10.linux-boot/ref/x86/linux/pc-simple-timing-ruby-MESI_Two_Level/config.ini
rename : tests/long/fs/10.linux-boot/ref/x86/linux/pc-simple-timing-ruby-MESI_CMP_directory/ruby.stats => tests/long/fs/10.linux-boot/ref/x86/linux/pc-simple-timing-ruby-MESI_Two_Level/ruby.stats
rename : tests/long/fs/10.linux-boot/ref/x86/linux/pc-simple-timing-ruby-MESI_CMP_directory/simerr => tests/long/fs/10.linux-boot/ref/x86/linux/pc-simple-timing-ruby-MESI_Two_Level/simerr
rename : tests/long/fs/10.linux-boot/ref/x86/linux/pc-simple-timing-ruby-MESI_CMP_directory/simout => tests/long/fs/10.linux-boot/ref/x86/linux/pc-simple-timing-ruby-MESI_Two_Level/simout
rename : tests/long/fs/10.linux-boot/ref/x86/linux/pc-simple-timing-ruby-MESI_CMP_directory/stats.txt => tests/long/fs/10.linux-boot/ref/x86/linux/pc-simple-timing-ruby-MESI_Two_Level/stats.txt
rename : tests/long/fs/10.linux-boot/ref/x86/linux/pc-simple-timing-ruby-MESI_CMP_directory/system.pc.com_1.terminal => tests/long/fs/10.linux-boot/ref/x86/linux/pc-simple-timing-ruby-MESI_Two_Level/system.pc.com_1.terminal
rename : tests/quick/se/00.hello/ref/alpha/linux/simple-timing-ruby-MESI_CMP_directory/config.ini => tests/quick/se/00.hello/ref/alpha/linux/simple-timing-ruby-MESI_Two_Level/config.ini
rename : tests/quick/se/00.hello/ref/alpha/linux/simple-timing-ruby-MESI_CMP_directory/ruby.stats => tests/quick/se/00.hello/ref/alpha/linux/simple-timing-ruby-MESI_Two_Level/ruby.stats
rename : tests/quick/se/00.hello/ref/alpha/linux/simple-timing-ruby-MESI_CMP_directory/simerr => tests/quick/se/00.hello/ref/alpha/linux/simple-timing-ruby-MESI_Two_Level/simerr
rename : tests/quick/se/00.hello/ref/alpha/linux/simple-timing-ruby-MESI_CMP_directory/simout => tests/quick/se/00.hello/ref/alpha/linux/simple-timing-ruby-MESI_Two_Level/simout
rename : tests/quick/se/00.hello/ref/alpha/linux/simple-timing-ruby-MESI_CMP_directory/stats.txt => tests/quick/se/00.hello/ref/alpha/linux/simple-timing-ruby-MESI_Two_Level/stats.txt
rename : tests/quick/se/00.hello/ref/alpha/tru64/simple-timing-ruby-MESI_CMP_directory/config.ini => tests/quick/se/00.hello/ref/alpha/tru64/simple-timing-ruby-MESI_Two_Level/config.ini
rename : tests/quick/se/00.hello/ref/alpha/tru64/simple-timing-ruby-MESI_CMP_directory/ruby.stats => tests/quick/se/00.hello/ref/alpha/tru64/simple-timing-ruby-MESI_Two_Level/ruby.stats
rename : tests/quick/se/00.hello/ref/alpha/tru64/simple-timing-ruby-MESI_CMP_directory/simerr => tests/quick/se/00.hello/ref/alpha/tru64/simple-timing-ruby-MESI_Two_Level/simerr
rename : tests/quick/se/00.hello/ref/alpha/tru64/simple-timing-ruby-MESI_CMP_directory/simout => tests/quick/se/00.hello/ref/alpha/tru64/simple-timing-ruby-MESI_Two_Level/simout
rename : tests/quick/se/00.hello/ref/alpha/tru64/simple-timing-ruby-MESI_CMP_directory/stats.txt => tests/quick/se/00.hello/ref/alpha/tru64/simple-timing-ruby-MESI_Two_Level/stats.txt
rename : tests/quick/se/50.memtest/ref/alpha/linux/memtest-ruby-MESI_CMP_directory/config.ini => tests/quick/se/50.memtest/ref/alpha/linux/memtest-ruby-MESI_Two_Level/config.ini
rename : tests/quick/se/50.memtest/ref/alpha/linux/memtest-ruby-MESI_CMP_directory/ruby.stats => tests/quick/se/50.memtest/ref/alpha/linux/memtest-ruby-MESI_Two_Level/ruby.stats
rename : tests/quick/se/50.memtest/ref/alpha/linux/memtest-ruby-MESI_CMP_directory/simerr => tests/quick/se/50.memtest/ref/alpha/linux/memtest-ruby-MESI_Two_Level/simerr
rename : tests/quick/se/50.memtest/ref/alpha/linux/memtest-ruby-MESI_CMP_directory/simout => tests/quick/se/50.memtest/ref/alpha/linux/memtest-ruby-MESI_Two_Level/simout
rename : tests/quick/se/50.memtest/ref/alpha/linux/memtest-ruby-MESI_CMP_directory/stats.txt => tests/quick/se/50.memtest/ref/alpha/linux/memtest-ruby-MESI_Two_Level/stats.txt
rename : tests/quick/se/60.rubytest/ref/alpha/linux/rubytest-ruby-MESI_CMP_directory/config.ini => tests/quick/se/60.rubytest/ref/alpha/linux/rubytest-ruby-MESI_Two_Level/config.ini
rename : tests/quick/se/60.rubytest/ref/alpha/linux/rubytest-ruby-MESI_CMP_directory/ruby.stats => tests/quick/se/60.rubytest/ref/alpha/linux/rubytest-ruby-MESI_Two_Level/ruby.stats
rename : tests/quick/se/60.rubytest/ref/alpha/linux/rubytest-ruby-MESI_CMP_directory/simerr => tests/quick/se/60.rubytest/ref/alpha/linux/rubytest-ruby-MESI_Two_Level/simerr
rename : tests/quick/se/60.rubytest/ref/alpha/linux/rubytest-ruby-MESI_CMP_directory/simout => tests/quick/se/60.rubytest/ref/alpha/linux/rubytest-ruby-MESI_Two_Level/simout
rename : tests/quick/se/60.rubytest/ref/alpha/linux/rubytest-ruby-MESI_CMP_directory/stats.txt => tests/quick/se/60.rubytest/ref/alpha/linux/rubytest-ruby-MESI_Two_Level/stats.txt

10 years agoruby: remove cntrl_id from python config scripts.
Nilay Vaish [Sat, 4 Jan 2014 06:03:32 +0000 (00:03 -0600)]
ruby: remove cntrl_id from python config scripts.

10 years agoruby: add support for clusters
Nilay Vaish [Sat, 4 Jan 2014 06:03:31 +0000 (00:03 -0600)]
ruby: add support for clusters

A cluster over here means a set of controllers that can be accessed only by a
certain set of cores.  For example,  consider a two level hierarchy. Assume
there are 4 L1 controllers (private) and 2 L2 controllers.  We can have two
different hierarchies here:

a. the address space is partitioned between the two L2 controllers.  Each L1
controller accesses both the L2 controllers.  In this case, each L1 controller
is a cluster initself.

b. both the L2 controllers can cache any address.  An L1 controller has access
to only one of the L2 controllers.  In this case, each L2 controller
along with the L1 controllers that access it, form a cluster.

This patch allows for each controller to have a cluster ID, which is 0 by
default.  By setting the cluster ID properly,  one can instantiate hierarchies
with clusters.  Note that the coherence protocol might have to be changed as
well.

10 years agoruby: some small changes
Nilay Vaish [Sat, 4 Jan 2014 06:03:30 +0000 (00:03 -0600)]
ruby: some small changes

10 years agoconfig, x86: move kernel specification from tests to FSConfig.py stable_2014_02_15
Steve Reinhardt [Sat, 4 Jan 2014 01:08:44 +0000 (17:08 -0800)]
config, x86: move kernel specification from tests to FSConfig.py

For some reason, the default x86 kernel is specified in
tests/configs/x86_generic.py and not in configs/common/FSConfig.py,
where the kernels for all the other ISAs are.  This means that
running configs/example/fs.py for x86 fails because no kernel
is specified.  Moving the specification over fixes this problem.

There is another problem that this uncovers, which is that going
past the init stage (i.e., past where the regression test stops)
fails because the fsck test on the disk device fails, but that's
a separate issue.

10 years agopython: provide better error message for wrapped C++ methods
Steve Reinhardt [Sat, 4 Jan 2014 01:08:43 +0000 (17:08 -0800)]
python: provide better error message for wrapped C++ methods

If you successfully export a C++ SimObject method, but try to
invoke it from Python before the C++ object is created, you
get a confusing error that says the attribute does not exist,
making you question whether you successfully exported the
method at all.  In reality, your only problem is that you're
calling the method too soon.  This patch enhances the error
message to give you a better clue.

10 years agopython: don't die on assignment to cloned object
Steve Reinhardt [Sat, 4 Jan 2014 01:08:42 +0000 (17:08 -0800)]
python: don't die on assignment to cloned object

Updating the SimObject topology of a cloned hierarchy is a little
dangerous, in that cloning is a "deep copy" and the clone does not
inherit SimObject updates the same way it would inherit scalar
variable assignments.

However, because of various SimObject-valued proxy parameters,
like 'memories', 'clk_domain', and 'system', it turns out that
there are a number of implicit topology changes that happen at
instantiation, which means that these changes are impossible to
avoid.  So in order to make cloning systems useful, this error
has to go.  Changing it to a warning produces a lot of noise,
so it seems best just to delete it.

10 years agosim: Add support for dynamic frequency scaling
Christopher Torng [Mon, 30 Dec 2013 01:29:45 +0000 (19:29 -0600)]
sim: Add support for dynamic frequency scaling
This patch provides support for DFS by having ClockedObjects register
themselves with their clock domain at construction time in a member list.
Using this list, a clock domain can update each member's tick to the
curTick() before modifying the clock period.

Committed by: Nilay Vaish <nilay@cs.wisc.edu>

10 years agomips: Floating point convert bug fix
Christopher Torng [Mon, 30 Dec 2013 01:29:45 +0000 (19:29 -0600)]
mips: Floating point convert bug fix

In mips architecture, floating point convert instructions use the
FloatConvertOp format defined in src/arch/mips/isa/formats/fp.isa. The type
of the operands in the ISA description file (_sw for signed word, or _sf for
signed float, etc.) is  used to create a type for the operand in C++. Then the
operand is converted using the fpConvert() function in src/arch/mips/utility.cc.

If we are converting from a word to a float, and we want to convert 0xffffffff,
we expect -1 to be passed into fpConvert(). Instead, we see MAX_INT passed in.
Then fpConvert() converts _val_ to MAX_INT in single-precision floating point,
and we get the wrong value.

To fix it, the signs of the convert operands are being changed from unsigned to
signed in the MIPS ISA description.

Then, the FloatConvertOp format is being changed to insert a int32_t into the
C++ code instead of a uint32_t.

Committed by: Nilay Vaish <nilay@cs.wisc.edu>

10 years agostats: updates due to bug fixed in mesi coherence protocol
Nilay Vaish [Thu, 26 Dec 2013 21:18:58 +0000 (15:18 -0600)]
stats: updates due to bug fixed in mesi coherence protocol

10 years agoruby: fix bugs in mesi cmp directory protocol
Nilay Vaish [Thu, 26 Dec 2013 21:18:55 +0000 (15:18 -0600)]
ruby: fix bugs in mesi cmp directory protocol
This patch fixes couple of bugs in the L2 controller of the mesi cmp
directory protocol.

1. The state MT_I was transitioning to NP on receiving a clean writeback
from the L1 controller.  This patch makes it inform the directory controller
about the writeback.

2. The L2 controller was sending the dirty bit to the L1 controller and the
L2 controller used writeback from the L1 controller to update the dirty bit
unconditionally.  Now, the L1 controller always assumes that the incoming
data is clean.  The L2 controller updates the dirty bit only when the L1
controller writes to the block.

3. Certain unused functions and events are being removed.

10 years agoruby: slicc: replace max_in_port_rank with number of inports
Nilay Vaish [Sat, 21 Dec 2013 02:34:04 +0000 (20:34 -0600)]
ruby: slicc: replace max_in_port_rank with number of inports

This patch replaces max_in_port_rank with the number of inports.  The use of
max_in_port_rank was causing spurious re-builds and incorrect initialization
of variables in ruby related regression tests.  This was due to the variable
value being used across threads while compiling when it was not meant to be.

Since the number of inports is state machine specific value, this problem
should get solved.

10 years agoruby: declare variables to be unsigned in Address.hh
Nilay Vaish [Sat, 21 Dec 2013 02:34:03 +0000 (20:34 -0600)]
ruby: declare variables to be unsigned in Address.hh

10 years agoruby: mesi: remove owner and sharer fields from directory tags
Nilay Vaish [Sat, 21 Dec 2013 02:34:03 +0000 (20:34 -0600)]
ruby: mesi: remove owner and sharer fields from directory tags

The directory controller should not have the sharer field since there is
only one level 2 cache. Anyway the field was not in use.  The owner field
was being used to track the l2 cache version (in case of distributed l2) that
has the cache block under consideration.  The information is not required
since the version of the level 2 cache can be obtained from a subset of the
address bits.

10 years agosim: reset stats after startup
Nilay Vaish [Tue, 3 Dec 2013 16:51:40 +0000 (10:51 -0600)]
sim: reset stats after startup
Currently statistics are reset after the initial / checkpoint state
has been loaded. But ruby does some checkpoint processing in its
startup() function. So the stats need to be reset after the startup()
function has been called. This patch moves the class to stats.reset()
to achieve this change in functionality.

10 years agocpu: call BaseCPU startup() function in o3 cpu
Nilay Vaish [Tue, 3 Dec 2013 16:36:04 +0000 (10:36 -0600)]
cpu: call BaseCPU startup() function in o3 cpu

10 years agoutil: update checkpoint aggregation script
Nilay Vaish [Tue, 3 Dec 2013 16:36:03 +0000 (10:36 -0600)]
util: update checkpoint aggregation script
The checkpoint aggregation script had become outdated due to numerous changes
to checkpoints over the past couple of years.  This updates the script.  It
now supports aggregation for x86 architecture instead of alpha.  Also a couple
of new options have been added that specify the size of the memory file to be
created and whether or not the memory file should be compressed.

10 years agobase: Fix race in PollQueue and remove SIGALRM workaround
Andreas Sandberg [Fri, 29 Nov 2013 13:36:10 +0000 (14:36 +0100)]
base: Fix race in PollQueue and remove SIGALRM workaround

There is a race between enabling asynchronous IO for a file descriptor
and IO events happening on that descriptor. A SIGIO won't normally be
delivered if an event is pending when asynchronous IO is
enabled. Instead, the signal will be raised the next time there is an
event on the FD. This changeset simulates a SIGIO by setting the
async_io flag when setting up asynchronous IO for an FD. This causes
the main event loop to poll all file descriptors to check for pending
IO. As a consequence of this, the old SIGALRM hack should no longer be
needed and is therefore removed.

10 years agobase: Clean up signal handling
Andreas Sandberg [Fri, 29 Nov 2013 13:35:36 +0000 (14:35 +0100)]
base: Clean up signal handling

The PollEvent class dynamically installs a SIGIO and SIGALRM handler
when a file handler is registered. Most signal handlers currently get
registered in the initSignals() function. This changeset moves the
SIGIO/SIGALRM handlers to initSignals() to live with the other signal
handlers. The original code installs SIGIO and SIGALRM with the
SA_RESTART option to prevent syscalls from returning EINTR. This
changeset consistently uses this flag for all signal handlers to
ensure that other signals that trigger asynchronous behavior (e.g.,
statistics dumping) do not cause undesirable EINTR returns.

10 years agostats: updates due to changes to ticksToCycles()
Nilay Vaish [Tue, 26 Nov 2013 23:05:25 +0000 (17:05 -0600)]
stats: updates due to changes to ticksToCycles()

10 years agosim: correct ticksToCycles() function.
Nilay Vaish [Tue, 26 Nov 2013 23:05:22 +0000 (17:05 -0600)]
sim: correct ticksToCycles() function.

11 years agokvm: Set the perf exclude_host attribute if available
Andreas Sandberg [Tue, 15 Oct 2013 08:09:23 +0000 (10:09 +0200)]
kvm: Set the perf exclude_host attribute if available

The performance counting framework in Linux 3.2 and onwards supports
an attribute to exclude events generated by the host when running
KVM. Setting this attribute allows us to get more reliable
measurements of the guest machine. For example, on a highly loaded
system, the instruction counts from the guest can be severely
distorted by the host kernel (e.g., by page fault handlers).

This changeset introduces a check for the attribute and enables it in
the KVM CPU if present.

10 years agox86: Implementation of Int3 and Int_Ib in long mode
Christian Menard [Tue, 26 Nov 2013 16:51:07 +0000 (17:51 +0100)]
x86: Implementation of Int3 and Int_Ib in long mode

This is an implementation of the x86 int3 and int immediate
instructions for long mode according to 'AMD64 Programmers Manual
Volume 3'.

10 years agokvm: Remove the unused hostFreq member from BaseKvmCPU
Andreas Sandberg [Tue, 26 Nov 2013 16:40:58 +0000 (17:40 +0100)]
kvm: Remove the unused hostFreq member from BaseKvmCPU

10 years agosim: simulate with multiple threads and event queues
Steve Reinhardt ext:(%2C%20Nilay%20Vaish%20%3Cnilay%40cs.wisc.edu%3E%2C%20Ali%20Saidi%20%3CAli.Saidi%40ARM.com%3E) [Mon, 25 Nov 2013 17:21:00 +0000 (11:21 -0600)]
sim: simulate with multiple threads and event queues
This patch adds support for simulating with multiple threads, each of
which operates on an event queue.  Each sim object specifies which eventq
is would like to be on.  A custom barrier implementation is being added
using which eventqs synchronize.

The patch was tested in two different configurations:
1. ruby_network_test.py: in this simulation L1 cache controllers receive
   requests from the cpu. The requests are replied to immediately without
   any communication taking place with any other level.
2. twosys-tsunami-simple-atomic: this configuration simulates a client-server
   system which are connected by an ethernet link.

We still lack the ability to communicate using message buffers or ports. But
other things like simulation start and end, synchronizing after every quantum
are working.

Committed by: Nilay Vaish

11 years agocpu: allow the fetch buffer to be smaller than a cache line
Anthony Gutierrez [Fri, 15 Nov 2013 18:21:15 +0000 (13:21 -0500)]
cpu: allow the fetch buffer to be smaller than a cache line

the current implementation of the fetch buffer in the o3 cpu
is only allowed to be the size of a cache line. some
architectures, e.g., ARM, have fetch buffers smaller than a cache
line, see slide 22 at:
http://www.arm.com/files/pdf/at-exploring_the_design_of_the_cortex-a15.pdf

this patch allows the fetch buffer to be set to values smaller
than a cache line.

11 years agocpu: Fix Checker register index use
Andreas Hansson [Fri, 15 Nov 2013 08:47:10 +0000 (03:47 -0500)]
cpu: Fix Checker register index use

This patch fixes an issue in the checker CPU register indexing. The
code will not even compile using LTO as deep inlining causes the used
index to be outside the array bounds.

11 years agotests: suppress output on switcheroo tests
Steve Reinhardt [Thu, 14 Nov 2013 23:03:42 +0000 (15:03 -0800)]
tests: suppress output on switcheroo tests

The output from the switcheroo tests is voluminous and
(because it includes timestamps) highly sensitive to
minor changes, leading to extremely large updates to the
reference outputs.  This patch addresses this problem
by suppressing output from the tests.  An internal
parameter can be set to enable the output.  Wiring that
up to a command-line flag (perhaps even the rudimantary
-v/-q options in m5/main.py) is left for future work.

11 years agosim: fix event priority name for debug-start option
Anthony Gutierrez [Tue, 12 Nov 2013 16:46:48 +0000 (11:46 -0500)]
sim: fix event priority name for debug-start option

11 years agostats: Bump stats to match DRAM controller changes
Andreas Hansson [Fri, 1 Nov 2013 15:56:34 +0000 (11:56 -0400)]
stats: Bump stats to match DRAM controller changes

This patch encompasses all the stats updates needed to reflect the
changes to the DRAM controller.

11 years agomem: Fixes for DRAM stats accounting
Andreas Hansson [Fri, 1 Nov 2013 15:56:31 +0000 (11:56 -0400)]
mem: Fixes for DRAM stats accounting

This patch fixes a number of stats accounting issues in the DRAM
controller. Most importantly, it separates the system interface and
DRAM interface so that it is clearer what the actual DRAM bandwidth
(and consequently utilisation) is.

11 years agomem: Fix the LPDDR3 page size
Andreas Hansson [Fri, 1 Nov 2013 15:56:30 +0000 (11:56 -0400)]
mem: Fix the LPDDR3 page size

This patch corrects the LPDDR3 page size, which was set too low.

11 years agomem: Adding stats for DRAM power calculation
Neha Agarwal [Fri, 1 Nov 2013 15:56:28 +0000 (11:56 -0400)]
mem: Adding stats for DRAM power calculation

This patch adds stats which are used for offline power calculation
from the 'Micron Power Calculator' spreadsheet.

11 years agomem: Unify request selection for read and write queues
Neha Agarwal [Fri, 1 Nov 2013 15:56:27 +0000 (11:56 -0400)]
mem: Unify request selection for read and write queues

This patch unifies the request selection across read and write queues
for FR-FCFS scheduling policy. It also fixes the request selection
code to prioritize the row hits present in the request queues over the
selection based on earliest bank availability.

11 years agomem: Add a simple adaptive version of the open-page policy
Andreas Hansson [Fri, 1 Nov 2013 15:56:26 +0000 (11:56 -0400)]
mem: Add a simple adaptive version of the open-page policy

This patch adds a basic adaptive version of the open-page policy that
guides the decision to keep open or close by looking at the contents
of the controller queues. If no row hits are found, and bank conflicts
are present, then the row is closed by means of an auto
precharge. This is a well-known technique that should improve
performance in most use-cases.

11 years agomem: Just-in-time write scheduling in DRAM controller
Neha Agarwal [Fri, 1 Nov 2013 15:56:25 +0000 (11:56 -0400)]
mem: Just-in-time write scheduling in DRAM controller

This patch removes the untimed while loop in the write scheduling
mechanism and now schedule commands taking into account the minimum
timing constraint. It also introduces an optimization to track write
queue size and switch from writes to reads if the number of write
requests fall below write low threshold.

11 years agomem: Add tRRD as a timing parameter for the DRAM controller
Andreas Hansson [Fri, 1 Nov 2013 15:56:24 +0000 (11:56 -0400)]
mem: Add tRRD as a timing parameter for the DRAM controller

This patch adds the tRRD parameter to the DRAM controller. With the
recent addition of the actAllowedAt member for each bank, this
addition is trivial.

11 years agomem: Less conservative tRAS in DRAM configurations
Andreas Hansson [Fri, 1 Nov 2013 15:56:23 +0000 (11:56 -0400)]
mem: Less conservative tRAS in DRAM configurations

This patch changes the default values of the tRAS timing parameter to
be less conservative, and closer in line with existing parts.

11 years agomem: Make tXAW enforcement less conservative and per rank
Ani Udipi [Fri, 1 Nov 2013 15:56:22 +0000 (11:56 -0400)]
mem: Make tXAW enforcement less conservative and per rank

This patch changes the tXAW constraint so that it is enforced per rank
rather than globally for all ranks in the channel. It also avoids
using the bank freeAt to enforce the activation limit, as doing so
also precludes performing any column or row command to the
DRAM. Instead the patch introduces a new variable actAllowedAt for the
banks and use this to track when a potential activation can occur.

11 years agomem: Fix for 100% write threshold in DRAM controller
Neha Agarwal [Fri, 1 Nov 2013 15:56:21 +0000 (11:56 -0400)]
mem: Fix for 100% write threshold in DRAM controller

This patch fixes the controller when a write threshold of 100% is
used.  Earlier for 100% write threshold no data is written to memory
as writes never get triggered since this corner case is not
considered.

11 years agomem: Pick the next DRAM request based on bank availability
Andreas Hansson [Fri, 1 Nov 2013 15:56:20 +0000 (11:56 -0400)]
mem: Pick the next DRAM request based on bank availability

This patch changes the FCFS bit of FR-FCFS such that requests that
target the earliest available bank are picked first (as suggested in
the original work on FR-FCFS by Rixner et al). To accommodate this we
add functionality to identify a bank through a one-dimensional
identifier (bank id). The member names of the DRAMPacket are also
update to match the style guide.

11 years agomem: Use the same timing calculation for DRAM read and write
Ani Udipi [Fri, 1 Nov 2013 15:56:19 +0000 (11:56 -0400)]
mem: Use the same timing calculation for DRAM read and write

This patch simplifies the DRAM model by re-using the function that
computes the busy and access time for both reads and writes.

11 years agomem: Fix DRAM bank occupancy for streaming access
Ani Udipi [Fri, 1 Nov 2013 15:56:18 +0000 (11:56 -0400)]
mem: Fix DRAM bank occupancy for streaming access

This patch fixes an issue that allowed more than 100% bus utilisation
in certain cases.

11 years agomem: Schedule time for DRAM event taking tRAS into account
Ani Udipi [Fri, 1 Nov 2013 15:56:17 +0000 (11:56 -0400)]
mem: Schedule time for DRAM event taking tRAS into account

This patch changes the time the controller is woken up to take the
next scheduling decisions. tRAS is now handled in estimateLatency and
doDRAMAccess and we do not need to worry about it at scheduling
time. The earliest we need to wake up is to do a pre-charge, row
access and column access before the bus becomes free for use.

11 years agomem: Add tRAS parameter to the DRAM controller model
Ani Udipi [Fri, 1 Nov 2013 15:56:16 +0000 (11:56 -0400)]
mem: Add tRAS parameter to the DRAM controller model

This patch adds an explicit tRAS parameter to the DRAM controller
model. Previously tRAS was, rather conservatively, assumed to be tRCD
+ tCL + tRP. The default values for tRAS are chosen to match the
previous behaviour and will be updated later.

11 years agostats: Bump stats after shifting to SimpleMemory
Andreas Hansson [Fri, 1 Nov 2013 15:56:15 +0000 (11:56 -0400)]
stats: Bump stats after shifting to SimpleMemory

Match stats with new regression configs.

11 years agotest: Use SimpleMemory for atomic full-system tests
Andreas Hansson [Fri, 1 Nov 2013 15:56:14 +0000 (11:56 -0400)]
test: Use SimpleMemory for atomic full-system tests

Keep it simple and use the SimpleMemory rather than the DRAM
controller model for atomic full-system tests.

11 years agosim: Clarify the difference between tracing and debugging
Andreas Hansson [Fri, 1 Nov 2013 15:56:13 +0000 (11:56 -0400)]
sim: Clarify the difference between tracing and debugging

This patch changes the name the command-line options related to debug
output to all start with "debug" rather than being a mix of that and
"trace". It also makes it clear that the breakpoint time is specified
in ticks and not in cycles.

11 years agoARM: add support for TEEHBR access
Chander Sudanthi [Thu, 31 Oct 2013 18:41:13 +0000 (13:41 -0500)]
ARM: add support for TEEHBR access

Thumb2 ARM kernels may access the TEEHBR via thumbee_notifier
in arch/arm/kernel/thumbee.c.  The Linux kernel code just seems
to be saving and restoring the register.  This patch adds support
for the TEEHBR cp14 register.  Note, this may be a special case
when restoring from an image that was run on a system that
supports ThumbEE.

11 years agodev: Add 'OSC' oscillator sys control reg support to VersatileExpress
Matt Evans [Thu, 31 Oct 2013 18:41:13 +0000 (13:41 -0500)]
dev: Add 'OSC' oscillator sys control reg support to VersatileExpress

The VE motherboard provides a set of system control registers through which
various motherboard and coretile registers are accessed.  Voltage regulators and
oscillator (DLL/PLL) config are examples. These registers must be impleted to
boot Linux 3.9+ kernels.

11 years agodev: Add support for MSI-X and Capability Lists for ARM and PCI devices
Geoffrey Blake [Thu, 31 Oct 2013 18:41:13 +0000 (13:41 -0500)]
dev: Add support for MSI-X and Capability Lists for ARM and PCI devices

This patch adds the registers and fields to the PCI device to support
Capability lists and to support MSI-X in the GIC.

11 years agodev: Fix race conditions in IDE device on newer kernels
Geoffrey Blake [Thu, 31 Oct 2013 18:41:13 +0000 (13:41 -0500)]
dev: Fix race conditions in IDE device on newer kernels

Newer linux kernels and distros exercise more functionality in the IDE device
than previously, exposing 2 races. The first race is the handling of aborted
DMA commands would immediately report the device is ready back to the kernel
and cause already in flight commands to assert the simulator when they returned
and discovered an inconsitent device state.  The second race was due to the
Status register not being handled correctly, the interrupt status bit would get
stuck at 1 and the driver eventually views this as a bad state and logs the
condition to the terminal.  This patch fixes these two conditions by making the
device handle aborted commands gracefully and properly handles clearing the
interrupt status bit in the Status register.

11 years agobase: Add support for ipv6 into inet.hh/inet.cc
Geoffrey Blake [Thu, 31 Oct 2013 18:41:13 +0000 (13:41 -0500)]
base: Add support for ipv6 into inet.hh/inet.cc

11 years agocpu: Construct ROB with cpu params struct instead of each variable
Faissal Sleiman [Thu, 31 Oct 2013 18:41:13 +0000 (13:41 -0500)]
cpu: Construct ROB with cpu params struct instead of each variable

Most other structures/stages get passed the cpu params struct.

11 years agoconfig: Fix handling of parents for simobject vectors
Geoffrey Blake [Thu, 31 Oct 2013 18:41:13 +0000 (13:41 -0500)]
config: Fix handling of parents for simobject vectors

SimObjectVector objects did not provide the same interface to
the _parent attribute through get_parent() like a normal
SimObject.  It also handled assigning a _parent incorrectly
if objects in a SimObjectVector were changed post-creation,
leading to errors later when the simulator tried to execute.
This patch fixes these two omissions.

11 years agosim: added option to serialize SimLoopExitEvent
Dam Sunwoo [Thu, 31 Oct 2013 18:41:13 +0000 (13:41 -0500)]
sim: added option to serialize SimLoopExitEvent

SimLoopExitEvents weren't serialized by default. Some benchmarks
utilize a delayed m5 exit pseudo op call to terminate the simulation
and this event was lost when resuming from a checkpoint generated
after the pseudo op call. This patch adds the capability to serialize
the SimLoopExitEvents and enable serialization for m5_exit and m5_fail
pseudo ops by default. Does not affect other generic
SimLoopExitEvents.

11 years agomem: Add "const" attribute to Packet getters
Stephan Diestelhorst [Thu, 31 Oct 2013 18:41:13 +0000 (13:41 -0500)]
mem: Add "const" attribute to Packet getters

Add a "const" keywords to the getters in the Packet class so these can be
invoked on const Packet objects.