diff options
author | Eizan Miyamoto <eizan.miyamoto@gmail.com> | 2017-11-16 23:38:29 +0000 |
---|---|---|
committer | Eizan Miyamoto <eizan.miyamoto@gmail.com> | 2017-11-16 23:38:29 +0000 |
commit | 4034660caf4eed93c23b3fdd214bdfaba4b58aa5 (patch) | |
tree | 8ce38eeb840b07a19519d7d8297e126eb1f15b97 /MicroBenchmarks | |
parent | 789a44b88eec1526bde80593933344e23e13d0ef (diff) |
[XRay] [test-suite] Add FDR mode microbenchmark
Summary:
Move retref-bench sources and support files into new subdir
Add XRay FDR mode microbenchmark
Reviewers: dberris
Reviewed By: dberris
Subscribers: llvm-commits, mgorny
Differential Revision: https://reviews.llvm.org/D40010
git-svn-id: https://llvm.org/svn/llvm-project/test-suite/trunk@318473 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'MicroBenchmarks')
19 files changed, 148 insertions, 23 deletions
diff --git a/MicroBenchmarks/XRay/CMakeLists.txt b/MicroBenchmarks/XRay/CMakeLists.txt index 243c4d69..4cc9754e 100644 --- a/MicroBenchmarks/XRay/CMakeLists.txt +++ b/MicroBenchmarks/XRay/CMakeLists.txt @@ -1,23 +1,2 @@ -check_cxx_compiler_flag(-fxray-instrument COMPILER_HAS_FXRAY_INSTRUMENT) -if(ARCH STREQUAL "x86" AND COMPILER_HAS_FXRAY_INSTRUMENT) - file(COPY lit.local.cfg DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) - - list(APPEND CPPFLAGS -std=c++11 -Wl,--gc-sections -fxray-instrument) - list(APPEND LDFLAGS -fxray-instrument) - llvm_test_run(--benchmark_filter=dummy_skip_ignore) - llvm_test_executable(retref-bench retref-bench.cc) - target_link_libraries(retref-bench benchmark) - - file(COPY retref-bench_BM_ReturnNeverInstrumented.test - DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) - file(COPY retref-bench_BM_ReturnInstrumentedUnPatched.test - DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) - file(COPY retref-bench_BM_ReturnInstrumentedPatchedThenUnpatched.test - DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) - file(COPY retref-bench_BM_ReturnInstrumentedPatched.test - DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) - file(COPY retref-bench_BM_RDTSCP_Cost.test - DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) - file(COPY retref-bench_BM_ReturnInstrumentedPatchedWithLogHandler.test - DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) -endif() +add_subdirectory(ReturnReference) +add_subdirectory(FDRMode) diff --git a/MicroBenchmarks/XRay/FDRMode/CMakeLists.txt b/MicroBenchmarks/XRay/FDRMode/CMakeLists.txt new file mode 100644 index 00000000..eabc594a --- /dev/null +++ b/MicroBenchmarks/XRay/FDRMode/CMakeLists.txt @@ -0,0 +1,23 @@ +check_cxx_compiler_flag(-fxray-instrument COMPILER_HAS_FXRAY_INSTRUMENT) +if(ARCH STREQUAL "x86" AND COMPILER_HAS_FXRAY_INSTRUMENT) + file(COPY lit.local.cfg DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) + + list(APPEND CPPFLAGS -std=c++11 -Wl,--gc-sections -fxray-instrument) + list(APPEND LDFLAGS -fxray-instrument) + llvm_test_run(--benchmark_filter=dummy_skip_ignore) + llvm_test_executable(fdrmode-bench fdrmode-bench.cc) + target_link_libraries(fdrmode-bench benchmark) + + file(COPY fdrmode-bench_BM_XRayFDRMultiThreaded_1_thread.test + DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) + file(COPY fdrmode-bench_BM_XRayFDRMultiThreaded_2_thread.test + DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) + file(COPY fdrmode-bench_BM_XRayFDRMultiThreaded_4_thread.test + DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) + file(COPY fdrmode-bench_BM_XRayFDRMultiThreaded_8_thread.test + DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) + file(COPY fdrmode-bench_BM_XRayFDRMultiThreaded_16_thread.test + DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) + file(COPY fdrmode-bench_BM_XRayFDRMultiThreaded_32_thread.test + DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) +endif() diff --git a/MicroBenchmarks/XRay/FDRMode/fdrmode-bench.cc b/MicroBenchmarks/XRay/FDRMode/fdrmode-bench.cc new file mode 100644 index 00000000..0042ee52 --- /dev/null +++ b/MicroBenchmarks/XRay/FDRMode/fdrmode-bench.cc @@ -0,0 +1,86 @@ +//===- fdrmode-bench.cc - XRay Instrumentation Benchmarks ------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// Define benchmarks for measuring the cost of XRay instrumentation when using +// flight data recorder mode. +// +//===----------------------------------------------------------------------===// + +#include <assert.h> +#include <fcntl.h> +#include <unistd.h> +#include "benchmark/benchmark.h" +#include "xray/xray_interface.h" +#include "xray/xray_log_interface.h" + +namespace { + +// This needs to be a global value so that the compiler doesn't end up writing +// to data on the stack. We also mark it volatile to preserve all the loads and +// stores performed on this variable. +volatile int val = 0; + +__xray::FDRLoggingOptions Options; + +} // namespace + +// We define a multi-threaded benchmark which measures the overall costs +// introduced by the XRay handlers upstream. This will exercise a tight loop +// calling a single function that practically does nothing. +[[clang::xray_always_instrument]] __attribute__((noinline)) __attribute__((weak)) int +EmptyFunction() { + return 0; +} + +volatile bool log_initialized = false; + +// Force installation of the FDR logging implementation upstream, with the +// caveat that we're writing the log out to /dev/null. +[[clang::xray_never_instrument]] void SetUpXRayFDRMultiThreaded( + benchmark::State& state) { + if (!log_initialized) { + Options.ReportErrors = true; + Options.Fd = open("/dev/null", O_WRONLY); + assert((Options.Fd != -1) && "Cannot open /dev/null!"); + __xray_log_init(getpagesize(), 1 << 16, &Options, + sizeof(__xray::FDRLoggingOptions)); + __xray_remove_customevent_handler(); + __xray_patch(); + log_initialized = true; + } +} + +[[clang::xray_never_instrument]] void TearDownXRayFDRMultiThreaded( + benchmark::State& state) { + if (log_initialized) { + log_initialized = false; + __xray_log_finalize(); + __xray_log_flushLog(); + __xray_unpatch(); + } +} + +[[clang::xray_never_instrument]] static void BM_XRayFDRMultiThreaded( + benchmark::State& state) { + if (state.thread_index == 0) { + SetUpXRayFDRMultiThreaded(state); + } + while (state.KeepRunning()) { + val = EmptyFunction(); + benchmark::DoNotOptimize(val); + } + if (state.thread_index == 0) { + TearDownXRayFDRMultiThreaded(state); + } +} + +BENCHMARK(BM_XRayFDRMultiThreaded) + ->ThreadRange(1, 32); // Number of threads + +BENCHMARK_MAIN(); diff --git a/MicroBenchmarks/XRay/FDRMode/fdrmode-bench_BM_XRayFDRMultiThreaded_16_thread.test b/MicroBenchmarks/XRay/FDRMode/fdrmode-bench_BM_XRayFDRMultiThreaded_16_thread.test new file mode 100644 index 00000000..06cd4932 --- /dev/null +++ b/MicroBenchmarks/XRay/FDRMode/fdrmode-bench_BM_XRayFDRMultiThreaded_16_thread.test @@ -0,0 +1 @@ +RUN: %S/fdrmode-bench --benchmark_repetitions=10 --benchmark_report_aggregates_only=true --benchmark_filter=BM_XRayFDRMultiThreaded/threads:16$ diff --git a/MicroBenchmarks/XRay/FDRMode/fdrmode-bench_BM_XRayFDRMultiThreaded_1_thread.test b/MicroBenchmarks/XRay/FDRMode/fdrmode-bench_BM_XRayFDRMultiThreaded_1_thread.test new file mode 100644 index 00000000..12417ec7 --- /dev/null +++ b/MicroBenchmarks/XRay/FDRMode/fdrmode-bench_BM_XRayFDRMultiThreaded_1_thread.test @@ -0,0 +1 @@ +RUN: %S/fdrmode-bench --benchmark_repetitions=10 --benchmark_report_aggregates_only=true --benchmark_filter=BM_XRayFDRMultiThreaded/threads:1$ diff --git a/MicroBenchmarks/XRay/FDRMode/fdrmode-bench_BM_XRayFDRMultiThreaded_2_thread.test b/MicroBenchmarks/XRay/FDRMode/fdrmode-bench_BM_XRayFDRMultiThreaded_2_thread.test new file mode 100644 index 00000000..4313376f --- /dev/null +++ b/MicroBenchmarks/XRay/FDRMode/fdrmode-bench_BM_XRayFDRMultiThreaded_2_thread.test @@ -0,0 +1 @@ +RUN: %S/fdrmode-bench --benchmark_repetitions=10 --benchmark_report_aggregates_only=true --benchmark_filter=BM_XRayFDRMultiThreaded/threads:2$ diff --git a/MicroBenchmarks/XRay/FDRMode/fdrmode-bench_BM_XRayFDRMultiThreaded_32_thread.test b/MicroBenchmarks/XRay/FDRMode/fdrmode-bench_BM_XRayFDRMultiThreaded_32_thread.test new file mode 100644 index 00000000..5469012e --- /dev/null +++ b/MicroBenchmarks/XRay/FDRMode/fdrmode-bench_BM_XRayFDRMultiThreaded_32_thread.test @@ -0,0 +1 @@ +RUN: %S/fdrmode-bench --benchmark_repetitions=10 --benchmark_report_aggregates_only=true --benchmark_filter=BM_XRayFDRMultiThreaded/threads:32$ diff --git a/MicroBenchmarks/XRay/FDRMode/fdrmode-bench_BM_XRayFDRMultiThreaded_4_thread.test b/MicroBenchmarks/XRay/FDRMode/fdrmode-bench_BM_XRayFDRMultiThreaded_4_thread.test new file mode 100644 index 00000000..5647d68c --- /dev/null +++ b/MicroBenchmarks/XRay/FDRMode/fdrmode-bench_BM_XRayFDRMultiThreaded_4_thread.test @@ -0,0 +1 @@ +RUN: %S/fdrmode-bench --benchmark_repetitions=10 --benchmark_report_aggregates_only=true --benchmark_filter=BM_XRayFDRMultiThreaded/threads:4$ diff --git a/MicroBenchmarks/XRay/FDRMode/fdrmode-bench_BM_XRayFDRMultiThreaded_8_thread.test b/MicroBenchmarks/XRay/FDRMode/fdrmode-bench_BM_XRayFDRMultiThreaded_8_thread.test new file mode 100644 index 00000000..844f9124 --- /dev/null +++ b/MicroBenchmarks/XRay/FDRMode/fdrmode-bench_BM_XRayFDRMultiThreaded_8_thread.test @@ -0,0 +1 @@ +RUN: %S/fdrmode-bench --benchmark_repetitions=10 --benchmark_report_aggregates_only=true --benchmark_filter=BM_XRayFDRMultiThreaded/threads:8$ diff --git a/MicroBenchmarks/XRay/FDRMode/lit.local.cfg b/MicroBenchmarks/XRay/FDRMode/lit.local.cfg new file mode 100644 index 00000000..2b879182 --- /dev/null +++ b/MicroBenchmarks/XRay/FDRMode/lit.local.cfg @@ -0,0 +1,8 @@ +config.environment['XRAY_OPTIONS'] = 'patch_premain=false xray_naive_log=false xray_fdr_log=true' +test_modules = config.test_modules +if 'run' in test_modules: + # Insert microbenchmark module behind 'run' + test_modules.insert(test_modules.index('run')+1, 'microbenchmark') + # Timeit results are not useful for microbenchmarks + if 'timeit' in test_modules: + test_modules.remove('timeit') diff --git a/MicroBenchmarks/XRay/ReturnReference/CMakeLists.txt b/MicroBenchmarks/XRay/ReturnReference/CMakeLists.txt new file mode 100644 index 00000000..243c4d69 --- /dev/null +++ b/MicroBenchmarks/XRay/ReturnReference/CMakeLists.txt @@ -0,0 +1,23 @@ +check_cxx_compiler_flag(-fxray-instrument COMPILER_HAS_FXRAY_INSTRUMENT) +if(ARCH STREQUAL "x86" AND COMPILER_HAS_FXRAY_INSTRUMENT) + file(COPY lit.local.cfg DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) + + list(APPEND CPPFLAGS -std=c++11 -Wl,--gc-sections -fxray-instrument) + list(APPEND LDFLAGS -fxray-instrument) + llvm_test_run(--benchmark_filter=dummy_skip_ignore) + llvm_test_executable(retref-bench retref-bench.cc) + target_link_libraries(retref-bench benchmark) + + file(COPY retref-bench_BM_ReturnNeverInstrumented.test + DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) + file(COPY retref-bench_BM_ReturnInstrumentedUnPatched.test + DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) + file(COPY retref-bench_BM_ReturnInstrumentedPatchedThenUnpatched.test + DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) + file(COPY retref-bench_BM_ReturnInstrumentedPatched.test + DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) + file(COPY retref-bench_BM_RDTSCP_Cost.test + DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) + file(COPY retref-bench_BM_ReturnInstrumentedPatchedWithLogHandler.test + DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) +endif() diff --git a/MicroBenchmarks/XRay/lit.local.cfg b/MicroBenchmarks/XRay/ReturnReference/lit.local.cfg index 7b91cf89..7b91cf89 100644 --- a/MicroBenchmarks/XRay/lit.local.cfg +++ b/MicroBenchmarks/XRay/ReturnReference/lit.local.cfg diff --git a/MicroBenchmarks/XRay/retref-bench.cc b/MicroBenchmarks/XRay/ReturnReference/retref-bench.cc index 8c7a59b3..8c7a59b3 100644 --- a/MicroBenchmarks/XRay/retref-bench.cc +++ b/MicroBenchmarks/XRay/ReturnReference/retref-bench.cc diff --git a/MicroBenchmarks/XRay/retref-bench_BM_RDTSCP_Cost.test b/MicroBenchmarks/XRay/ReturnReference/retref-bench_BM_RDTSCP_Cost.test index fae233dc..fae233dc 100644 --- a/MicroBenchmarks/XRay/retref-bench_BM_RDTSCP_Cost.test +++ b/MicroBenchmarks/XRay/ReturnReference/retref-bench_BM_RDTSCP_Cost.test diff --git a/MicroBenchmarks/XRay/retref-bench_BM_ReturnInstrumentedPatched.test b/MicroBenchmarks/XRay/ReturnReference/retref-bench_BM_ReturnInstrumentedPatched.test index f94bd287..f94bd287 100644 --- a/MicroBenchmarks/XRay/retref-bench_BM_ReturnInstrumentedPatched.test +++ b/MicroBenchmarks/XRay/ReturnReference/retref-bench_BM_ReturnInstrumentedPatched.test diff --git a/MicroBenchmarks/XRay/retref-bench_BM_ReturnInstrumentedPatchedThenUnpatched.test b/MicroBenchmarks/XRay/ReturnReference/retref-bench_BM_ReturnInstrumentedPatchedThenUnpatched.test index fc9031d6..fc9031d6 100644 --- a/MicroBenchmarks/XRay/retref-bench_BM_ReturnInstrumentedPatchedThenUnpatched.test +++ b/MicroBenchmarks/XRay/ReturnReference/retref-bench_BM_ReturnInstrumentedPatchedThenUnpatched.test diff --git a/MicroBenchmarks/XRay/retref-bench_BM_ReturnInstrumentedPatchedWithLogHandler.test b/MicroBenchmarks/XRay/ReturnReference/retref-bench_BM_ReturnInstrumentedPatchedWithLogHandler.test index b32befe4..b32befe4 100644 --- a/MicroBenchmarks/XRay/retref-bench_BM_ReturnInstrumentedPatchedWithLogHandler.test +++ b/MicroBenchmarks/XRay/ReturnReference/retref-bench_BM_ReturnInstrumentedPatchedWithLogHandler.test diff --git a/MicroBenchmarks/XRay/retref-bench_BM_ReturnInstrumentedUnPatched.test b/MicroBenchmarks/XRay/ReturnReference/retref-bench_BM_ReturnInstrumentedUnPatched.test index b72fe6f9..b72fe6f9 100644 --- a/MicroBenchmarks/XRay/retref-bench_BM_ReturnInstrumentedUnPatched.test +++ b/MicroBenchmarks/XRay/ReturnReference/retref-bench_BM_ReturnInstrumentedUnPatched.test diff --git a/MicroBenchmarks/XRay/retref-bench_BM_ReturnNeverInstrumented.test b/MicroBenchmarks/XRay/ReturnReference/retref-bench_BM_ReturnNeverInstrumented.test index 8acc831b..8acc831b 100644 --- a/MicroBenchmarks/XRay/retref-bench_BM_ReturnNeverInstrumented.test +++ b/MicroBenchmarks/XRay/ReturnReference/retref-bench_BM_ReturnNeverInstrumented.test |