The recent information in how-to-use.txt and how-to-build.txt were outdated. Change-Id: I4e6536a0b56370717d6a09f4012862d300526313
237 lines
11 KiB
Plaintext
237 lines
11 KiB
Plaintext
=========================================================================================
|
|
Additional libraries/packages/tools needed for Fail*:
|
|
=========================================================================================
|
|
|
|
Required for Fail*:
|
|
**********************************************************************
|
|
- libprotobuf-dev
|
|
- libpcl1-dev
|
|
- libboost-thread-dev
|
|
- protobuf-compiler
|
|
- cmake
|
|
- cmake-curses-gui
|
|
- binutils-dev
|
|
- AspectC++ (ag++, ac++): AspectC++ 1.1 or newer is known to work and can be
|
|
obtained from http://www.aspectc.org; nightlies can be downloaded from
|
|
http://akut.aspectc.org
|
|
|
|
Required for the Bochs simulator backend:
|
|
**********************************************************************
|
|
- libpthread
|
|
- Probably more, depending on, e.g., the GUI you configure (X11 ->
|
|
libsvga1-dev, libxrandr-dev)
|
|
|
|
Required for the gem5 simulator backend:
|
|
**********************************************************************
|
|
- SCons
|
|
- SWIG
|
|
- zlib
|
|
- m4
|
|
- python-dev
|
|
- optional: libgoogle-perftools-dev
|
|
|
|
For distribution/parallelization:
|
|
**********************************************************************
|
|
- rsync
|
|
- tmux
|
|
|
|
|
|
32-bit FailBochs on x86_64 Linux machines:
|
|
**********************************************************************
|
|
- Create a "bochslibs" directory and fill it with all necessary libraries from
|
|
your build machine:
|
|
$ mkdir bochslibs
|
|
$ cp -v $(ldd fail-client|awk '{print $3}'|egrep -v '\(|lib(pthread|selinux|c.so.)|^$') bochslibs/
|
|
- Copy this directory to ~/bochslibs on all machines lacking these libraries
|
|
(this may also be the case for i386 machines you cannot install library
|
|
packages on yourself). client.sh will add ~/bochslibs to LD_LIBRARY_PATH if
|
|
it exists.
|
|
|
|
=========================================================================================
|
|
Compiling, building and modifying: Simulators and Fail*
|
|
=========================================================================================
|
|
|
|
Building Fail*:
|
|
**********************************************************************
|
|
|
|
For the first time:
|
|
------------------------------------------------------------
|
|
1. Enter the "fail/" directory (${FAIL_DIR}, see also "fail-structure.txt"):
|
|
$ cd fail/
|
|
2. (Optional) Cleanup previous CMake remnants:
|
|
$ find -name CMakeCache.txt | xargs rm
|
|
3. Create out of source build directory (${BUILD_DIR}, see also "fail-structure.txt"):
|
|
$ mkdir build
|
|
Note that currently this build directory must be located somewhere below
|
|
the fail/ directory, as generated .ah files in there will not be included
|
|
in the compile process otherwise.
|
|
4. Enter out-of-source build directory. All generated files end up there.
|
|
$ cd build
|
|
5. Generate CMake environment.
|
|
$ cmake ..
|
|
6. Setup build configuration by opening the CMake configuration tool
|
|
$ ccmake .
|
|
Select "BUILD_BOCHS" or "BUILD_GEM5". Select an experiment to enable by
|
|
naming its "experiments/" subdirectory under "EXPERIMENTS_ACTIVATED".
|
|
Configure Fail* features you need for this experiment by enabling
|
|
"CONFIG_*" options. Press 'c', 'g' to regenerate the build system.
|
|
(Alternatively use
|
|
$ cmake-gui .
|
|
for a Qt GUI.) To enable a Debug build, choose "Debug" as the build type,
|
|
otherwise choose "Release".
|
|
If building FailBochs, optionally set up the bochs configure flags
|
|
for your need.
|
|
|
|
|
|
After changes to Fail* code:
|
|
------------------------------------------------------------
|
|
Compile (in ${BUILD_DIR}, optionally "add -jN" for parallel building):
|
|
$ make
|
|
CMake will build all Fail* libraries and link them with the simulator backend
|
|
library to a binary called "fail-client". You may use the shell script
|
|
$ ${FAIL_DIR}/scripts/rebuild-bochs.sh [-]
|
|
to speed up repetitive tasks regarding Fail/Bochs builds. This script contains
|
|
a concise documentation on itself.
|
|
|
|
|
|
Add new Fail* sources to build chain:
|
|
------------------------------------------------------------
|
|
To add new source files to the build, see CMakeLists.txt in the subdirectory of the
|
|
corresponding component in "${FAIL_DIR}/src/core/", and probably consultate the
|
|
CMake docs: http://cmake.org/cmake/help/documentation.html
|
|
|
|
|
|
Add new experiment/plugin/campaign:
|
|
------------------------------------------------------------
|
|
Look at "${FAIL_DIR}/src/experiments/coolchecksum/" as a template. After creating a
|
|
new subdirectory in "experiments/", activate it in the CMake configuration step (see
|
|
above).
|
|
|
|
|
|
Generating the Doxygen documentation for Fail*:
|
|
**********************************************************************
|
|
To generate the Doxygen documentation, type:
|
|
$ make doc
|
|
The documentation files (HTML and LaTeX) are located in "${BUILD_DIR}/src/core/doc/".
|
|
To open the HTML documentation, type:
|
|
$ firefox src/core/doc/html/index.html
|
|
(You may want to replace "firefox" with your favourite browser.) The LaTeX docs need
|
|
to be compiled previously:
|
|
$ cd src/core/doc/latex; make
|
|
|
|
|
|
FailBochs: Bochs configuration features
|
|
**********************************************************************
|
|
|
|
The autotools-based bochs is configured within the Fail* build run.
|
|
The configuration flags can be set within the ccmake configuration (ccmake ${FAIL_DIR}/build)
|
|
- Sufficient:
|
|
--enable-cpu-level=6;--enable-ne2000;--enable-trace-cache;--enable-gdb-stub;--disable-docbook
|
|
- More simulator features (FailBochs default configuration):
|
|
--enable-a20-pin;--enable-x86-64;--enable-cpu-level=6;--enable-ne2000;--enable-acpi;--enable-pci;--enable-usb;--enable-trace-cache;--enable-fast-function-calls;--enable-host-specific-asms;--enable-disasm;--enable-readline;--enable-clgd54xx;--enable-fpu;--enable-vmx=2;--enable-monitor-mwait;--enable-cdrom;--enable-sb16=linux;--enable-gdb-stub;--disable-docbook;--with-all-libs
|
|
Instead of --with-all-libs, you could use --with-nogui for "headless" experiments,
|
|
additionally removing lots of library dependencies (thus reducing startup overhead).
|
|
--with-x11 enables only the "x" (X11), --with-wx only the "wx" (wxWidgets) GUI.
|
|
Note that "wx" does not play well together with Fail*'s "restore" feature (FailBochs
|
|
will fall back to "x" if available, or die trying.)
|
|
Once you know everything works as it should, you may want to add the
|
|
following flags before running larger campaigns:
|
|
--disable-logging --disable-assert-checks
|
|
Make sure --enable-repeat-speedups (--enable-all-optimizations implicitly
|
|
enables this) is not enabled; you will otherwise encounter funny effects
|
|
when tracing REP-prefixed instructions.
|
|
FIXME: Remove more redundant flags/libraries
|
|
|
|
|
|
After changes to Bochs code:
|
|
------------------------------------------------------------
|
|
- Just re-run "make" in ${BUILD_DIR}, or call "scripts/rebuild-bochs.sh -".
|
|
The latter automatically runs "make install" after rebuilding fail-client
|
|
(and probably the experiment's campaign server).
|
|
- Cleaning up (forcing a complete rebuild of libfailbochs.a next time):
|
|
$ make bochsallclean
|
|
This is especially necessary if you changed a Bochs-affecting aspect header
|
|
(.ah), as the build system does not know about Bochs sources depending on
|
|
certain aspects.
|
|
|
|
|
|
Debug build:
|
|
------------------------------------------------------------
|
|
Configure Bochs to use debugging-related compiler flags (expects to be in ${BUILD_DIR}):
|
|
$ cd ../simulator/bochs
|
|
$ CFLAGS="-g -O0" CXXFLAGS="-g -O0" ./configure --prefix=... ... (see above)
|
|
You might additionally want to configure the rest of Fail* into debug mode by
|
|
setting CMAKE_BUILD_TYPE to "Debug" (ccmake, see above).
|
|
|
|
|
|
Profiling-based optimization build:
|
|
------------------------------------------------------------
|
|
FIXME: ag++ needs to be run with --keep_woven
|
|
Configure Bochs to use compiler flags to enable profiling:
|
|
$ cd ../simulator/bochs
|
|
$ CFLAGS="-fprofile-generate" CXXFLAGS="-fprofile-generate" LDFLAGS="-fprofile-generate" ./configure --prefix=... ... (see above)
|
|
Build Bochs normally, and run it. Configure Bochs to use compiler flags to enable
|
|
optimizations based on profiling results:
|
|
$ CFLAGS="-fprofile-use -Wcoverage-mismatch" CXXFLAGS="-fprofile-use -Wcoverage-mismatch" LDFLAGS="-fprofile-use" ./configure --prefix=... ... (see above)
|
|
|
|
|
|
Benchmarking:
|
|
------------------------------------------------------------
|
|
Simple instructions/second measurement:
|
|
- Configure Bochs with --enable-show-ips (see above)
|
|
- Modify the bochsrc: print_timestamps: enabled=1
|
|
Comparison IPS numbers are shown in the default "bochsrc". Headless bochsrc configuration,
|
|
all aspects disabled, guest system executes endless loop, host CPU Xeon X5470 (3.33GHz):
|
|
IPS: 66124283 average = 66964789
|
|
|
|
|
|
Building gem5:
|
|
**********************************************************************
|
|
|
|
For the first time (incl. selecting an experiment):
|
|
------------------------------------------------------------
|
|
1. Change to the Fail* directory (expects to be in ${FAIL_DIR}) and
|
|
create a new build directory.
|
|
$ cd ${FAIL_DIR}; mkdir build; cd build
|
|
3. Start the configuration by typing
|
|
$ cmake ..
|
|
4. Modify the generated configuration according to your needs using
|
|
$ ccmake .
|
|
At least, you should set an experiment and turn on the following
|
|
flags: BUILD_GEM5 = BUILD_ARM = ON. Additionally, all config
|
|
options specific for other simulator should be turned OFF. Finally,
|
|
edit ${FAIL_DIR}/src/core/sal/gem5/SConscript: search for a line
|
|
with "gStaticLibs" and ensure that this line lists all the various
|
|
target you want to include in the binary (especially your experiment
|
|
target and perhabs an additional plugin), i.e. change
|
|
-lfail-arch-test to -lfail-[EXPERIMENTNAME|PLUGINNAME].
|
|
5. Typing
|
|
$ make (or nice make -jN)
|
|
will start the build process of Fail* and gem5. This automatically
|
|
builds the debug variant for ARM targets. (Note that this build will
|
|
automatically include the ${FAIL_DIR}/src/core/sal/gem5 as an
|
|
"EXTRAS" feature, see gem5/scons build system documentation for
|
|
further information. That means, adding another directory containing
|
|
gem5-specific code requires to modify the gem5 build command, see
|
|
${FAIL_DIR}/cmake/gem5.cmake.) The build process for gem5 currently
|
|
uses 9 cores for a parallel build regardless whether you specify a
|
|
different core count in the -jN option. This and various other stuff
|
|
(e.g. a release build, i.e. using "gem5.fast" instead of "gem5.debug")
|
|
can be changed in the aforementioned gem5.cmake file.
|
|
|
|
After changes to Fail*/gem5 code (incl. aspect headers):
|
|
------------------------------------------------------------
|
|
1. Clean the current build by typing
|
|
$ make gem5-allclean
|
|
(in your build dir ${FAIL_DIR}/build). This cleans the current
|
|
Fail* and gem5 build directories. Note that "make clean" only cleans
|
|
the Fail* build directory. Additionally note, that changing the
|
|
specified experiment target requires editing
|
|
${FAIL_DIR}/src/core/sal/gem5/SConscript (see above). Furthermore, all
|
|
remaining CMake remnants should be deleted:
|
|
$ find -name CMakeCache.txt | xargs rm
|
|
2. Rebuild by typing
|
|
$ make (or nice make -jN)
|
|
(as in the last step of the previous section).
|
|
|