I did this mainly so server and client use a common networking API
IMO, using Boost::asio results in nicer name-lookup code.
Since no longer needed, I removed the SocketComm stuff.
The client is still synchronous; I see no benefit in having it
asynchronous.
I'm not super happy with the random backoff by the clients, if they
can't connect to the server. It makes the code really messy, 3 retries
is totally arbitrary, as is the backup windows. I believe launching
the server and clients in the correct order should be handled by a
launch script
Change-Id: Ifea64919fc228aa530c90449686f51bf63eb70e7
When building with an experiment activated, the generated
instantiate-<experimentname>.ah gets included in each and every FAIL*
translation unit including Bochs's ones. In the case of the
generic-experiment (and probably many others), this indirectly included
Google protobuf headers, which failed to compile for Bochs's gui/wx.cc and
gui/x.cc: The included X headers pollute the preprocessor namespace by
an internal protobuf "Status" class.
Change-Id: I613f5c792a9519cf2573eddc7fef6266c7168494
This patch overhauls the FAIL* server code to leverage Boost asio to be able to
handle a large number of clients (>4000). In this implementation the server is
now single threaded. I've not encountered any problems with this for up to
about 10k clients. Boost ASIO can also be used multithreaded, but I assume the
FAIL* internal data structures (Synchronized*) will become a bottleneck first.
The code now additionally depends on Boost Coro and Boost Context, as well as
a C++ 14 compiler, although the only C++14 feature required is a lambda capture
with initializer, such as [ x = std::move(x) ]. gcc-4.9.2 does this.
The code could (and probably should) be cleaned up more. Comments are wordy,
code is unnecessary now (multiple server threads), code is not self-contained
(headers spread dependencies), many ifdef's (server performance measuring
should be runtime rather than a compile time option), and much more. But for
this patch I was going for a minimal changeset the get the functionality in,
to have an easier review. Alas, FAIL* has no Unit-test suite to run the changes
against.
To handle such a large number of clients more changes were necessary, for
example server status output is now performed every 1s, instead for every
request.
The class Minion was removed completely; the only thing it was doing was
encapsulate an int.
The server has now a runtime-configurable port, or it can select a free port on
its own if none is specified. This requires the CampaignManager to add a port
argument and instantiate the JobServer dynamically.
Change-Id: Iad9238972161f95f5802bd2251116f8aeee14884
Clang 4.0.0, which ac++ links against since today, throws an error in
the Bochs code.
config.cc:3480:55: error: ordered comparison between pointer and zero ('char *' and 'int')
if (SIM->get_param_string("model", base)->getptr()>0) {
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~
Change-Id: I8404a54acd468bf71cbf29867657f9458f3a4c3f
- search for libdwarf.h in new locations (e.g., /usr/include/libdwarf/)
- build Bochs with -std=gnu++98 (gnu++14 is default since GCC 6.1)
- specify "proto2" syntax for protobuf messages
- minor build-system and C++ namespace fixes
Change-Id: I16dbc622c797ef8e936fe3c0fb9b03029d27529d
This change removes the hard compile-time dependency from the
performance-improving dedicated listener-list implementation
(core/sal/perf/) to basic watchpoints / breakpoints being enabled in
the cmake config. This allows to keep the CONFIG_FAST_* switches
enabled in practically every experiment.
The primary reason for this change was the recent insight that enabled
breakpoints with disabled CONFIG_FAST_BREAKPOINTS can massively slow
down an experiment even if the latter does not use a single breakpoint
itself.
Change-Id: I5e3f5c1632ed1ee98a3ec887f18b174fa0e15773
The initialization value for ymin, which tracks the lower bound of
plotted rectangles (and is finally used for the preselected zoom
area), was chosen too small for Linux-kernel data structure addresses.
Change-Id: I7cd8dc690843394107e8aae7fffa90f27ca18153
Upstream SVN r12754: "Fixed PCI IDE controller DMA start (found with a
recent Linux version: "mode sense" command executed in DMA mode).
Updated output of "mode sense" page 0x2a (still reporting CD-ROM
drive)."
(data_ready part not backported due to missing dependency)
Change-Id: I392ba2b20a4138682fc34d6d2a78da0c6706e280
Upstream SVN r12563: "Bugfix: use memmove() if source and destination
range can overlap (found with valgrind)."
(Manually backported, the code structure has significantly changed
before this fix.)
Change-Id: Id176fb5b0aca806908cfb06f06bb5a7221ccc9c4
Upstream SVN r10244: "Fixed possible buffer overflow causing segfault
or memory corruption. The buffers are not large enough for the maximum
sector count in LBA48 mode. Now resetting buffer pointers after
processing a PRD (and move remaining data if necessary). This should
fix the SF bug items #3190970 and #3077616."
This happened to us when booting Debian 8 with a Linux 3.16 kernel
from "flat" or "volatile" disk images, in the end corrupting the VGA
card's ("theVga") internal state and segfaulting.
Change-Id: I6a80432093a547dc2eb5270845369d0918e1e49b
FindLLVM.cmake now starts searching for specific "llvm-config-x.y"
versions instead of using the system-wide default "llvm-config" first.
This avoids breaking builds on Debian 8, where LLVM 3.5 is the (yet
unsupported) default, but 3.4 is still installable.
Change-Id: I6fd577f515a233e30c6f803f87b9a680b5515a5b
Before this change, the GenericExperiment only recorded port 0xe9 output
*after* the fault was injected. When a fault was injected during the
workload's output loop, the output data before that point in time was
missing, and the experiment outcome was wrongly classified as SDC.
This change moves the logging activation to before the fast-forwarding
step (DatabaseExperiment::cb_before_fast_forward). It also makes sure the
DatabaseExperiment only clears its own listeners instead of also touching
the SerialOutputLogger's one.
Change-Id: I66bda4ee318d271ddda6f7ade4e817bf9d14cf46
Limit the serial-output logger buffer to prevent overly large memory
consumption in case the target system ends up, e.g., in an endless loop.
The buffer is limited to (golden-run output size)+1 to be able to detect
the case when the target system makes a correct output but faultily adds
extra characters afterwards.
Change-Id: I50c082f8fb09a702d87ab83732ca3e3463c46597
This change prevents an integer overflow in the memory-access listener
for WRITE_OUTERSPACE. Instead of matching all addresses above
maxima_data, l_mem_outerspace never matched in the
generic-experiment's "--catch-write-outerspace" mode.
Change-Id: I8f4ee4515af3998b7c2a8e83c7a18306c26d8d66
Before this change, ymin was rounded down to the nearest Y value
divisible by 1000, showing an empty, white area in the lower part of
the plot. With this change, the initial Y-axis zoom level is
maximized to exactly show all non-white areas.
Change-Id: I1aea52a3afc331e7f11fe76ff2c5de3c71c61c71
In the current configuration, OK_MARKER would be plotted in white
color and be indistinguishable from the background. Not plotting
these areas at all reduces output-file size. As a side effect, the
initial Y-axis zoom level (ymin, ymax) can change.
Change-Id: Ic7b1a22a5a6f58e4df0849bca5262c646051ae2c
By default, the data-aggregator scripts create machine-readable,
tab-separated output. The optional "-t" switch (passed to the
internally used `mysql' command-line client) creates human-readable
table output instead.
Change-Id: Ie448c21a4e82dea83f3e43e6642e67eb85f8b8e9
This change additionally allows to create a resulttype/occurrences summary
over all benchmarks in the database, instead of specifying a single one.
Change-Id: I4fc7fd735300168f1e4f9e24a51aba469a7269a8
Instead of using the address difference between two neighboring symbols as
an indication for the symbol's size, import the size as reported by
`nm -S'.
Additionally, this change fixes an off-by-one, which had the effect that
the last symbol in the list was not imported at all.
Change-Id: I3c8e139b788018702526bb968e36d248dc3fe8fc
This change introduces a loose collection of scripts for
analysis/aggregation of FAIL*'s collected data.
It's going to be developed into a proper tool in the future.
Change-Id: I63f14d87dd86b62817ec3d8089079d70f58c89c9
This change adds the capability to import an ELF's symbols
into the database. The functionality is implemented via a
shell script and will be merged into "import-trace", when
it's being cleaned up sometime in the near future, but for
now this suffices.
Change-Id: I933783659674fcf31f5181fc13661fe10f5b9fe8