gem5.git
9 years agodev, arm: Add gem5 extensions to support more than 8 cores
Karthik Sangaiah [Fri, 18 Sep 2015 15:49:28 +0000 (16:49 +0100)]
dev, arm: Add gem5 extensions to support more than 8 cores

Previous ARM-based simulations were limited to 8 cores due to
limitations in GICv2 and earlier. This changeset adds a set of
gem5-specific extensions that enable support for up to 256 cores.

When the gem5 extensions are enabled, the GIC uses CPU IDs instead of
a CPU bitmask in the GIC's register interface. To OS can enable the
extensions by setting bit 0x200 in ICDICTR.

This changeset is based on previous work by Matt Evans.

9 years agomem: remove acq/rel cmds from packet and add mem fence req
Tony Gutierrez [Thu, 10 Dec 2015 03:56:31 +0000 (22:56 -0500)]
mem: remove acq/rel cmds from packet and add mem fence req

9 years agosyscall_emul: don't check host fd when allocating target fd
Steve Reinhardt [Wed, 9 Dec 2015 19:47:43 +0000 (14:47 -0500)]
syscall_emul: don't check host fd when allocating target fd

There's a well-meaning check in Process::allocFD() to return an invalid
target fd (-1) if the incoming host fd is -1.  However, this means that
emulated drivers, which want to allocate a target fd that doesn't
correspond to a host fd, can't use -1 to indicate an intentionally
invalid host fd.

It turns out the allocFD() check is redundant, as callers always test
the host fd for validity before calling.  Also, callers never test the
return value of allocFD() for validity, so even if the test failed,
it would likely have the undesirable result of returning -1 to the
target app as a file descriptor without setting errno.

Thus the check is pointless and is now getting in the way, so it seems
we should just get rid of it.

9 years agoext: fix SST connector
Curtis Dunham [Tue, 8 Dec 2015 20:30:31 +0000 (14:30 -0600)]
ext: fix SST connector

Writeback no longer a MemCmd.

9 years agocpu: Support virtual addr in elastic traces
Radhika Jagtap [Mon, 7 Dec 2015 22:42:16 +0000 (16:42 -0600)]
cpu: Support virtual addr in elastic traces

This patch adds support to optionally capture the virtual address and asid
for load/store instructions in the elastic traces. If they are present in
the traces, Trace CPU will set those fields of the request during replay.

9 years agocpu: Create record type enum for elastic traces
Radhika Jagtap [Mon, 7 Dec 2015 22:42:16 +0000 (16:42 -0600)]
cpu: Create record type enum for elastic traces

This patch replaces the booleans that specified the elastic trace record
type with an enum type. The source of change is the proto message for
elastic trace where the enum is introduced. The struct definitions in the
elastic trace probe listener as well as the Trace CPU replace the boleans
with the proto message enum.

The patch does not impact functionality, but traces are not compatible with
previous version. This is preparation for adding new types of records in
subsequent patches.

9 years agoconfig: Enable elastic trace capture and replay in se/fs
Radhika Jagtap [Mon, 7 Dec 2015 22:42:16 +0000 (16:42 -0600)]
config: Enable elastic trace capture and replay in se/fs

This patch adds changes to the configuration scripts to support elastic
tracing and replay.

The patch adds a command line option to enable elastic tracing in SE mode
and FS mode. When enabled the Elastic Trace cpu probe is attached to O3CPU
and a few O3 CPU parameters are tuned. The Elastic Trace probe writes out
both instruction fetch and data dependency traces. The patch also enables
configuring the TraceCPU to replay traces using the SE and FS script.

The replay run is designed to resume from checkpoint using atomic cpu to
restore state keeping it consistent with FS run flow. It then switches to
TraceCPU to replay the input traces.

9 years agoutil: Add decode and encode scripts for elastic traces
Radhika Jagtap [Mon, 7 Dec 2015 22:42:15 +0000 (16:42 -0600)]
util: Add decode and encode scripts for elastic traces

This patch adds python scripts to parse a protobuf encoded O3CPU
elastic trace and convert it to a text file output and vice versa.

9 years agocpu: Add TraceCPU to playback elastic traces
Radhika Jagtap [Mon, 7 Dec 2015 22:42:15 +0000 (16:42 -0600)]
cpu: Add TraceCPU to playback elastic traces

This patch defines a TraceCPU that replays trace generated using the elastic
trace probe attached to the O3 CPU model. The elastic trace is an execution
trace with data dependencies and ordering dependencies annoted to it. It also
replays fixed timestamp instruction fetch trace that is also generated by the
elastic trace probe.

The TraceCPU inherits from BaseCPU as a result of which some methods need
to be defined. It has two port subclasses inherited from MasterPort for
instruction and data ports. It issues the memory requests deducing the
timing from the trace and without performing real execution of micro-ops.
As soon as the last dependency for an instruction is complete,
its computational delay, also provided in the input trace is added. The
dependency-free nodes are maintained in a list, called 'ReadyList',
ordered by ready time. Instructions which depend on load stall until the
responses for read requests are received thus achieving elastic replay. If
the dependency is not found when adding a new node, it is assumed complete.
Thus, if this node is found to be completely dependency-free its issue time is
calculated and it is added to the ready list immediately. This is encapsulated
in the subclass ElasticDataGen.

If ready nodes are issued in an unconstrained way there can be more nodes
outstanding which results in divergence in timing compared to the O3CPU.
Therefore, the Trace CPU also models hardware resources. A sub-class to model
hardware resources is added which contains the maximum sizes of load buffer,
store buffer and ROB. If resources are not available, the node is not issued.
The 'depFreeQueue' structure holds nodes that are pending issue.

Modeling the ROB size in the Trace CPU as a resource limitation is arguably the
most important parameter of all resources. The ROB occupancy is estimated using
the newly added field 'robNum'. We need to use ROB number as sequence number is
at times much higher due to squashing and trace replay is focused on correct
path modeling.

A map called 'inFlightNodes' is added to track nodes that are not only in
the readyList but also load nodes that are executed (and thus removed from
readyList) but are not complete. ReadyList handles what and when to execute
next node while the inFlightNodes is used for resource modelling. The oldest
ROB number is updated when any node occupies the ROB or when an entry in the
ROB is released. The ROB occupancy is equal to the difference in the ROB number
of the newly dependency-free node and the oldest ROB number in flight.

If no node dependends on a non load/store node then there is no reason to track
it in the dependency graph. We filter out such nodes but count them and add a
weight field to the subsequent node that we do include in the trace. The weight
field is used to model ROB occupancy during replay.

The depFreeQueue is chosen to be FIFO so that child nodes which are in
program order get pushed into it in that order and thus issued in the in
program order, like in the O3CPU. This is also why the dependents is made a
sequential container, std::set to std::vector. We only check head of the
depFreeQueue as nodes are issued in order and blocking on head models that
better than looping the entire queue. An alternative choice would be to inspect
top N pending nodes where N is the issue-width. This is left for future as the
timing correlation looks good as it is.

At the start of an execution event, first we attempt to issue such pending
nodes by checking if appropriate resources have become available. If yes, we
compute the execute tick with respect to the time then. Then we proceed to
complete nodes from the readyList.

When a read response is received, sometimes a dependency on it that was
supposed to be released when it was issued is still not released. This occurs
because the dependent gets added to the graph after the read was sent. So the
check is made less strict and the dependency is marked complete on read
response instead of insisting that it should have been removed on read sent.

There is a check for requests spanning two cache lines as this condition
triggers an assert fail in the L1 cache. If it does then truncate the size
to access only until the end of that line and ignore the remainder.
Strictly-ordered requests are skipped and the dependencies on such requests
are handled by simply marking them complete immediately.

The simulated seconds can be calculated as the difference between the
final_tick stat and the tickOffset stat. A CountedExitEvent that contains
a static int belonging to the Trace CPU class as a down counter is used to
implement multi Trace CPU simulation exit.

9 years agomem: Add instruction sequence number to request
Radhika Jagtap [Mon, 7 Dec 2015 22:42:15 +0000 (16:42 -0600)]
mem: Add instruction sequence number to request

This patch adds the instruction sequence number to the request and provides a
request constructor that accepts a sequence number for initialization.

9 years agoproto, probe: Add elastic trace probe to o3 cpu
Radhika Jagtap [Mon, 7 Dec 2015 22:42:15 +0000 (16:42 -0600)]
proto, probe: Add elastic trace probe to o3 cpu

The elastic trace is a type of probe listener and listens to probe points
in multiple stages of the O3CPU. The notify method is called on a probe
point typically when an instruction successfully progresses through that
stage.

As different listener methods mapped to the different probe points execute,
relevant information about the instruction, e.g. timestamps and register
accesses, are captured and stored in temporary InstExecInfo class objects.
When the instruction progresses through the commit stage, the timing and the
dependency information about the instruction is finalised and encapsulated in
a struct called TraceInfo. TraceInfo objects are collected in a list instead
of writing them out to the trace file one a time. This is required as the
trace is processed in chunks to evaluate order dependencies and computational
delay in case an instruction does not have any register dependencies. By this
we achieve a simpler algorithm during replay because every record in the
trace can be hooked onto a record in its past. The instruction dependency
trace is written out as a protobuf format file. A second trace containing
fetch requests at absolute timestamps is written to a separate protobuf
format file.

If the instruction is not executed then it is not added to the trace.
The code checks if the instruction had a fault, if it predicated
false and thus previous register values were restored or if it was a
load/store that did not have a request (e.g. when the size of the
request is zero). In all these cases the instruction is set as
executed by the Execute stage and is picked up by the commit probe
listener. But a request is not issued and registers are not written.
So practically, skipping these should not hurt the dependency modelling.

If squashing results in squashing younger instructions, it may happen that
the squash probe discards the inst and removes it from the temporary
store but execute stage deals with the instruction in the next cycle which
results in the execute probe seeing this inst as 'new' inst. A sequence
number of the last processed trace record is used to trap these cases and
not add to the temporary store.

The elastic instruction trace and fetch request trace can be read in and
played back by the TraceCPU.

9 years agoprobe: Add probe in Fetch, IEW, Rename and Commit
Radhika Jagtap [Mon, 7 Dec 2015 22:42:15 +0000 (16:42 -0600)]
probe: Add probe in Fetch, IEW, Rename and Commit

This patch adds probe points in Fetch, IEW, Rename and Commit stages as follows.

A probe point is added in the Fetch stage for probing when a fetch request is
sent. Notify is fired on the probe point when a request is sent succesfully in
the first attempt as well as on a retry attempt.

Probe points are added in the IEW stage when an instruction begins to execute
and when execution is complete. This points can be used for monitoring the
execution time of an instruction.

Probe points are added in the Rename stage to probe renaming of source and
destination registers and when there is squashing. These probe points can be
used to track register dependencies and remove when there is squashing.

A probe point for squashing is added in Commit to probe squashed instructions.

9 years agostats: Update to reflect changes to PCI handling
Andreas Sandberg [Sat, 5 Dec 2015 00:11:25 +0000 (00:11 +0000)]
stats: Update to reflect changes to PCI handling

9 years agodev: Rewrite PCI host functionality
Andreas Sandberg [Sat, 5 Dec 2015 00:11:24 +0000 (00:11 +0000)]
dev: Rewrite PCI host functionality

The gem5's current PCI host functionality is very ad hoc. The current
implementations require PCI devices to be hooked up to the
configuration space via a separate configuration port. Devices query
the platform to get their config-space address range. Un-mapped parts
of the config space are intercepted using the XBar's default port
mechanism and a magic catch-all device (PciConfigAll).

This changeset redesigns the PCI host functionality to improve code
reuse and make config-space and interrupt mapping more
transparent. Existing platform code has been updated to use the new
PCI host and configured to stay backwards compatible (i.e., no
guest-side visible changes). The current implementation does not
expose any new functionality, but it can easily be extended with
features such as automatic interrupt mapping.

PCI devices now register themselves with a PCI host controller. The
host controller interface is defined in the abstract base class
PciHost. Registration is done by PciHost::registerDevice() which takes
the device, its bus position (bus/dev/func tuple), and its interrupt
pin (INTA-INTC) as a parameter. The registration interface returns a
PciHost::DeviceInterface that the PCI device can use to query memory
mappings and signal interrupts.

The host device manages the entire PCI configuration space. Accesses
to devices decoded into the devices bus position and then forwarded to
the correct device.

Basic PCI host functionality is implemented in the GenericPciHost base
class. Most platforms can use this class as a basic PCI controller. It
provides the following functionality:

  * Configurable configuration space decoding. The number of bits
    dedicated to a device is a prameter, making it possible to support
    both CAM, ECAM, and legacy mappings.

  * Basic interrupt mapping using the interruptLine value from a
    device's configuration space. This behavior is the same as in the
    old implementation. More advanced controllers can override the
    interrupt mapping method to dynamically assign host interrupts to
    PCI devices.

  * Simple (base + addr) remapping from the PCI bus's address space to
    physical addresses for PIO, memory, and DMA.

9 years agocpu: fix unitialized variable which may cause assertion failure
Pau Cabre [Fri, 4 Dec 2015 23:54:03 +0000 (17:54 -0600)]
cpu: fix unitialized variable which may cause assertion failure

The assert in lsq_unit_impl.hh line 963 needs pktPending to be initialized to
NULL (I got the assertion failure several times without the fix).

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

9 years agoutil: term: drop CC from Makefile
Bjoern A. Zeeb [Fri, 4 Dec 2015 23:25:45 +0000 (17:25 -0600)]
util: term: drop CC from Makefile

With clang there are systems without gcc being installed anymore and we should
not rely on that.  This patch drops CC so that system's default compiler is
invoked.

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

9 years agoutil: DrainManager/Checkpoint changes in SystemC coupling
Abdul Mutaal Ahmad [Fri, 4 Dec 2015 23:20:07 +0000 (17:20 -0600)]
util: DrainManager/Checkpoint changes in SystemC coupling

Due to changes in Drain Manager, the lastest systemc coupling doesn't work. The
code for handling Checkpoint has been modified and it is now compatiable with
new drain manager.

Testing is being done on systemC coupling. It needs more testing to verify
checkpointing feature.

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

9 years agosim: Get rid of the non-const serialize() method
Andreas Sandberg [Fri, 4 Dec 2015 09:48:48 +0000 (09:48 +0000)]
sim: Get rid of the non-const serialize() method

The last SimObject using the legacy serialize API with non-const
methods has now been transitioned to the new API. This changeset
removes the serializeOld() methods from the serialization base class
as they are no longer used.

9 years agostats: Update to reflect changes to RealView platform code
Andreas Sandberg [Fri, 4 Dec 2015 00:19:05 +0000 (00:19 +0000)]
stats: Update to reflect changes to RealView platform code

9 years agoarm, config: Automatically discover available platforms
Andreas Sandberg [Fri, 4 Dec 2015 00:19:05 +0000 (00:19 +0000)]
arm, config: Automatically discover available platforms

Add support for automatically discover available platforms. The
Python-side uses functionality similar to what we use when
auto-detecting available CPU models. The machine IDs have been updated
to match the platform configurations. If there isn't a matching
machine ID, the configuration scripts default to -1 which Linux uses
for device tree only platforms.

9 years agodev, arm: Disable R/B swap in HDLCD by default
Andreas Sandberg [Fri, 4 Dec 2015 00:19:05 +0000 (00:19 +0000)]
dev, arm: Disable R/B swap in HDLCD by default

The HDLCD model implements a workaround that swaps the red and blue
channels. This works around an issue in certain old kernels. The new
driver doesn't seem to have this behavior, so disable the workaround
by default and enable it in the affected platforms.

9 years agodev, arm: Split MCC and DCC subsystems
Andreas Sandberg [Fri, 4 Dec 2015 00:19:05 +0000 (00:19 +0000)]
dev, arm: Split MCC and DCC subsystems

Devices behind the Versatile Express configuration controllers are
currently all lumped into one SimObject. This will make DTB generation
challenging since the DTB assumes them to be in different parts of the
hierarchy. It also makes it hard to model other CoreTiles without also
replicating devices from the motherboard.

This changeset splits the VExpressCoreTileCtrl into two subsystems:
VExpressMCC for all motherboard-related devices and CoreTile2A15DCC
for Core Tile specific devices.

9 years agosim: Add support for generating back traces on errors
Andreas Sandberg [Fri, 4 Dec 2015 00:12:58 +0000 (00:12 +0000)]
sim: Add support for generating back traces on errors

Add functionality to generate a back trace if gem5 crashes (SIGABRT or
SIGSEGV). The current implementation uses glibc's stack traversal
support if available and stubs out the call to print_backtrace()
otherwise.

9 years agoarm: Add support for automatic boot loader selection
Andreas Sandberg [Thu, 3 Dec 2015 23:53:37 +0000 (23:53 +0000)]
arm: Add support for automatic boot loader selection

Add support for automatically selecting a boot loader that matches the
guest system's kernel. Instead of accepting a single boot loader, the
ArmSystem class now accepts a vector of boot loaders. When
initializing a system, the we now look for the first boot loader with
an architecture that matches the kernel.

This changeset makes it possible to use the same system for both
64-bit and 32-bit kernels.

9 years agodev, mips: Remove the unused MaltaPChip class
Andreas Sandberg [Thu, 3 Dec 2015 23:09:34 +0000 (23:09 +0000)]
dev, mips: Remove the unused MaltaPChip class

The MaltaPChip class is currently unused and identical (except for the
class name) to the TsunamiPChip. If someone decides to implement PCI
for Malta, they should make sure to share code with the Tsunami
implementation if they are similar.

9 years agostats: Bump stats to match current behaviour
Andreas Hansson [Wed, 2 Dec 2015 14:58:24 +0000 (09:58 -0500)]
stats: Bump stats to match current behaviour

9 years agoconfig: Fix broken SimObject listing
Andreas Sandberg [Tue, 1 Dec 2015 13:01:05 +0000 (13:01 +0000)]
config: Fix broken SimObject listing

The gem5 option '--list-sim-objects' is supposed to list all available
SimObjects and their parameters. It currently chokes on SimObjects
with parameters that have an object instance as their default
value. This is caused by __str__ in SimObject trying to resolve its
complete path. When the path resolution method reaches the parent
object (a MetaSimObject since it hasn't been instantiated), it dies
with a Python exception.

This changeset adds a guard to stop path resolution if the parent
object is a MetaSimObject.

9 years agodev: Remove unnecessary header include
Andreas Sandberg [Tue, 24 Nov 2015 10:13:04 +0000 (10:13 +0000)]
dev: Remove unnecessary header include

--HG--
extra : rebase_source : 64046371962e98413757bc3ab0c0d48dfb11ff1e

9 years agomem: Fix search-replace issues in DRAMPower wrapper license
Andreas Hansson [Wed, 25 Nov 2015 18:52:56 +0000 (13:52 -0500)]
mem: Fix search-replace issues in DRAMPower wrapper license

Fix a number of unintentional insertions of 'const'.

9 years agoconfig: Added missing types to JSON/INI Python reader
Andrew Bardsley [Sun, 22 Nov 2015 10:10:21 +0000 (05:10 -0500)]
config: Added missing types to JSON/INI Python reader

Added the missing types EthernetAddr and Current to the JSON/INI file
reader example configs/example/read_config.py.

Also added __str__ to EthernetAddr to make values appear in the same form
in JSON an INI files.

9 years agosim: Update C++ config example to match SystemC example
Andrew Bardsley [Thu, 10 Sep 2015 15:10:49 +0000 (16:10 +0100)]
sim: Update C++ config example to match SystemC example

Update the use of the drain manager, and checkpointing to
match changes to gem5 since the example was written.

9 years agoarm, dev: Fix flash model serialization code typos
Geoffrey Blake [Sun, 22 Nov 2015 10:10:19 +0000 (05:10 -0500)]
arm, dev: Fix flash model serialization code typos

The flash model has typos in its serialization code for
unknownPages, locationTable, blockValidEntries, and blockEmptyEntries
arrays where it would save each entry in the array under the same
name in the checkpoint.  This patch fixes these typos.

9 years agocpu: Fix base FP and CC register index in o3 insertThread()
Nathanael Premillieu [Sun, 22 Nov 2015 10:10:19 +0000 (05:10 -0500)]
cpu: Fix base FP and CC register index in o3 insertThread()

Note that the method is not used, and could possibly be deleted.

9 years agoarm: Fix fplib 128-bit shift operators
Nathanael Premillieu [Sun, 22 Nov 2015 10:10:18 +0000 (05:10 -0500)]
arm: Fix fplib 128-bit shift operators

Appease clang.

9 years agoconfig: Minor fixes to the DRAM utilisation sweep
Andreas Hansson [Sun, 22 Nov 2015 10:10:17 +0000 (05:10 -0500)]
config: Minor fixes to the DRAM utilisation sweep

9 years agocpu: Fix memory leak in traffic generator
Andreas Hansson [Sun, 22 Nov 2015 10:10:16 +0000 (05:10 -0500)]
cpu: Fix memory leak in traffic generator

In cases where we discard the packet, make sure to also delete it and
the associated request.

9 years agocpu: Enforce 1 interrupt controller per thread
Andreas Sandberg [Fri, 20 Nov 2015 20:50:17 +0000 (14:50 -0600)]
cpu: Enforce 1 interrupt controller per thread

Consider it a fatal configuration error if the number of interrupt
controllers doesn't match the number of threads in an SMT
configuration.

9 years agoMerged changesets: 47e2adf7fb1a and b65d4e878ed2
Nilay Vaish [Mon, 16 Nov 2015 11:10:45 +0000 (05:10 -0600)]
Merged changesets: 47e2adf7fb1a and b65d4e878ed2

--HG--
extra : amend_source : c51de9ae5387aba6fae8403677054678beceb2ab

9 years agostats: updates due to recent chagnesets
Nilay Vaish [Mon, 16 Nov 2015 11:08:57 +0000 (05:08 -0600)]
stats: updates due to recent chagnesets

9 years agox86: Invalidating TLB entry on page fault
Swapnil Haria [Mon, 16 Nov 2015 11:08:54 +0000 (05:08 -0600)]
x86: Invalidating TLB entry on page fault

As per the x86 architecture specification, matching TLB entries need to be
invalidated on a page fault. For instance, after a page fault due to inadequate
protection bits on a TLB hit, the TLB entry needs to be invalidated. This
behavior is clearly specified in the x86 architecture manuals from both AMD and
Intel.  This invalidation is missing currently in gem5, due to which linux
kernel versions 3.8 and up cannot be simulated efficiently. This is exposed by
a linux optimisation in commit e4a1cc56e4d728eb87072c71c07581524e5160b1, which
removes a tlb flush on updating page table entries in x86.

Testing: Linux kernel versions 3.8 onwards were booting very slowly in FS mode,
due to repeated page faults (~300000 before the first print statement in a
bash file). Ensured that page fault rate drops drastically and observed
reduction in boot time from order of hours to minutes for linux kernel v3.8
and v3.11

9 years agox86: cpuid: add family to warn() message
Bjoern A. Zeeb [Mon, 16 Nov 2015 10:58:39 +0000 (04:58 -0600)]
x86: cpuid: add family to warn() message

doCpuid() has to identical warn messages about unimplemented functions.  Add
the family to the log message to make them distinguishable.

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

9 years agox86: pagetable walker: fix typo in comment
Bjoern A. Zeeb [Mon, 16 Nov 2015 10:58:39 +0000 (04:58 -0600)]
x86: pagetable walker: fix typo in comment

9 years agosparc: Make remote debugging with gdb work
Palle Lyckegaard [Mon, 16 Nov 2015 10:58:39 +0000 (04:58 -0600)]
sparc: Make remote debugging with gdb work
Remove sparc V8 TBR register from list of registers since it is not part of
sparc V9. This brings the number of registers in sync with what gdb expects

Without this patch gdb complains about receoved packet too long.

with this patch gdb is able to work properly with gem5 for remote debugging.

Note: gdb is version 7.8
Note: gdb is configured with --target=sparc64-sun-solaris2.8

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

9 years agostats: remove wb_penalized and wb_penalized_rate
Nilay Vaish [Mon, 16 Nov 2015 10:58:29 +0000 (04:58 -0600)]
stats: remove wb_penalized and wb_penalized_rate

9 years agoo3: drop unused statistic wbPenalized and wbPenalizedRate
Nilay Vaish [Mon, 16 Nov 2015 10:57:52 +0000 (04:57 -0600)]
o3: drop unused statistic wbPenalized and wbPenalizedRate

9 years agosim: support for distcc pump server settings
Joe Gross [Sun, 15 Nov 2015 22:56:43 +0000 (17:56 -0500)]
sim: support for distcc pump server settings

9 years agoarm: Add missing explicit overrides for classic caches
Andreas Sandberg [Sun, 15 Nov 2015 21:28:00 +0000 (21:28 +0000)]
arm: Add missing explicit overrides for classic caches

Make clang when compiling on OSX.

9 years agoruby: added stl vector of ints to be used by SLICC
Brad Beckmann [Mon, 20 Jul 2015 14:15:20 +0000 (09:15 -0500)]
ruby: added stl vector of ints to be used by SLICC

9 years agoslicc: fixes for the Address to Addr changeset (11025)
Tony Gutierrez [Fri, 13 Nov 2015 22:30:58 +0000 (17:30 -0500)]
slicc: fixes for the Address to Addr changeset (11025)

misc changes now that Address has become Addr including int to address util
function

9 years agoruby: add BoolVec
Joe Gross [Fri, 13 Nov 2015 22:30:56 +0000 (17:30 -0500)]
ruby: add BoolVec

The BoolVec typedef and insertion operator overload function simplify usage of
vectors of type bool

9 years agomem: add boolean to disable PacketQueue's size sanity check
Brad Beckmann [Mon, 20 Jul 2015 14:15:18 +0000 (09:15 -0500)]
mem: add boolean to disable PacketQueue's size sanity check

the sanity check, while generally useful for exposing memory system bugs,
may be spurious with respect to GPU workloads, which may generate many more
requests than typical CPU workloads. the large number of requests generated
by the GPU may cause the req/resp queues to back up, thus queueing more than
100 packets.

9 years agomisc: ignore object files and static libs in util/m5
Anthony Gutierrez [Fri, 13 Nov 2015 22:03:48 +0000 (17:03 -0500)]
misc: ignore object files and static libs in util/m5

9 years agodev, arm: Initialized the iccrpr register in the GIC
Andreas Sandberg [Wed, 11 Nov 2015 10:18:38 +0000 (10:18 +0000)]
dev, arm: Initialized the iccrpr register in the GIC

The IICRPR register in the GIC is currently not being initialized when
the GIC is instantiated. Initialize to the value mandated by the
architecture specification.

9 years agodev: Add basic checkpoint support to VirtIO9PProxy device
Sascha Bischoff [Thu, 5 Nov 2015 09:40:12 +0000 (09:40 +0000)]
dev: Add basic checkpoint support to VirtIO9PProxy device

This patch adds very basic checkpoint support for the VirtIO9PProxy
device. Previously, attempts to checkpoint gem5 with a present 9P
device caused gem5 to fatal as none of the state is tracked. We still
do not track any state, but we replace the fatal with a warning which
is triggered if the device has been used by the guest system. In the
event that it has not been used, we assume that no state is lost
during checkpointing. The warning is triggered on both a serialize and
an unserialize to ensure maximum visibility for the user.

9 years agodev: Remove unused header includes
Andreas Sandberg [Mon, 9 Nov 2015 13:44:15 +0000 (13:44 +0000)]
dev: Remove unused header includes

Devices should never need to include dev/pciconfall.hh.

--HG--
extra : amend_source : 3a6e56485d432b49e2af22407982fa785c0ccb68

9 years agodev: Don't access the platform directly in PCI devices
Andreas Sandberg [Mon, 9 Nov 2015 13:44:04 +0000 (13:44 +0000)]
dev: Don't access the platform directly in PCI devices

Cleanup PCI devices to avoid using the PciDevice::platform pointer
directly. The PCI-specific functionality provided by the Platform
should be accessed through the wrappers in PciDevice.

9 years agostats: Update stats to match cache changes
Andreas Hansson [Fri, 6 Nov 2015 08:26:50 +0000 (03:26 -0500)]
stats: Update stats to match cache changes

9 years agoconfig: Update memtest to stress test clean writebacks
Andreas Hansson [Fri, 6 Nov 2015 08:26:44 +0000 (03:26 -0500)]
config: Update memtest to stress test clean writebacks

This patch adds yet another twist to the memtest cache hierarchy, in that
the writeback_clean option is toggled at every level to match the
clusivity of the downstream cache.

9 years agomem: Add an option to perform clean writebacks from caches
Andreas Hansson [Fri, 6 Nov 2015 08:26:43 +0000 (03:26 -0500)]
mem: Add an option to perform clean writebacks from caches

This patch adds the necessary commands and cache functionality to
allow clean writebacks. This functionality is crucial, especially when
having exclusive (victim) caches. For example, if read-only L1
instruction caches are not sending clean writebacks, there will never
be any spills from the L1 to the L2. At the moment the cache model
defaults to not sending clean writebacks, and this should possibly be
re-evaluated.

The implementation of clean writebacks relies on a new packet command
WritebackClean, which acts much like a Writeback (renamed
WritebackDirty), and also much like a CleanEvict. On eviction of a
clean block the cache either sends a clean evict, or a clean
writeback, and if any copies are still cached upstream the clean
evict/writeback is dropped. Similarly, if a clean evict/writeback
reaches a cache where there are outstanding MSHRs for the block, the
packet is dropped. In the typical case though, the clean writeback
allocates a block in the downstream cache, and marks it writable if
the evicted block was writable.

The patch changes the O3_ARM_v7a L1 cache configuration and the
default L1 caches in config/common/Caches.py

9 years agoconfig: Update memtest to stress test cache clusivity
Andreas Hansson [Fri, 6 Nov 2015 08:26:42 +0000 (03:26 -0500)]
config: Update memtest to stress test cache clusivity

This patch adds an new twist to the memtest cache hierarchy, in that
it switches from mostly inclusive to mostly exclusive at every level
in the tree. This has helped weed out plenty issues, and serves as a
good stress tests.

9 years agomem: Add cache clusivity
Andreas Hansson [Fri, 6 Nov 2015 08:26:41 +0000 (03:26 -0500)]
mem: Add cache clusivity

This patch adds a parameter to control the cache clusivity, that is if
the cache is mostly inclusive or exclusive. At the moment there is no
intention to support strict policies, and thus the options are: 1)
mostly inclusive, or 2) mostly exclusive.

The choice of policy guides the behaviuor on a cache fill, and a new
helper function, allocOnFill, is created to encapsulate the decision
making process. For the timing mode, the decision is annotated on the
MSHR on sending out the downstream packet, and in atomic we directly
pass the decision to handleFill. We (ab)use the tempBlock in cases
where we are not allocating on fill, leaving the rest of the cache
unaffected. Simple and effective.

This patch also makes it more explicit that multiple caches are
allowed to consider a block writable (this is the case
also before this patch). That is, for a mostly inclusive cache,
multiple caches upstream may also consider the block exclusive. The
caches considering the block writable/exclusive all appear along the
same path to memory, and from a coherency protocol point of view it
works due to the fact that we always snoop upwards in zero time before
querying any downstream cache.

Note that this patch does not introduce clean writebacks. Thus, for
clean lines we are essentially removing a cache level if it is made
mostly exclusive. For example, lines from the read-only L1 instruction
cache or table-walker cache are always clean, and simply get dropped
rather than being passed to the L2. If the L2 is mostly exclusive and
does not allocate on fill it will thus never hold the line. A follow
on patch adds the clean writebacks.

The patch changes the L2 of the O3_ARM_v7a CPU configuration to be
mostly exclusive (and stats are affected accordingly).

9 years agomem: Avoid unnecessary snoops on writebacks and clean evictions
Ali Jafri [Fri, 6 Nov 2015 08:26:40 +0000 (03:26 -0500)]
mem: Avoid unnecessary snoops on writebacks and clean evictions

This patch optimises the handling of writebacks and clean evictions
when using a snoop filter. Instead of snooping into the caches to
determine if the block is cached or not, simply set the status based
on the snoop-filter result.

9 years agomem: Order packet queue only on matching addresses
Andreas Hansson [Fri, 6 Nov 2015 08:26:38 +0000 (03:26 -0500)]
mem: Order packet queue only on matching addresses

Instead of conservatively enforcing order for all packets, which may
negatively impact the simulated-system performance, this patch updates
the packet queue such that it only applies the restriction if there
are already packets with the same address in the queue.

The basic need for the order enforcement is due to coherency
interactions where requests/responses to the same cache line must not
over-take each other. We rely on the fact that any packet that needs
order enforcement will have a block-aligned address. Thus, there is no
need for the queue to know about the cacheline size.

9 years agomem: Enforce insertion order on the cache response path
Ali Jafri [Fri, 6 Nov 2015 08:26:37 +0000 (03:26 -0500)]
mem: Enforce insertion order on the cache response path

This patch enforces insertion order transmission of packets on the
response path in the cache. Note that the logic to enforce order is
already present in the packet queue, this patch simply turns it on for
queues in the response path.

Without this patch, there are corner cases where a request-response is
faster than a response-response forwarded through the cache. This
violation of queuing order causes problems in the snoop filter leaving
it with inaccurate information. This causes assert failures in the
snoop filter later on.

A follow on patch relaxes the order enforcement in the packet queue to
limit the performance impact.

9 years agomem: Use the packet delays and do not just zero them out
Andreas Hansson [Fri, 6 Nov 2015 08:26:36 +0000 (03:26 -0500)]
mem: Use the packet delays and do not just zero them out

This patch updates the I/O devices, bridge and simple memory to take
the packet header and payload delay into account in their latency
calculations. In all cases we add the header delay, i.e. the
accumulated pipeline delay of any crossbars, and the payload delay
needed for deserialisation of any payload.

Due to the additional unknown latency contribution, the packet queue
of the simple memory is changed to use insertion sorting based on the
time stamp. Moreover, since the memory hands out exclusive (non
shared) responses, we also need to ensure ordering for reads to the
same address.

9 years agomem: Align rules for sinking inhibited packets at the slave
Andreas Hansson [Fri, 6 Nov 2015 08:26:35 +0000 (03:26 -0500)]
mem: Align rules for sinking inhibited packets at the slave

This patch aligns how the memory-system slaves, i.e. the various
memory controllers and the bridge, identify and deal with sinking of
inhibited packets that are only useful within the coherent part of the
memory system.

In the future we could shift the onus to the crossbar, and add a
parameter "is_point_of_coherence" that would allow it to sink the
aforementioned packets.

9 years agomem: Do not treat CleanEvict as a write operation
Andreas Hansson [Fri, 6 Nov 2015 08:26:33 +0000 (03:26 -0500)]
mem: Do not treat CleanEvict as a write operation

This patch changes the CleanEvict command type to not be considered a
write. Initially it was made a zero-sized write to match the writeback
command, but as things developed it became clear that it causes more
problems than it solves. For example, the memory modules (and bridge)
should not consider the CleanEvict as a write, but instead discard
it. With this patch it will be neither a read, nor write, and as it
does not need a response the slave will simply sink it.

9 years agomem: Unify delayed packet deletion
Andreas Hansson [Fri, 6 Nov 2015 08:26:21 +0000 (03:26 -0500)]
mem: Unify delayed packet deletion

This patch unifies how we deal with delayed packet deletion, where the
receiving slave is responsible for deleting the packet, but the
sending agent (e.g. a cache) is still relying on the pointer until the
call to sendTimingReq completes. Previously we used a mix of a
deletion vector and a construct using unique_ptr. With this patch we
ensure all slaves use the latter approach.

9 years agomisc: Appease clang static analyzer
Andreas Hansson [Fri, 6 Nov 2015 08:26:16 +0000 (03:26 -0500)]
misc: Appease clang static analyzer

A few minor fixes to issues identified by the clang static analyzer.

9 years agomem: Check the XBar's port queues on functional snoops
Andreas Sandberg [Fri, 6 Nov 2015 08:26:09 +0000 (03:26 -0500)]
mem: Check the XBar's port queues on functional snoops

The CoherentXBar currently doesn't check its queued slave ports when
receiving a functional snoop. This caused data corruption in cases
when a modified cache lines is forwarded between two caches.

Add the required functional calls into the queued slave ports.

9 years agoconfigs: fix bug introduced due to 276ad9121192
Nilay Vaish [Wed, 4 Nov 2015 18:36:28 +0000 (12:36 -0600)]
configs: fix bug introduced due to 276ad9121192

I had made a typo in changeset 276ad9121192.  This changeset fixes it

9 years agomem: hmc: minor fixes
Erfan Azarkhish [Tue, 3 Nov 2015 18:17:58 +0000 (12:17 -0600)]
mem: hmc: minor fixes

This patch performs two minor fixes to DRAMCtrl.py and xbar.hh in favor of the
HMC patch series.

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

9 years agomem: hmc: serial link model
Erfan Azarkhish [Tue, 3 Nov 2015 18:17:57 +0000 (12:17 -0600)]
mem: hmc: serial link model

This changeset adds a serial link model for the Hybrid Memory Cube (HMC).
SerialLink is a simple variation of the Bridge class, with the ability to
account for the latency of packet serialization. Also trySendTiming has been
modified to correctly model bandwidth.

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

9 years agomem: hmc: adds controller
Erfan Azarkhish [Tue, 3 Nov 2015 18:17:56 +0000 (12:17 -0600)]
mem: hmc: adds controller

This patch models a simple HMC Controller. It simply schedules the incoming
packets to HMC Serial Links using a round robin mechanism.  This patch should
be applied in series with other patches modeling a complete HMC device.

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

9 years agomem: hmc: top level design
Erfan Azarkhish [Tue, 3 Nov 2015 18:17:56 +0000 (12:17 -0600)]
mem: hmc: top level design

This patch enables modeling a complete Hybrid Memory Cube (HMC) device. It
highly reuses the existing components in gem5's general memory system with some
small modifications. This changeset requires additional patches to model a
complete HMC device.

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

9 years agosparc: add missing parameter to makeSparcSystem()
Palle Lyckegaard [Tue, 3 Nov 2015 18:17:55 +0000 (12:17 -0600)]
sparc: add missing parameter to makeSparcSystem()

makeSparcSystem() in configs/common/FSConfig.py is missing the cmdLine
parameter Without the parameter the simulation fails to start.  With the
parameter the simulation starts properly.

9 years agoarm: Add secure flag to TableWalker request when needed
Nathanael Premillieu [Thu, 29 Oct 2015 12:48:26 +0000 (08:48 -0400)]
arm: Add secure flag to TableWalker request when needed

9 years agodev: Fix segfault in flash device
Sascha Bischoff [Thu, 29 Oct 2015 12:48:25 +0000 (08:48 -0400)]
dev: Fix segfault in flash device

Fix a bug in which the flash device would write out of bounds and
could either trigger a segfault and corrupt the memory of other
objects. This was caused by using pageSize in the place of
pagesPerBlock when running the garbage collector.

Also, added an assert to flag this condition in the future.

9 years agodev: Fix draining for UFSHostDevice and FlashDevice
Sascha Bischoff [Thu, 29 Oct 2015 12:48:24 +0000 (08:48 -0400)]
dev: Fix draining for UFSHostDevice and FlashDevice

This patch fixes the drain logic for the UFSHostDevice and the
FlashDevice. In the case of the FlashDevice, the logic for CheckDrain
needed to be reversed, whilst in the case of the UFSHostDevice check
drain was never being called. In both cases the system would never
complete draining if the initial attampt to drain failed.

9 years agokvm, arm: Fix compilation errors due to API changes
Victor Garcia [Thu, 29 Oct 2015 12:48:23 +0000 (08:48 -0400)]
kvm, arm: Fix compilation errors due to API changes

The checkpoint changes, along with the SMT patches have changed a
number of APIs. Adapt the ArmKvmCPU accordingly.

9 years agomem: Clarify cache MSHR handling on fill
Andreas Hansson [Thu, 29 Oct 2015 12:48:20 +0000 (08:48 -0400)]
mem: Clarify cache MSHR handling on fill

This patch addresses the upgrading of deferred targets in the MSHR,
and makes it clearer by explicitly calling out what is happening
(deferred targets are promoted if we get exclusivity without asking
for it).

9 years agopower: Implement Remote GDB
Boris Shingarov [Sun, 25 Oct 2015 23:01:52 +0000 (16:01 -0700)]
power: Implement Remote GDB

9 years agox86: Add missing explicit overrides for X86 devices
Andreas Hansson [Fri, 23 Oct 2015 13:51:12 +0000 (09:51 -0400)]
x86: Add missing explicit overrides for X86 devices

Make clang >= 3.5 happy when compiling build/X86/gem5.opt on OSX.

9 years agoarm: Add missing explicit overrides for ARM devices
Andreas Hansson [Fri, 23 Oct 2015 13:51:11 +0000 (09:51 -0400)]
arm: Add missing explicit overrides for ARM devices

Make clang >= 3.5 happy when compiling build/ARM/gem5.opt on OSX.

9 years agomem: Pass snoop retries through the CommMonitor
Andreas Hansson [Wed, 14 Oct 2015 17:32:28 +0000 (13:32 -0400)]
mem: Pass snoop retries through the CommMonitor

Allow the monitor to be placed after a snooping port, and do not fail
on snoop retries, but instead pass them on to the slave port.

9 years agoruby: profiler: provide the number of vnets through ruby system
Nilay Vaish [Wed, 14 Oct 2015 05:29:43 +0000 (00:29 -0500)]
ruby: profiler: provide the number of vnets through ruby system

The aim is to ultimately do away with the static function
Network::getNumberOfVirtualNetworks().

9 years agoruby: remove unused functionalRead() function.
Nilay Vaish [Wed, 14 Oct 2015 05:29:39 +0000 (00:29 -0500)]
ruby: remove unused functionalRead() function.

Not required since functional reads cannot rely on messages that are inflight.

9 years agoruby: garnet: flexible: refactor flit
Nilay Vaish [Wed, 14 Oct 2015 05:29:38 +0000 (00:29 -0500)]
ruby: garnet: flexible: refactor flit

9 years agomisc: Add explicit overrides and fix other clang >= 3.5 issues
Andreas Hansson [Mon, 12 Oct 2015 08:08:01 +0000 (04:08 -0400)]
misc: Add explicit overrides and fix other clang >= 3.5 issues

This patch adds explicit overrides as this is now required when using
"-Wall" with clang >= 3.5, the latter now part of the most recent
XCode. The patch consequently removes "virtual" for those methods
where "override" is added. The latter should be enough of an
indication.

As part of this patch, a few minor issues that clang >= 3.5 complains
about are also resolved (unused methods and variables).

9 years agomisc: Remove redundant compiler-specific defines
Andreas Hansson [Mon, 12 Oct 2015 08:07:59 +0000 (04:07 -0400)]
misc: Remove redundant compiler-specific defines

This patch moves away from using M5_ATTR_OVERRIDE and the m5::hashmap
(and similar) abstractions, as these are no longer needed with gcc 4.7
and clang 3.1 as minimum compiler versions.

9 years agostats: Update for UDelayEvent quiesce change
Joel Hestness [Sat, 10 Oct 2015 21:45:41 +0000 (16:45 -0500)]
stats: Update for UDelayEvent quiesce change

9 years agosim: Don't quiesce UDelayEvents with 0 latency
Joel Hestness [Sat, 10 Oct 2015 21:45:38 +0000 (16:45 -0500)]
sim: Don't quiesce UDelayEvents with 0 latency

ARM uses UDelayEvents to emulate kernel __*udelay functions and speed up
simulation. UDelayEvents call Pseudoinst::quiesceNs to quiesce the system for
a specified delay. Changeset 10341:0b4d10f53c2d introduced the requirement
that any quiesce process that is started must also be completed by scheduling
an EndQuiesceEvent. This change causes the CPU to hang if an IsQuiesce
instruction is executed, but the corresponding EndQuiesceEvent is not
scheduled.

Changeset 11058:d0934b57735a introduces a fix for uses of PseudoInst::quiesce*
that would conditionally execute the EndQuiesceEvent. ARM UDelayEvents specify
quiesce period of 0 ns (src/arch/arm/linux/system.cc), so changeset 11058
causes these events to now execute full quiesce processes, greatly increasing
the total instructions executed in kernel delay loops and slowing simulation.

This patch updates the UDelayEvent to conditionally execute
PseudoInst::quiesceNs (**a quiesce operation**) only if the specified
delay is >0 ns. The result is ARM delay loops no longer execute instructions
for quiesce handling, and regression time returns to normal.

9 years agoisa: Add parameter to pick different decoder inside ISA
Rekai Gonzalez Alberquilla [Fri, 9 Oct 2015 19:50:54 +0000 (14:50 -0500)]
isa: Add parameter to pick different decoder inside ISA

The decoder is responsible for splitting instructions in micro
operations (uops). Given that different micro architectures may split
operations differently, this patch allows to specify which micro
architecture each isa implements, so different cores in the system can
split instructions differently, also decoupling uop splitting
(microArch) from ISA (Arch). This is done making the decodification
calls templates that receive a type 'DecoderFlavour' that maps the
name of the operation to the class that implements it. This way there
is only one selection point (converting the command line enum to the
appropriate DecodeFeatures object). In addition, there is no explicit
code replication: template instantiation hides that, and the compiler
should be able to resolve a number of things at compile-time.

9 years agosim: Add relative break scheduling
Dylan Johnson [Fri, 9 Oct 2015 19:27:09 +0000 (14:27 -0500)]
sim: Add relative break scheduling

Add schedRelBreak() function, executable within a debugger, that sets a
breakpoint by relative rather than absolute tick.

9 years agoarch: clean up isa_parser error handling
Steve Reinhardt [Wed, 7 Oct 2015 00:26:50 +0000 (17:26 -0700)]
arch: clean up isa_parser error handling

Although some decent error messages were getting generated inside
isa_parser.py, they weren't always getting printed because of the
screwy way we were handling exceptions.  (Basically an inner
exception would get hidden by an outer exception, and the more
informative inner error message would not get printed.)

Also line numbers were messed up, since they were taken from the
lexer, which is typically a token (or more) ahead of the grammar
rule that's being matched.  Using the 'lineno' attribute that
PLY associates with the grammar production is more accurate.
The new LineTracker class extends lineno to track filenames as
well as line numbers.

9 years agosim: add ExecMacro to Exec* compound debug flags
Steve Reinhardt [Wed, 7 Oct 2015 00:26:50 +0000 (17:26 -0700)]
sim: add ExecMacro to Exec* compound debug flags

Really should have been there in the first place, IMO.
Makes debugging x86 execution a lot easier.

9 years agosim: print pid in output header
Steve Reinhardt [Wed, 7 Oct 2015 00:26:50 +0000 (17:26 -0700)]
sim: print pid in output header

This information is useful if you have a bunch of simulations running
and want to know which one to kill, but you've neglected to take
advantage of the previous patch and embed the pid in your output path.

9 years agox86: implement rcpps and rcpss SSE insts
Steve Reinhardt [Wed, 7 Oct 2015 00:26:50 +0000 (17:26 -0700)]
x86: implement rcpps and rcpss SSE insts

These are packed single-precision approximate reciprocal operations,
vector and scalar versions, respectively.

This code was basically developed by copying the code for
sqrtps and sqrtss.  The mrcp micro-op was simplified relative to
msqrt since there are no double-precision versions of this operation.

9 years agox86: implement fild, fucomi, and fucomip x87 insts
Steve Reinhardt [Wed, 7 Oct 2015 00:26:50 +0000 (17:26 -0700)]
x86: implement fild, fucomi, and fucomip x87 insts

fild loads an integer value into the x87 top of stack register.
fucomi/fucomip compare two x87 register values (the latter
also doing a stack pop).
These instructions are used by some versions of GNU libstdc++.

9 years agoext: fix SST connector
Curtis Dunham [Tue, 6 Oct 2015 23:08:28 +0000 (18:08 -0500)]
ext: fix SST connector

The renamings in changesets 8f5993cf (2015-03-23) "mem: rename
Locked/LOCKED to LockedRMW/LOCKED_RMW" and fdd4a895 (2015-07-03)
"mem: Split WriteInvalidateReq into write and invalidate" broke the
SST connector.  This commit repeats those renamings in ext/sst.