Suuport multiple benchmark queries files
This commit is contained in:
parent
b56b1521a6
commit
d2156683d3
@ -41,14 +41,14 @@
|
|||||||
// ./query_performance
|
// ./query_performance
|
||||||
// --index-queries-file indices.cypher
|
// --index-queries-file indices.cypher
|
||||||
// --init-queries-file dataset.cypher
|
// --init-queries-file dataset.cypher
|
||||||
// --benchmark-queries-file benchmark_queries.txt
|
// --benchmark-queries-files expand.cypher,match.cypyher
|
||||||
// --use-v3=false
|
// --use-v3=false
|
||||||
//
|
//
|
||||||
// Example usage with Memgraph v3 without MultiFrame:
|
// Example usage with Memgraph v3 without MultiFrame:
|
||||||
// ./query_performance
|
// ./query_performance
|
||||||
// --split-file split_file
|
// --split-file split_file
|
||||||
// --init-queries-file dataset.cypher
|
// --init-queries-file dataset.cypher
|
||||||
// --benchmark-queries-file benchmark_queries.txt
|
// --benchmark-queries-files expand.cypher,match.cypyher
|
||||||
// --use-v3=true
|
// --use-v3=true
|
||||||
// --use-multi-frame=false
|
// --use-multi-frame=false
|
||||||
//
|
//
|
||||||
@ -56,7 +56,7 @@
|
|||||||
// ./query_performance
|
// ./query_performance
|
||||||
// --split-file split_file
|
// --split-file split_file
|
||||||
// --init-queries-file dataset.cypher
|
// --init-queries-file dataset.cypher
|
||||||
// --benchmark-queries-file benchmark_queries.txt
|
// --benchmark-queries-files expand.cypher,match.cypyher
|
||||||
// --use-v3=true
|
// --use-v3=true
|
||||||
// --use-multi-frame=true
|
// --use-multi-frame=true
|
||||||
//
|
//
|
||||||
@ -69,6 +69,7 @@
|
|||||||
// because of address resolution. See https://github.com/flamegraph-rs/flamegraph/issues/74.
|
// because of address resolution. See https://github.com/flamegraph-rs/flamegraph/issues/74.
|
||||||
|
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
|
#include <filesystem>
|
||||||
#include <istream>
|
#include <istream>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
|
|
||||||
@ -90,6 +91,9 @@
|
|||||||
#include "query/interpreter.hpp"
|
#include "query/interpreter.hpp"
|
||||||
#include "storage/v2/storage.hpp"
|
#include "storage/v2/storage.hpp"
|
||||||
|
|
||||||
|
// common includes
|
||||||
|
#include "utils/string.hpp"
|
||||||
|
|
||||||
// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
|
// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
|
||||||
DEFINE_string(index_queries_file, "",
|
DEFINE_string(index_queries_file, "",
|
||||||
"Path to the file which contains the queries to create indices. Used only for v2. Must contain an empty "
|
"Path to the file which contains the queries to create indices. Used only for v2. Must contain an empty "
|
||||||
@ -103,9 +107,9 @@ DEFINE_string(init_queries_file, "",
|
|||||||
"Path to the file that is used to insert the initial dataset, one query per line. Must contain an empty "
|
"Path to the file that is used to insert the initial dataset, one query per line. Must contain an empty "
|
||||||
"line at the end of the file after the queries.");
|
"line at the end of the file after the queries.");
|
||||||
// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
|
// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
|
||||||
DEFINE_string(benchmark_queries_file, "",
|
DEFINE_string(benchmark_queries_files, "",
|
||||||
"Path to the file that contains the queries that we want to compare, one query per line. Must contain an "
|
"Comma separated paths to the files that contain the queries that we want to compare, one query per "
|
||||||
"empty line at the end of the file after the queries.");
|
"line. Must contain an empty line at the end of each file after the queries.");
|
||||||
// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
|
// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
|
||||||
DEFINE_bool(use_v3, true, "If set to true, then Memgraph v3 will be used, otherwise Memgraph v2 will be used.");
|
DEFINE_bool(use_v3, true, "If set to true, then Memgraph v3 will be used, otherwise Memgraph v2 will be used.");
|
||||||
|
|
||||||
@ -170,13 +174,23 @@ std::vector<std::string> ReadQueries(const std::string &file_name) {
|
|||||||
return queries;
|
return queries;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::map<std::string, std::vector<std::string>> ReadBenchmarkQueries(const std::string benchmark_queries_files) {
|
||||||
|
auto benchmark_files = utils::Split(benchmark_queries_files, ",");
|
||||||
|
std::map<std::string, std::vector<std::string>> result;
|
||||||
|
for (const auto &benchmark_file : benchmark_files) {
|
||||||
|
const auto path = std::filesystem::path(benchmark_file);
|
||||||
|
result.emplace(path.stem().string(), ReadQueries(benchmark_file));
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
void RunV2() {
|
void RunV2() {
|
||||||
spdlog::critical("Running V2");
|
spdlog::critical("Running V2");
|
||||||
const auto run_start = std::chrono::high_resolution_clock::now();
|
const auto run_start = std::chrono::high_resolution_clock::now();
|
||||||
|
|
||||||
const auto index_queries = ReadQueries(FLAGS_index_queries_file);
|
const auto index_queries = ReadQueries(FLAGS_index_queries_file);
|
||||||
const auto init_queries = ReadQueries(FLAGS_init_queries_file);
|
const auto init_queries = ReadQueries(FLAGS_init_queries_file);
|
||||||
const auto benchmark_queries = ReadQueries(FLAGS_benchmark_queries_file);
|
const auto benchmarks = ReadBenchmarkQueries(FLAGS_benchmark_queries_files);
|
||||||
|
|
||||||
storage::Storage storage{
|
storage::Storage storage{
|
||||||
storage::Config{.durability{.snapshot_wal_mode = storage::Config::Durability::SnapshotWalMode::DISABLED}}};
|
storage::Config{.durability{.snapshot_wal_mode = storage::Config::Durability::SnapshotWalMode::DISABLED}}};
|
||||||
@ -196,12 +210,21 @@ void RunV2() {
|
|||||||
RunInitQueries(interpreter_context, index_queries);
|
RunInitQueries(interpreter_context, index_queries);
|
||||||
RunInitQueries(interpreter_context, init_queries);
|
RunInitQueries(interpreter_context, init_queries);
|
||||||
const auto benchmark_start = std::chrono::high_resolution_clock::now();
|
const auto benchmark_start = std::chrono::high_resolution_clock::now();
|
||||||
RunBenchmarkQueries(interpreter_context, benchmark_queries);
|
|
||||||
const auto benchmark_end = std::chrono::high_resolution_clock::now();
|
|
||||||
|
|
||||||
spdlog::critical("Read: {}ms", std::chrono::duration_cast<std::chrono::milliseconds>(init_start - run_start).count());
|
spdlog::critical("Read: {}ms", std::chrono::duration_cast<std::chrono::milliseconds>(init_start - run_start).count());
|
||||||
spdlog::critical("Init: {}ms",
|
spdlog::critical("Init: {}ms",
|
||||||
std::chrono::duration_cast<std::chrono::milliseconds>(benchmark_start - init_start).count());
|
std::chrono::duration_cast<std::chrono::milliseconds>(benchmark_start - init_start).count());
|
||||||
|
|
||||||
|
for (const auto &[name, queries] : benchmarks) {
|
||||||
|
const auto current_start = std::chrono::high_resolution_clock::now();
|
||||||
|
RunBenchmarkQueries(interpreter_context, queries);
|
||||||
|
const auto current_stop = std::chrono::high_resolution_clock::now();
|
||||||
|
|
||||||
|
spdlog::critical("Benchmark {}: {}ms", name,
|
||||||
|
std::chrono::duration_cast<std::chrono::milliseconds>(current_stop - current_start).count());
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto benchmark_end = std::chrono::high_resolution_clock::now();
|
||||||
spdlog::critical("Benchmark: {}ms",
|
spdlog::critical("Benchmark: {}ms",
|
||||||
std::chrono::duration_cast<std::chrono::milliseconds>(benchmark_end - benchmark_start).count());
|
std::chrono::duration_cast<std::chrono::milliseconds>(benchmark_end - benchmark_start).count());
|
||||||
}
|
}
|
||||||
@ -214,7 +237,7 @@ void RunV3() {
|
|||||||
auto sm = memgraph::coordinator::ShardMap::Parse(sm_file);
|
auto sm = memgraph::coordinator::ShardMap::Parse(sm_file);
|
||||||
|
|
||||||
const auto init_queries = ReadQueries(FLAGS_init_queries_file);
|
const auto init_queries = ReadQueries(FLAGS_init_queries_file);
|
||||||
const auto benchmark_queries = ReadQueries(FLAGS_benchmark_queries_file);
|
const auto benchmarks = ReadBenchmarkQueries(FLAGS_benchmark_queries_files);
|
||||||
|
|
||||||
io::local_transport::LocalSystem ls;
|
io::local_transport::LocalSystem ls;
|
||||||
|
|
||||||
@ -250,14 +273,24 @@ void RunV3() {
|
|||||||
const auto init_start = std::chrono::high_resolution_clock::now();
|
const auto init_start = std::chrono::high_resolution_clock::now();
|
||||||
RunInitQueries(interpreter_context, init_queries);
|
RunInitQueries(interpreter_context, init_queries);
|
||||||
const auto benchmark_start = std::chrono::high_resolution_clock::now();
|
const auto benchmark_start = std::chrono::high_resolution_clock::now();
|
||||||
RunBenchmarkQueries(interpreter_context, benchmark_queries);
|
|
||||||
const auto benchmark_end = std::chrono::high_resolution_clock::now();
|
|
||||||
|
|
||||||
spdlog::critical("Read: {}ms", std::chrono::duration_cast<std::chrono::milliseconds>(init_start - run_start).count());
|
spdlog::critical("Read: {}ms", std::chrono::duration_cast<std::chrono::milliseconds>(init_start - run_start).count());
|
||||||
spdlog::critical("Init: {}ms",
|
spdlog::critical("Init: {}ms",
|
||||||
std::chrono::duration_cast<std::chrono::milliseconds>(benchmark_start - init_start).count());
|
std::chrono::duration_cast<std::chrono::milliseconds>(benchmark_start - init_start).count());
|
||||||
|
|
||||||
|
for (const auto &[name, queries] : benchmarks) {
|
||||||
|
const auto current_start = std::chrono::high_resolution_clock::now();
|
||||||
|
RunBenchmarkQueries(interpreter_context, queries);
|
||||||
|
const auto current_stop = std::chrono::high_resolution_clock::now();
|
||||||
|
|
||||||
|
spdlog::critical("Benchmark {}: {}ms", name,
|
||||||
|
std::chrono::duration_cast<std::chrono::milliseconds>(current_stop - current_start).count());
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto benchmark_end = std::chrono::high_resolution_clock::now();
|
||||||
spdlog::critical("Benchmark: {}ms",
|
spdlog::critical("Benchmark: {}ms",
|
||||||
std::chrono::duration_cast<std::chrono::milliseconds>(benchmark_end - benchmark_start).count());
|
std::chrono::duration_cast<std::chrono::milliseconds>(benchmark_end - benchmark_start).count());
|
||||||
|
|
||||||
ls.ShutDown();
|
ls.ShutDown();
|
||||||
}
|
}
|
||||||
} // namespace memgraph::tests::manual
|
} // namespace memgraph::tests::manual
|
||||||
|
Loading…
Reference in New Issue
Block a user