Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
45c98cd
fix the name conflict of BLOCK_SIZE between duckdb and iouring
yuly16 Jun 9, 2023
114fca1
close filter_pushdown and filter_prune of parquet extension, in order…
yuly16 Jun 9, 2023
fa8d72a
1. Set a larger timeout for benchmark, since sometimes we test large …
yuly16 Jun 9, 2023
22e92e6
add a pixels example.
yuly16 Jun 9, 2023
b68ea50
add parquet and pixels benchmark
yuly16 Jun 9, 2023
77c9e6e
Update benchmark file, since pixels change the v-0-order to v-0-ordered
yuly16 Jul 15, 2023
ac220a3
update pixels-example main.cpp
yuly16 Jul 19, 2023
c8be096
SSD array multi dir read support
yuly16 Jul 31, 2023
f733829
modify the micro-benchmark query so that the sink doesn't spend too m…
yuly16 Aug 6, 2023
ace4e05
fix the cmakeLists of pixels-example because the directory of duckdb …
yuly16 Aug 8, 2023
96d915d
Set BUILD_BENCHMARKS as true by default in CMakeLists.txt
yuly16 Aug 9, 2023
9130b1a
Add multidir-generator.py to split data to different dirs
yuly16 Aug 9, 2023
f9b0723
add a split multi dir python script
yuly16 Aug 9, 2023
748948b
parquet multidir generator and support multidir read
yuly16 Aug 29, 2023
3ea1216
support direct pass for null bit map in the pixels c++ reader
yuly16 Aug 7, 2023
cde7e83
add clickbench benchmark
yuly16 Jan 3, 2024
43c02e8
parquet clickbench benchmark
yuly16 Jan 8, 2024
89e5f48
add clickbench microbenchmark for pixels and parquet
yuly16 Jan 8, 2024
a4610b0
add parquet core config
yuly16 Jan 10, 2024
8e1fff6
add the script to generate plain parquet.
yuly16 Jan 30, 2024
a5c40ad
server49
yuly16 Aug 10, 2023
7b201db
add clickbench-size
yuly16 Jan 24, 2024
cd6a64d
add clickbench
yuly16 Jan 25, 2024
9f4c435
add more functionality for scripts in server49
yuly16 Jan 30, 2024
598ad6c
add parquet ssd array support
yuly16 Jan 22, 2024
8654c14
Milestone: systematic experiment tools for tpch/clickbench
yuly16 Jan 31, 2024
66a5f31
change main function to read pixels-example in PIXELS_SRC
yuly16 Jun 2, 2024
349a011
add new run scripts
whzruc Sep 18, 2024
4c685b2
Merge branch 'duckdb:main' into main
whzruc Sep 20, 2024
207a770
add new run scripts and change the benchmark_runner's output
whzruc Sep 25, 2024
5e38fd2
add new run scripts and change the benchmark_runner's output
whzruc Sep 25, 2024
01379cd
Merge branch 'duckdb:main' into main
whzruc Sep 25, 2024
1a5d63c
pixels supported for duckdb 1.0
whzruc Sep 29, 2024
d0b0bd0
mini-pixels path
whzruc Oct 12, 2024
65ea177
fix run benchmark
whzruc Oct 12, 2024
a2fe4b4
clean blank lines.
bianhq Oct 27, 2024
81cf802
using PIXELS_SRC to replace the relative path (#2)
bianhq Dec 19, 2024
dd415bb
fix/correct include path (#4)
gengdy1545 Jan 17, 2025
6bf29d6
bufferpool&hugepage
whzruc Oct 4, 2025
2027dfa
merge
whzruc Oct 5, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 20 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ option(ENABLE_EXTENSION_AUTOLOADING "Enable extension auto-loading by default."
option(ENABLE_EXTENSION_AUTOINSTALL "Enable extension auto-installing by default." FALSE)
option(EXTENSION_TESTS_ONLY "Only load the tests for extensions, don't actually build them; useful for testing loadable extensions" FALSE)
option(WASM_LOADABLE_EXTENSIONS "WebAssembly build with loadable extensions." FALSE)
option(ENABLE_SANITIZER "Enable address sanitizer." TRUE)
option(ENABLE_SANITIZER "Enable address sanitizer." FALSE)
option(ENABLE_THREAD_SANITIZER "Enable thread sanitizer." FALSE)
option(ENABLE_UBSAN "Enable undefined behavior sanitizer." TRUE)
option(DISABLE_VPTR_SANITIZER "Disable vptr sanitizer; work-around for sanitizer false positive on Macbook M1" FALSE)
Expand Down Expand Up @@ -1574,3 +1574,22 @@ if(EXISTS ${CMAKE_CONFIG_TEMPLATE} AND EXISTS ${CMAKE_CONFIG_VERSION_TEMPLATE})
"${PROJECT_BINARY_DIR}/DuckDBConfigVersion.cmake"
DESTINATION "${INSTALL_CMAKE_DIR}")
endif()
# TODO: This is the old way of Loading OOTEs can be removed after all OOTES in extensions.csv play ball with the new way
# build out-of-tree extensions on demand
if(NOT "${EXTERNAL_EXTENSION_DIRECTORIES}" STREQUAL "")
separate_arguments(EXTERNAL_EXTENSION_DIRECTORIES)

foreach(EXTERNAL_EXTENSION_DIRECTORY IN LISTS EXTERNAL_EXTENSION_DIRECTORIES)

# the build path seems to get ignored on windows in just the right way. no idea why.
get_filename_component(EXTERNAL_EXTENSION_NAME ${EXTERNAL_EXTENSION_DIRECTORY} NAME)
add_subdirectory(${EXTERNAL_EXTENSION_DIRECTORY} "extension/${EXTERNAL_EXTENSION_NAME}")
endforeach()
endif()

# Add a pixels example executable
add_subdirectory(examples/pixels-example)

# Add a parquet example executable
add_subdirectory(examples/parquet-example)

151 changes: 38 additions & 113 deletions benchmark/benchmark_runner.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,6 @@ void BenchmarkRunner::InitializeBenchmarkDirectory() {

atomic<bool> is_active;
atomic<bool> timeout;
atomic<bool> summarize;
std::vector<std::string> summary;

void sleep_thread(Benchmark *benchmark, BenchmarkRunner *runner, BenchmarkState *state, bool hotrun,
const optional_idx &optional_timeout) {
Expand Down Expand Up @@ -87,7 +85,7 @@ void sleep_thread(Benchmark *benchmark, BenchmarkRunner *runner, BenchmarkState
if (!hotrun) {
runner->Log(StringUtil::Format("%s\t%d\t", benchmark->name, 0));
}
runner->LogResult("Benchmark timeout reached; Interrupt failed. Benchmark killed by benchmark runner");
runner->LogResult("KILLED");
exit(1);
}
}
Expand Down Expand Up @@ -118,100 +116,53 @@ void BenchmarkRunner::LogOutput(string message) {
}
}

void BenchmarkRunner::LogSummary(string benchmark, string message, size_t i) {
string log_result_line = StringUtil::Format("%s\t%d\t", benchmark, i) + "\tINCORRECT\n";
string failure_message = benchmark + "\nname\trun\ttiming\n" + log_result_line + message;
summary.push_back(failure_message);
}

void BenchmarkRunner::RunBenchmark(Benchmark *benchmark) {
Profiler profiler;
auto display_name = benchmark->DisplayName();

duckdb::unique_ptr<BenchmarkState> state;
try {
state = benchmark->Initialize(configuration);
benchmark->Assert(state.get());
} catch (std::exception &ex) {
Log(StringUtil::Format("%s\t1\t", benchmark->name));
LogResult("ERROR");
duckdb::ErrorData error_data(ex);
LogLine(error_data.Message());
return;
}
// auto nruns = benchmark->NRuns();
auto nruns=1;
auto state = benchmark->Initialize(configuration);
auto nruns = benchmark->NRuns();
LogLine("NRuns: "+std::to_string(nruns)+"\n");
string error;
for (size_t i = 0; i < nruns; i++) {
bool hotrun = i >= 0;
if (hotrun) {
Log(StringUtil::Format("%s\t%d\t", benchmark->name, i));
}
if (hotrun && benchmark->RequireReinit()) {
state = benchmark->Initialize(configuration);
}
is_active = true;
timeout = false;
std::thread interrupt_thread(sleep_thread, benchmark, this, state.get(), hotrun,
benchmark->Timeout(configuration));

try {
profiler.Start();
benchmark->Run(state.get());
profiler.End();
} catch (std::exception &ex) {
duckdb::ErrorData error_data(ex);
error = error_data.Message();
}
auto verify = benchmark->Verify(state.get());
if (!verify.empty()) {
LogResult("INCORRECT");
LogLine("INCORRECT RESULT: " + verify);
LogOutput("INCORRECT RESULT: " + verify);
LogSummary(benchmark->name, "INCORRECT RESULT: " + verify, 0);
// break;
} else {
LogResult("Result: "+std::to_string(profiler.Elapsed()));

is_active = false;
interrupt_thread.join();
if (hotrun) {
LogOutput(benchmark->GetLogOutput(state.get()));
if (timeout) {
// write timeout
LogResult("TIMEOUT");
break;
} else {
// write time
//auto verify = benchmark->Verify(state.get());
//if (!verify.empty()) {
// LogResult("INCORRECT");
// LogLine("INCORRECT RESULT: " + verify);
// LogOutput("INCORRECT RESULT: " + verify);
// break;
//} else {
LogResult("\nResult: "+std::to_string(profiler.Elapsed()));
//}
}
}
benchmark->Cleanup(state.get());
}
// for (size_t i = 0; i < nruns; i++) {
// bool hotrun = i >= 0;
// if (hotrun) {
// Log(StringUtil::Format("%s\t%d\t", benchmark->name, i));
// }
// if (hotrun && benchmark->RequireReinit()) {
// state = benchmark->Initialize(configuration);
// }
// is_active = true;
// timeout = false;
// std::thread interrupt_thread(sleep_thread, benchmark, this, state.get(), hotrun,
// benchmark->Timeout(configuration));
//
// string error;
// try {
// profiler.Start();
// benchmark->Run(state.get());
// profiler.End();
// } catch (std::exception &ex) {
// duckdb::ErrorData error_data(ex);
// error = error_data.Message();
// }
//
// is_active = false;
// interrupt_thread.join();
// if (hotrun) {
// LogOutput(benchmark->GetLogOutput(state.get()));
// if (!error.empty()) {
// LogResult("ERROR");
// LogLine(error);
// break;
// } else if (timeout) {
// LogResult("TIMEOUT");
// break;
// } else {
// // write time
// auto verify = benchmark->Verify(state.get());
// if (!verify.empty()) {
// LogResult("INCORRECT");
// LogLine("INCORRECT RESULT: " + verify);
// LogOutput("INCORRECT RESULT: " + verify);
// LogSummary(benchmark->name, "INCORRECT RESULT: " + verify, i);
// break;
// } else {
// LogResult("Result: "+std::to_string(profiler.Elapsed()));
// }
// }
// }
// benchmark->Cleanup(state.get());
// }
benchmark->Finalize();
}

Expand Down Expand Up @@ -282,8 +233,6 @@ void parse_arguments(const int arg_counter, char const *const *arg_values) {
auto &instance = BenchmarkRunner::GetInstance();
auto &benchmarks = instance.benchmarks;
for (int arg_index = 1; arg_index < arg_counter; ++arg_index) {
// make it summarize failures by default
summarize = true;
string arg = arg_values[arg_index];
if (arg == "--list") {
// list names of all benchmarks
Expand Down Expand Up @@ -324,19 +273,6 @@ void parse_arguments(const int arg_counter, char const *const *arg_values) {
fprintf(stderr, "Could not open file %s for writing\n", splits[1].c_str());
exit(1);
}
} else if (arg == "--no-summary") {
summarize = false;
} else if (StringUtil::StartsWith(arg, "--")) {
// custom argument
auto arg_name = arg.substr(2);
if (arg_index + 1 >= arg_counter) {
fprintf(stderr, "Benchmark argument %s requires an argument\n", arg_name.c_str());
print_help();
exit(1);
}
arg_index++;
auto arg_value = arg_values[arg_index];
instance.custom_arguments.emplace(std::move(arg_name), std::move(arg_value));
} else {
if (!instance.configuration.name_pattern.empty()) {
fprintf(stderr, "Only one benchmark can be specified.\n");
Expand Down Expand Up @@ -431,17 +367,6 @@ int main(int argc, char **argv) {
LoadInterpretedBenchmarks(*fs);
parse_arguments(argc, argv);
const auto configuration_error = run_benchmarks();

if (!summary.empty() && summarize) {
std::cout << "\n====================================================" << std::endl;
std::cout << "================ FAILURES SUMMARY ================" << std::endl;
std::cout << "====================================================\n" << std::endl;
for (size_t i = 0; i < summary.size(); i++) {
std::cout << i + 1 << ": " << summary[i] << std::endl;
std::cout << "----------------------------------------------------" << std::endl;
}
}

if (configuration_error != ConfigurationError::None) {
print_error_message(configuration_error);
exit(1);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
template benchmark/clickbench/clickbench-parquet-e0-1ssd.benchmark.in
QUERY_NUMBER_PADDED=01
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
template benchmark/clickbench/clickbench-parquet-e0-1ssd.benchmark.in
QUERY_NUMBER_PADDED=02
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
template benchmark/clickbench/clickbench-parquet-e0-1ssd.benchmark.in
QUERY_NUMBER_PADDED=03
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
template benchmark/clickbench/clickbench-parquet-e0-1ssd.benchmark.in
QUERY_NUMBER_PADDED=04
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
template benchmark/clickbench/clickbench-parquet-e0-1ssd.benchmark.in
QUERY_NUMBER_PADDED=05
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
template benchmark/clickbench/clickbench-parquet-e0-1ssd.benchmark.in
QUERY_NUMBER_PADDED=06
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
template benchmark/clickbench/clickbench-parquet-e0-1ssd.benchmark.in
QUERY_NUMBER_PADDED=07
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
template benchmark/clickbench/clickbench-parquet-e0-1ssd.benchmark.in
QUERY_NUMBER_PADDED=08
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
template benchmark/clickbench/clickbench-parquet-e0-1ssd.benchmark.in
QUERY_NUMBER_PADDED=09
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
template benchmark/clickbench/clickbench-parquet-e0-1ssd.benchmark.in
QUERY_NUMBER_PADDED=10
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
template benchmark/clickbench/clickbench-parquet-e0-1ssd.benchmark.in
QUERY_NUMBER_PADDED=11
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
template benchmark/clickbench/clickbench-parquet-e0-1ssd.benchmark.in
QUERY_NUMBER_PADDED=12
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
template benchmark/clickbench/clickbench-parquet-e0-1ssd.benchmark.in
QUERY_NUMBER_PADDED=13
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
template benchmark/clickbench/clickbench-parquet-e0-1ssd.benchmark.in
QUERY_NUMBER_PADDED=14
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
template benchmark/clickbench/clickbench-parquet-e0-1ssd.benchmark.in
QUERY_NUMBER_PADDED=15
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
template benchmark/clickbench/clickbench-parquet-e0-1ssd.benchmark.in
QUERY_NUMBER_PADDED=16
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
template benchmark/clickbench/clickbench-parquet-e0-1ssd.benchmark.in
QUERY_NUMBER_PADDED=17
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
template benchmark/clickbench/clickbench-parquet-e0-1ssd.benchmark.in
QUERY_NUMBER_PADDED=18
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
template benchmark/clickbench/clickbench-parquet-e0-1ssd.benchmark.in
QUERY_NUMBER_PADDED=19
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
template benchmark/clickbench/clickbench-parquet-e0-1ssd.benchmark.in
QUERY_NUMBER_PADDED=20
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
template benchmark/clickbench/clickbench-parquet-e0-1ssd.benchmark.in
QUERY_NUMBER_PADDED=21
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
template benchmark/clickbench/clickbench-parquet-e0-1ssd.benchmark.in
QUERY_NUMBER_PADDED=22
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
template benchmark/clickbench/clickbench-parquet-e0-1ssd.benchmark.in
QUERY_NUMBER_PADDED=23
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
template benchmark/clickbench/clickbench-parquet-e0-1ssd.benchmark.in
QUERY_NUMBER_PADDED=24
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
template benchmark/clickbench/clickbench-parquet-e0-1ssd.benchmark.in
QUERY_NUMBER_PADDED=25
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
template benchmark/clickbench/clickbench-parquet-e0-1ssd.benchmark.in
QUERY_NUMBER_PADDED=26
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
template benchmark/clickbench/clickbench-parquet-e0-1ssd.benchmark.in
QUERY_NUMBER_PADDED=27
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
template benchmark/clickbench/clickbench-parquet-e0-1ssd.benchmark.in
QUERY_NUMBER_PADDED=28
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
template benchmark/clickbench/clickbench-parquet-e0-1ssd.benchmark.in
QUERY_NUMBER_PADDED=29
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
template benchmark/clickbench/clickbench-parquet-e0-1ssd.benchmark.in
QUERY_NUMBER_PADDED=30
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
template benchmark/clickbench/clickbench-parquet-e0-1ssd.benchmark.in
QUERY_NUMBER_PADDED=31
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
template benchmark/clickbench/clickbench-parquet-e0-1ssd.benchmark.in
QUERY_NUMBER_PADDED=32
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
template benchmark/clickbench/clickbench-parquet-e0-1ssd.benchmark.in
QUERY_NUMBER_PADDED=33
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
template benchmark/clickbench/clickbench-parquet-e0-1ssd.benchmark.in
QUERY_NUMBER_PADDED=34
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
template benchmark/clickbench/clickbench-parquet-e0-1ssd.benchmark.in
QUERY_NUMBER_PADDED=35
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
template benchmark/clickbench/clickbench-parquet-e0-1ssd.benchmark.in
QUERY_NUMBER_PADDED=36
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
template benchmark/clickbench/clickbench-parquet-e0-1ssd.benchmark.in
QUERY_NUMBER_PADDED=37
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
template benchmark/clickbench/clickbench-parquet-e0-1ssd.benchmark.in
QUERY_NUMBER_PADDED=38
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
template benchmark/clickbench/clickbench-parquet-e0-1ssd.benchmark.in
QUERY_NUMBER_PADDED=39
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
template benchmark/clickbench/clickbench-parquet-e0-1ssd.benchmark.in
QUERY_NUMBER_PADDED=40
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
template benchmark/clickbench/clickbench-parquet-e0-1ssd.benchmark.in
QUERY_NUMBER_PADDED=41
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
template benchmark/clickbench/clickbench-parquet-e0-1ssd.benchmark.in
QUERY_NUMBER_PADDED=42
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
template benchmark/clickbench/clickbench-parquet-e0-1ssd.benchmark.in
QUERY_NUMBER_PADDED=43
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# name: ${FILE_PATH}
# description: ${DESCRIPTION}
# group: [clickbench]

require pixels

name Q${QUERY_NUMBER_PADDED}
group Clickbench

load
CREATE VIEW hits AS SELECT * FROM parquet_scan(["/data/9a3-01/clickbench/parquet-e0/hits/*"]);

run benchmark/clickbench/queries/q${QUERY_NUMBER_PADDED}.sql

# result benchmark/clickbench/answers/q${QUERY_NUMBER_PADDED}.csv
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ name Q${QUERY_NUMBER_PADDED}
group Clickbench

load
CREATE VIEW hits AS SELECT * FROM parquet_scan(["/data/9a3-01/clickbench/parquet-e0/hits/*"]);
CREATE VIEW hits AS SELECT * FROM parquet_scan(["/nvme1/liyu/parquet-data/clickbench-e0/hits/*"]);

run benchmark/clickbench/queries/q${QUERY_NUMBER_PADDED}.sql

Expand Down
Loading
Loading