diff --git a/bench/latency/Makefile b/bench/latency/Makefile index a8950808..99b479a4 100644 --- a/bench/latency/Makefile +++ b/bench/latency/Makefile @@ -1,9 +1,9 @@ CXX ?= g++ CXXFLAGS = -march=native -Wall -std=c++11 -pthread -CXX_RELEASE_FLAGS = -Ofast -DNDEBUG +CXX_RELEASE_FLAGS = -O2 -DNDEBUG -binaries=spdlog-latency g3log-latency +binaries=spdlog-latency g3log-latency g3log-crush all: $(binaries) @@ -15,6 +15,10 @@ spdlog-latency: spdlog-latency.cpp g3log-latency: g3log-latency.cpp $(CXX) g3log-latency.cpp -o g3log-latency $(CXXFLAGS) $(CXX_RELEASE_FLAGS) -I../../../g3log/src -L. -lg3logger + +g3log-crush: g3log-crush.cpp + $(CXX) g3log-crush.cpp -o g3log-crush $(CXXFLAGS) $(CXX_RELEASE_FLAGS) -I../../../g3log/src -L. -lg3logger + .PHONY: clean diff --git a/bench/latency/g3log-crush.cpp b/bench/latency/g3log-crush.cpp new file mode 100644 index 00000000..47d6b197 --- /dev/null +++ b/bench/latency/g3log-crush.cpp @@ -0,0 +1,37 @@ +#include + +#include +#include + +void CrusherLoop() +{ + size_t counter = 0; + while (true) + { + LOGF(INFO, "Some text to crush you machine. thread:"); + if(++counter % 1000000 == 0) + { + std::cout << "Wrote " << counter << " entries" << std::endl; + } + } +} + + +int main(int argc, char** argv) +{ + std::cout << "WARNING: This test will exaust all your machine memory and will crush it!" << std::endl; + std::cout << "Are you sure you want to continue ? " << std::endl; + char c; + std::cin >> c; + if (toupper( c ) != 'Y') + return 0; + + auto worker = g3::LogWorker::createLogWorker(); + auto handle= worker->addDefaultLogger(argv[0], "g3log.txt"); + g3::initializeLogging(worker.get()); + CrusherLoop(); + + return 0; +} + + diff --git a/bench/latency/g3log-latency.cpp b/bench/latency/g3log-latency.cpp index b3c92b49..e96e421b 100644 --- a/bench/latency/g3log-latency.cpp +++ b/bench/latency/g3log-latency.cpp @@ -1,17 +1,3 @@ -//// to compile: c++ bench.cpp -o bench -Wall -Wshadow -Wextra -pedantic -std=c++11 -pthread -I../include -O3 -fPIC -Ofast -m64 -march=native - -// Alternative: c++ bench.cpp -o bench -Wall -Wshadow -Wextra -pedantic -std=c++11 -pthread -I../include -O3 -march=native - - -// the test code itself is Public domain @ref: Unlicense.org -// made by KjellKod, 2015, first published for testing of g3log at github.com/kjellkod/g3log -// Feel free to share, modify etc with no obligations but also with no guarantees from my part either -// enjoy - Kjell Hedstrom (aka KjellKod) -// -// -// spdlog follows however another license. See the bottow of this file -// - #include #include #include @@ -52,7 +38,7 @@ void MeasurePeakDuringLogWrites(const size_t id, std::vector& result) } auto start_time = std::chrono::high_resolution_clock::now(); - LOGF(INFO, "Some text to log for thread: %ld", id); + LOGF(INFO, "Some text to log for thread: %ld", id); auto stop_time = std::chrono::high_resolution_clock::now(); uint64_t time_us = std::chrono::duration_cast(stop_time - start_time).count(); result.push_back(time_us); @@ -73,13 +59,13 @@ void PrintResults(const std::map>& threads_result, // calc worst latenct auto worst = *std::max_element(all_measurements.begin(), all_measurements.end()); - + // calc avg auto total = accumulate(begin(all_measurements), end(all_measurements), 0, std::plus()); auto avg = double(total)/all_measurements.size(); std::cout << "[g3log] worst: " << std::setw(10) << std::right << worst << "\tAvg: " << avg << "\tTotal: " << utils::format(total_us) << " us" << std::endl; - + } }// anonymous @@ -120,10 +106,10 @@ int main(int argc, char** argv) const std::string g_prefix_log_name = "g3log-performance-"; const std::string g_measurement_dump = g_path + g_prefix_log_name + "_RESULT.txt"; - auto worker = g3::LogWorker::createLogWorker(); + auto worker = g3::LogWorker::createLogWorker(); auto handle= worker->addDefaultLogger(argv[0], "g3log.txt"); g3::initializeLogging(worker.get()); - + auto start_time_application_total = std::chrono::high_resolution_clock::now(); for (uint64_t idx = 0; idx < number_of_threads; ++idx) { diff --git a/bench/latency/spdlog-latency.cpp b/bench/latency/spdlog-latency.cpp index 5480264c..ed4966cc 100644 --- a/bench/latency/spdlog-latency.cpp +++ b/bench/latency/spdlog-latency.cpp @@ -1,16 +1,3 @@ -//// to compile: c++ bench.cpp -o bench -Wall -Wshadow -Wextra -pedantic -std=c++11 -pthread -I../include -O3 -fPIC -Ofast -m64 -march=native - -// Alternative: c++ bench.cpp -o bench -Wall -Wshadow -Wextra -pedantic -std=c++11 -pthread -I../include -O3 -march=native - - -// the test code itself is Public domain @ref: Unlicense.org -// made by KjellKod, 2015, first published for testing of g3log at github.com/kjellkod/g3log -// Feel free to share, modify etc with no obligations but also with no guarantees from my part either -// enjoy - Kjell Hedstrom (aka KjellKod) -// -// -// spdlog follows however another license. See the bottow of this file -// #include #include @@ -40,7 +27,7 @@ std::atomic g_counter = {0}; void MeasurePeakDuringLogWrites(const size_t id, std::vector& result) { - auto logger = spd::get("file_logger"); + auto logger = spd::get("file_logger"); while (true) { const size_t value_now = ++g_counter; @@ -70,13 +57,13 @@ void PrintResults(const std::map>& threads_result, // calc worst latenct auto worst = *std::max_element(all_measurements.begin(), all_measurements.end()); - + // calc avg auto total = accumulate(begin(all_measurements), end(all_measurements), 0, std::plus()); auto avg = double(total)/all_measurements.size(); - - std::cout << "[spdlog] worst: " << std::setw(10) << std::right << worst << "\tAvg: " << avg << "\tTotal: " << utils::format(total_us) << " us" << std::endl; - + + std::cout << "[spdlog] worst: " << std::setw(10) << std::right << worst << "\tAvg: " << avg << "\tTotal: " << utils::format(total_us) << " us" << std::endl; + } }// anonymous @@ -114,13 +101,13 @@ int main(int argc, char** argv) } int queue_size = 1048576; // 2 ^ 20 - spdlog::set_async_mode(queue_size); - auto logger = spdlog::create("file_logger", "spdlog.log", true); - - //force flush on every call to compare with g3log - auto s = (spd::sinks::simple_file_sink_mt*)logger->sinks()[0].get(); - s->set_force_flush(true); - + spdlog::set_async_mode(queue_size); + auto logger = spdlog::create("file_logger", "spdlog.log", true); + + //force flush on every call to compare with g3log + auto s = (spd::sinks::simple_file_sink_mt*)logger->sinks()[0].get(); + s->set_force_flush(true); + auto start_time_application_total = std::chrono::high_resolution_clock::now(); for (uint64_t idx = 0; idx < number_of_threads; ++idx) {