Commit Graph

162 Commits

Author SHA1 Message Date
36d9e77c96 import-trace: extend sanity checks to time1/2
Up to now, the sanity checks only tested equivalence classes
determined by dynamic instructions (instr1/instr2), although the
actual timing boundaries (time1/time2) have been the really relevant
information for quite some time now.  This change extends the checks
to time1/time2.

Change-Id: I53d1ed10684ff09f6b9f1245ef842dd0d85f2655
2014-11-07 11:40:53 +01:00
569dd3328b import-trace: sanity-check speedup
The sanity check testing whether the fault space is rectangular is
unnecessarily slow, as it joins the "trace" table without any reason,
and includes all variants instead of the currently imported one.

Change-Id: Icfe948290ec595209868952fc1639c979bd78d83
2014-11-07 11:37:49 +01:00
d30ffdd3e5 import-trace: sanity-check code deduplication
Change-Id: I098981dfe93d760e3a423a374be05dbad3ee9cc1
2014-11-07 11:29:50 +01:00
c00268242a Merge changes I7fe63611,I84ebbb50
* changes:
  util/DwarfReader, ElfImporter: import address ranges
  util/DwarfReader, ElfImporter: use unsigned addresses
2014-10-23 07:53:46 +02:00
b1b1108583 bochs-experiment-runner: -j option for parallel operation
Change-Id: I29e659da0892fdcfc170dccafa5917593e22776a
2014-10-22 19:07:47 +02:00
6bbb237bd9 resultbrowser: Do not hardcode result table
For the objdump retrieval, the result_VEZS.. was used. Instead of that
hardcoded string, the parameter should be used instead.

Change-Id: I757527bde2bb7ac0d4e98293b606ad8438cc76e4
2014-10-22 16:35:18 +02:00
5378573b1d util/DwarfReader, ElfImporter: import address ranges
This change implements the following:
-DwarfReader now exports the address range of linetable-entries instead of
	only the first address
-ElfImporter saves this range alongside the mapping

Change-Id: I7fe6361178f761a8f605a44bb0183c56a236cc95
2014-10-22 15:42:05 +02:00
d94b005be2 util/DwarfReader, ElfImporter: use unsigned addresses
This change alters DwarfReader and import-trace's ElfImporter so that they use
unsigned int for static address and line numbers instead of signed int.

Change-Id: I84ebbb500afd7cd4d93b137a35dcf736dc679fab
2014-10-22 14:30:43 +02:00
8fcbc7eeae import-trace: ElfImporter cleanups
-  added several insert_multiple() flushes (which completely broke
    the import before)
 -  import_source_code() refactored
 -  parameter naming improved
 -  better error handling
 -  whitespace/coding-style cleanups
 -  documentation added + cleanups

Change-Id: I70ac95391b9678e0dcce8adfa7df69a4f91ca30d
2014-10-15 11:42:29 +02:00
31166f990e import-trace: fix source line mapping to file IDs
Up to now, source code lines and mappings from static instruction
addresses to lines could be linked to the wrong file if
dbg_filename.path contained duplicates.  This is unfortunately the
normal case when importing multiple variants of the same program into
the database.

Change-Id: I57e71379584d7b01177606192b3aa644846225db
2014-10-08 13:08:05 +02:00
99f5d2833e ElfImporter: removed --debug, refactored code
This change removes the "--debug" parameter, which previously imported the
mapping of source code lines to static instructions into the database. This
mapping is useless by itself (i.e. without "--sources"), which is why its
code was refactored into the code handling "--sources".

Change-Id: I4700eb0a98661f4df9eb3c190f00dcbe4df0e200
2014-10-07 13:28:03 +02:00
ebbf35c509 Merge branch 'tools-report-unknown-parameters' 2014-10-01 13:58:57 +02:00
b0e13b17c9 tools: abort at unknown cmdline parameters
This change makes all C++-based tools in tools/ abort when they
encounter an unknown commandline parameter (both option or
non-option).  This has already caused some confusion, as in some cases
unexpected behaviour can be the result.  For example, "prune-trace -t
mytrace.tc -d database" up to now ignored the "-t" parameter, took
"mytrace.tc" as the first non-option parameter (and ignored it); as no
option parameter may follow the non-option parameters, all other
options were ignored as well.

Change-Id: Ia0812a518c4760fa28ed54979c81f43fa7aa096e
2014-09-25 17:14:08 +02:00
db2a0dc056 prune-trace: fix pruner listing change
Commit 89817cf13f did not completely
remove the manual pruner instantiation code.

Change-Id: I00dab9e3f4f3e2acf1d0f285237cc03a968aabfb
2014-09-18 13:45:44 +02:00
020af0ef6f prune-trace: fixed errors in help output
This change fixes glitches in the help's text.

Change-Id: I3a492c95ffa516f891dc807c875fab1146768a6e
2014-09-18 13:09:28 +02:00
0208e80dbb Merge branch 'sampling'
Conflicts:
	src/core/cpn/DatabaseCampaign.cc

Change-Id: Ic11d9ce26546bccba11768383a8fda6a3458530f
2014-09-08 15:36:21 +02:00
89817cf13f prune-trace: list available pruners
By using the AliasedRegistry, "prune-trace --help" (and
"prune-trace -p '?'") now lists all available Pruners to the user.

Change-Id: Ib5e3d00aabc37e6d48d804d2d709812af3f7efb2
2014-08-28 13:58:46 +02:00
84cfa2ae42 Merge commit '0da8ba0dec111d78292455bb5f17c6045820db25' 2014-08-28 12:04:34 +02:00
f98871dd5a prune-trace: preserve existing data
With this change, prune-trace checks for existing fsppilot/fspgroup
entries for each variant to be pruned, and skips the variant in this
case.  This safety measure can be switched off with --overwrite.

Change-Id: I7e758a9853a25685ca176cf1a1810523753cdd4a
2014-08-28 11:57:40 +02:00
ebb307f3ee Resultbrowser: Integrate pruning intervals
Change-Id: I27b1eb087571e9470aa35e35e23db2e130b9f7c0
2014-08-25 13:45:47 +02:00
0da8ba0dec prune-trace: added "sampling with fault expansion"
The FESamplingPruner implements the fault-expansion variance reduction
technique (FE-VRT) as described in: Smith, D. Todd and Johnson, Barry W. and
Andrianos, Nikos and Profeta, III, Joseph A., "A variance-reduction technique
via fault-expansion for fault-coverage estimation" (1997), 366--374.

Change-Id: I04a0c9bb2622974278bd8c73793e51451119e650
2014-07-03 15:42:25 +02:00
0e1ed1feab prune-trace+DBCampaign: default to variant/benchmark %
If no --variant / --benchmark is specified, it's more reasonable to
prune or run *all* variants/benchmarks (using the wildcard "%")
instead of defaulting to "none"/"none".  The trivial case with only
one single variant/benchmark (which may still be "none"/"none" if
import-trace's default is used) is still covered by this new default
behavior.

Change-Id: I0e9001137d5e052183dd74211e2edbcfab749528
2014-07-03 15:42:25 +02:00
9a81ab4222 Database: more flexible get_variants()
This change moves prune-trace's --variants-exclude / --benchmarks-exclude
capabilities to Database::get_variants() to make it available to all users.

Change-Id: Icbc6bb1a3ae7c846d2de40b881f47a9cc1ed7bbf
2014-07-03 15:42:25 +02:00
5efebea5d1 prune-trace: limit row deletion to the pruner's FSP method
Otherwise it's not possible to keep a "basic" and a "sampling" pruned
version of one variant in the same database.

Change-Id: Ic71eb27ea16df23e2289cbf9f96ae10209745791
2014-07-03 15:42:25 +02:00
0cf5a34a9f prune-trace: pruners may add own command-line switches
Change-Id: I23293e7e6cf8ab1c3456337ba5e4af9b5e106ccb
2014-07-03 15:42:25 +02:00
ad0a15855d import-trace: log output number formatting fixed
Change-Id: Ifb81df86cb16254c04c946fa2cefca7030d2dd7a
2014-06-26 13:52:39 +02:00
7394a2cd53 import-trace: let RegisterImporter ignore unknown IP
This change makes the RegisterImporter continue importing if it
encounters an instruction pointer that is not part of the disassembled
ELF binary (and, thus, cannot be disassembled).  This is OK if we
don't want to inject into registers used by these instructions.

Change-Id: Ia9b5e7f789367f8386d63f235451dae5d399610d
2014-06-26 13:52:18 +02:00
c827750090 Merge branch 'failpanda'
Conflicts:
	src/core/comm/DatabaseCampaignMessage.proto.in
	src/core/cpn/CMakeLists.txt
	src/core/cpn/DatabaseCampaign.cc
	src/core/sal/ConcreteCPU.hpp
	src/core/sal/SALConfig.hpp
	src/core/util/CMakeLists.txt

Change-Id: Id86b93d0e3ea4d9963fcc88605eec0603575ec83
2014-06-03 12:24:49 +02:00
7ab5a491ed dump-hops: needs CONFIG_INJECTIONPOINT_HOPS
Change-Id: Id884e968c903372d4f81748fbc496fea0fb7bc9e
2014-06-03 11:47:21 +02:00
277958b31b cleanups
Change-Id: I8022d937477668253c613e97c3a579ae65084b1e
2014-06-03 11:47:20 +02:00
6b1f1eba9d compiler warning fixes
The fix for tools/convert-trace/Gem5Converter.cc repairs a real issue
which caused a runtime warning to never be displayed.

Change-Id: I5d94acdbffc99d5f2a78f047062c011c6f8ab4e3
2014-04-27 19:03:23 +02:00
73843fa634 import-trace: help sports all available importers
This change extends import-trace's help functionality for importers,
adds the ?-operator to option "-i" and refactors main.cc a little.
The extensions are "doing something useful with the AliasedRegistry"
and are merely listings of all importers' prime aliases.

Change-Id: I7bb184fc45dd9f90664e37455edfccc704d99ef1
2014-04-25 08:34:01 +02:00
af92a751d9 import-trace: alias-based (importer) registry
This change implements a generic registry in order to clean up import-trace's
code - it's possible (and reasonable) to use the registry for pruners as well.
Importer now extends AliasedRegisterable; all importers have been adapted
to suit the interface/abstract methods.
Each AliasedRegisterable should have at least one alias (the class' name
is a sensible choice) but can have several. The first specified alias is
the class' prime alias which can be used e.g. to list all registered objects.

Change-Id: If6daa34edce35a3b0194e4ba67ed3b44b74a49b0
2014-04-25 08:34:01 +02:00
ea4c350bcc VisualFAIL beta ;)
Change-Id: Ia40fe09cdf520926d00b9c39c983c925099501bc
2014-04-07 12:22:33 +02:00
11f77f0228 tools/import-trace: FullTraceImporter added
The FullTraceImporter imports every ip-event into the database.

Change-Id: I1c0ce2a0aae72dcd925930861780f2719d37b985
2014-04-05 16:57:13 +02:00
84a03b55ff import-trace: limit to general-purpose registers
This change limits fault injection to general-purpose registers, instead of
relying on the LLVM/Fail* bridge to only recognize the status register
(EFLAGS on x86) and general-purpose registers.  Since this bridge just
learned to translate x86's control and segment registers, and these
registers need special handling for fault injection (def/use pruning does
not work here), only import register accesses from the RT_GP subset.

Status register and instruction pointer injection remain functional, and
import-trace now should work architecture independently.

Change-Id: Id8ad2f0a9dab1861bf16ea9443c3bdfe7213d3fa
2014-03-26 17:18:18 +01:00
f775c92d72 dump-trace: keep track of read/written bytes
This change adds access-size tracking to dump-trace and output thereof in mode "-s".

Change-Id: I5647d7b16c89499b7813faaf8c3844f275bc552a
2014-03-05 11:55:11 +01:00
36ae6fd6c3 prune-trace: use none/none only without any parameters
Before this change, running prune-trace with, e.g.
"prune-trace -d fsp_mibench -v bitmap% --benchmark-exclude clockcnv"
resulted in an implied "--benchmark none", rendering --benchmark-exclude
ineffective and resulting in nothing being pruned.  Now, the "none" default
only applies when neither --benchmark nor --benchmark-exclude (analogously
for --variant / --variant-exclude) is provided.

Change-Id: Ic7c88919d7cfde1261749a745dc6a679472ff348
2014-02-25 13:32:55 +01:00
1df43e9726 import-trace: major speedup
Using Database::insert_multiple() instead of prepared statements
speeds up trace import by a factor of 3-4.  While being there, we now
properly deal with nonexistent extended trace values (i.e., put NULLs
into the DB).

Side note: The ElfImporter should switch to insert_multiple(), too.

Change-Id: I96785e9775e3ef4f242fd50720d5c34adb4e88a1
2014-02-25 13:32:55 +01:00
69ba9e0f94 dump-trace: properly deal with empty extended trace entries
As dereferencing register contents is not always possible, extended trace
entries may be empty.

Change-Id: I603fcef2eb2b0429a9d6ed0469441bc314e365fd
2014-02-19 19:08:46 +01:00
e4bf980b97 Fail* result browser for pruning experiments.
Based on the database layout given by the pruner.
Run ./run.py -c <path to mysql.cnf>
(Default config ~/.my.cnf)

- Checks if objdump table exists
- Added view for results per instruction
- Added config file support for table details
- Overview data loaded at server startup
- Result type mapping configurable via config file

Based on Flask and MySQLdb

Change-Id: Ib49eac8f5c1e0ab23921aedb5bc53c34d0cde14d
2014-02-17 10:17:25 +01:00
b4f144745a Revert "import-trace: emit warning for malformed traces"
Memory accesses that don't belong to the preceding IP event in the
trace *do* have a use case:  a hardware interrupt causes the CPU to
push its state onto the (kernel) stack.  At the moment we cannot
distinguish this case from a malformed trace (as we don't record the
occurrence of interrupts), hence this warning needs to be disabled for
now.

This reverts commit 84edd02b6f.
2014-02-11 14:57:29 +01:00
26308dc9ea Merge "Removes serial.out from bochs config for massive performance boost on cluster runs." 2014-01-31 13:52:45 +01:00
4ba028e740 Removes serial.out from bochs config for massive performance boost on
cluster runs.

If this output file is enabled, all running processes try to write to the
same file on the shared filesystem. They block each other which leads to
massive I/O wait time and CPU idle time.

This change reduces the runtime e.g. from several hours (12+) to few minutes
(20).

Change-Id: I028628af31c845fc517e5daca5b4f981eade3cf4
2014-01-31 12:51:58 +01:00
13175c259b import-trace: import debug info
If the --debug option is set, the line number table of the elf binary will
be imported into the database. The information will be stored in the
"dbg_mapping" table.

If the --sources option is set, the source files will be imported
into the database. Only the files that were actually used in the
elf binary will be imported.

Change-Id: I0e9de6b456bc42b329c1700c25e5839d9552cdbb
2014-01-28 11:07:34 +01:00
5df364dea2 compute-hops: re-enabled memory usage lookup
Change-Id: I51c7dcac5e6077364da63f4189fea9a90c43e059
2014-01-23 18:53:21 +01:00
0e7ee03937 compute-hops: bugfix rollback-threshold
Rollback threshold was not set by command line argument.

Change-Id: I68ba63cc5cd31e3af8408f83caec8b3d7bb10c78
2014-01-23 18:53:21 +01:00
8b5098abdd tools: added compute-hops and dump-hops tools
As these tools work closely together with fail components, its
easiest, to build them in this context. As these tools don't
really matter for fail use, they might never be pushed to the
master branch.

Change-Id: I8c8bd80376d0475f08a531a995d829e85032371b
2014-01-23 18:53:11 +01:00
a307dc6df7 import-trace: fix for using non-gzipped traces
As non-gzipped trace-files cause the tool to always import zero events, the
input file is now openend as in the dump-trace tool, where opening non-gzipped
files obviously works fine.

Change-Id: If2575dbeb93ed657c7b8ddd9f14f41b5cc7bf7c6
2014-01-22 17:54:09 +01:00
4cb97a7fa5 formatting, typos, comments, details
Change-Id: Iae5f1acb653a694622e9ac2bad93efcfca588f3a
2014-01-22 13:08:13 +01:00