aboutsummaryrefslogtreecommitdiff
path: root/MicroBenchmarks
diff options
context:
space:
mode:
authorEizan Miyamoto <eizan.miyamoto@gmail.com>2017-11-16 23:38:29 +0000
committerEizan Miyamoto <eizan.miyamoto@gmail.com>2017-11-16 23:38:29 +0000
commit4034660caf4eed93c23b3fdd214bdfaba4b58aa5 (patch)
tree8ce38eeb840b07a19519d7d8297e126eb1f15b97 /MicroBenchmarks
parent789a44b88eec1526bde80593933344e23e13d0ef (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')
-rw-r--r--MicroBenchmarks/XRay/CMakeLists.txt25
-rw-r--r--MicroBenchmarks/XRay/FDRMode/CMakeLists.txt23
-rw-r--r--MicroBenchmarks/XRay/FDRMode/fdrmode-bench.cc86
-rw-r--r--MicroBenchmarks/XRay/FDRMode/fdrmode-bench_BM_XRayFDRMultiThreaded_16_thread.test1
-rw-r--r--MicroBenchmarks/XRay/FDRMode/fdrmode-bench_BM_XRayFDRMultiThreaded_1_thread.test1
-rw-r--r--MicroBenchmarks/XRay/FDRMode/fdrmode-bench_BM_XRayFDRMultiThreaded_2_thread.test1
-rw-r--r--MicroBenchmarks/XRay/FDRMode/fdrmode-bench_BM_XRayFDRMultiThreaded_32_thread.test1
-rw-r--r--MicroBenchmarks/XRay/FDRMode/fdrmode-bench_BM_XRayFDRMultiThreaded_4_thread.test1
-rw-r--r--MicroBenchmarks/XRay/FDRMode/fdrmode-bench_BM_XRayFDRMultiThreaded_8_thread.test1
-rw-r--r--MicroBenchmarks/XRay/FDRMode/lit.local.cfg8
-rw-r--r--MicroBenchmarks/XRay/ReturnReference/CMakeLists.txt23
-rw-r--r--MicroBenchmarks/XRay/ReturnReference/lit.local.cfg (renamed from MicroBenchmarks/XRay/lit.local.cfg)0
-rw-r--r--MicroBenchmarks/XRay/ReturnReference/retref-bench.cc (renamed from MicroBenchmarks/XRay/retref-bench.cc)0
-rw-r--r--MicroBenchmarks/XRay/ReturnReference/retref-bench_BM_RDTSCP_Cost.test (renamed from MicroBenchmarks/XRay/retref-bench_BM_RDTSCP_Cost.test)0
-rw-r--r--MicroBenchmarks/XRay/ReturnReference/retref-bench_BM_ReturnInstrumentedPatched.test (renamed from MicroBenchmarks/XRay/retref-bench_BM_ReturnInstrumentedPatched.test)0
-rw-r--r--MicroBenchmarks/XRay/ReturnReference/retref-bench_BM_ReturnInstrumentedPatchedThenUnpatched.test (renamed from MicroBenchmarks/XRay/retref-bench_BM_ReturnInstrumentedPatchedThenUnpatched.test)0
-rw-r--r--MicroBenchmarks/XRay/ReturnReference/retref-bench_BM_ReturnInstrumentedPatchedWithLogHandler.test (renamed from MicroBenchmarks/XRay/retref-bench_BM_ReturnInstrumentedPatchedWithLogHandler.test)0
-rw-r--r--MicroBenchmarks/XRay/ReturnReference/retref-bench_BM_ReturnInstrumentedUnPatched.test (renamed from MicroBenchmarks/XRay/retref-bench_BM_ReturnInstrumentedUnPatched.test)0
-rw-r--r--MicroBenchmarks/XRay/ReturnReference/retref-bench_BM_ReturnNeverInstrumented.test (renamed from MicroBenchmarks/XRay/retref-bench_BM_ReturnNeverInstrumented.test)0
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