add async with null sink bench
This commit is contained in:
		
							parent
							
								
									e97621d61d
								
							
						
					
					
						commit
						214c67788f
					
				| @ -3,7 +3,7 @@ CXXFLAGS	= -march=native -Wall -Wextra -pedantic -std=c++11 -pthread -Wl,--no-as | |||||||
| CXX_RELEASE_FLAGS = -O3 -flto -DNDEBUG | CXX_RELEASE_FLAGS = -O3 -flto -DNDEBUG | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| binaries=spdlog-bench spdlog-bench-mt spdlog-async boost-bench boost-bench-mt glog-bench glog-bench-mt g2log-async easylogging-bench easylogging-bench-mt | binaries=spdlog-bench spdlog-bench-mt spdlog-async spdlog-null-async boost-bench boost-bench-mt glog-bench glog-bench-mt g2log-async easylogging-bench easylogging-bench-mt | ||||||
| 
 | 
 | ||||||
| all: $(binaries) | all: $(binaries) | ||||||
| 
 | 
 | ||||||
| @ -17,6 +17,11 @@ spdlog-async: spdlog-async.cpp | |||||||
| 	$(CXX) spdlog-async.cpp -o spdlog-async  $(CXXFLAGS) $(CXX_RELEASE_FLAGS) | 	$(CXX) spdlog-async.cpp -o spdlog-async  $(CXXFLAGS) $(CXX_RELEASE_FLAGS) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | spdlog-null-async: spdlog-null-async.cpp | ||||||
|  | 	$(CXX) spdlog-null-async.cpp -o spdlog-null-async $(CXXFLAGS) $(CXX_RELEASE_FLAGS) | ||||||
|  | 
 | ||||||
|  | 	 | ||||||
|  | 	 | ||||||
| BOOST_FLAGS	= -DBOOST_LOG_DYN_LINK  -I/usr/include -lboost_log  -lboost_log_setup -lboost_filesystem -lboost_system -lboost_thread -lboost_regex -lboost_date_time -lboost_chrono | BOOST_FLAGS	= -DBOOST_LOG_DYN_LINK  -I/usr/include -lboost_log  -lboost_log_setup -lboost_filesystem -lboost_system -lboost_thread -lboost_regex -lboost_date_time -lboost_chrono | ||||||
| 
 | 
 | ||||||
| boost-bench: boost-bench.cpp | boost-bench: boost-bench.cpp | ||||||
|  | |||||||
							
								
								
									
										112
									
								
								bench/spdlog-null-async.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										112
									
								
								bench/spdlog-null-async.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,112 @@ | |||||||
|  | //
 | ||||||
|  | // Copyright(c) 2015 Gabi Melman.
 | ||||||
|  | // Distributed under the MIT License (http://opensource.org/licenses/MIT)
 | ||||||
|  | //
 | ||||||
|  | 
 | ||||||
|  | //
 | ||||||
|  | // bench.cpp : spdlog benchmarks
 | ||||||
|  | //
 | ||||||
|  | #include <atomic> | ||||||
|  | #include <cstdlib> // EXIT_FAILURE
 | ||||||
|  | #include <iostream> | ||||||
|  | #include <memory> | ||||||
|  | #include <string> | ||||||
|  | #include <thread> | ||||||
|  | #include "spdlog/spdlog.h" | ||||||
|  | #include "spdlog/async_logger.h" | ||||||
|  | #include "spdlog/sinks/null_sink.h" | ||||||
|  | #include "utils.h" | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | using namespace std; | ||||||
|  | using namespace std::chrono; | ||||||
|  | using namespace spdlog; | ||||||
|  | using namespace spdlog::sinks; | ||||||
|  | using namespace utils; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | size_t bench_as(int howmany, std::shared_ptr<spdlog::logger> log, int thread_count); | ||||||
|  | 
 | ||||||
|  | int main(int argc, char* argv[]) | ||||||
|  | { | ||||||
|  | 
 | ||||||
|  |     int queue_size = 1048576; | ||||||
|  |     int howmany = 1000000; | ||||||
|  |     int threads = 10; | ||||||
|  |     int iters = 10; | ||||||
|  | 
 | ||||||
|  |     try | ||||||
|  |     { | ||||||
|  | 
 | ||||||
|  |         if(argc > 1) | ||||||
|  |             howmany = atoi(argv[1]); | ||||||
|  |         if (argc > 2) | ||||||
|  |             threads =   atoi(argv[2]); | ||||||
|  |         if (argc > 3) | ||||||
|  |             queue_size = atoi(argv[3]); | ||||||
|  | 
 | ||||||
|  |         | ||||||
|  |         cout << "\n*******************************************************************************\n"; | ||||||
|  |         cout << "async logging.. " << threads << " threads sharing same logger, " << format(howmany) << " messages " << endl; | ||||||
|  |         cout << "*******************************************************************************\n"; | ||||||
|  | 
 | ||||||
|  |         spdlog::set_async_mode(queue_size); | ||||||
|  | 
 | ||||||
|  |         size_t total_rate = 0; | ||||||
|  | 
 | ||||||
|  |         for(int i = 0; i < iters; ++i) | ||||||
|  |         { | ||||||
|  |             //auto as = spdlog::daily_logger_st("as", "logs/daily_async");
 | ||||||
|  |             auto as = spdlog::create<null_sink_st>("async(null-sink)"); | ||||||
|  |             total_rate+= bench_as(howmany, as, threads); | ||||||
|  |             spdlog::drop("async(null-sink)"); | ||||||
|  |         } | ||||||
|  |         std::cout << endl; | ||||||
|  |         std::cout << "Avg rate: " << format(total_rate/iters)    << "/sec" <<std::endl; | ||||||
|  |          | ||||||
|  |     } | ||||||
|  |     catch (std::exception &ex) | ||||||
|  |     { | ||||||
|  |         std::cerr << "Error: " << ex.what() << std::endl; | ||||||
|  |         perror("Last error"); | ||||||
|  |         return EXIT_FAILURE; | ||||||
|  |     } | ||||||
|  |     return EXIT_SUCCESS; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | //return rate/sec
 | ||||||
|  | size_t bench_as(int howmany, std::shared_ptr<spdlog::logger> log, int thread_count) | ||||||
|  | { | ||||||
|  |     cout << log->name() << "...\t\t" << flush; | ||||||
|  |     std::atomic<int > msg_counter {0}; | ||||||
|  |     vector<thread> threads; | ||||||
|  |     auto start = system_clock::now(); | ||||||
|  |     for (int t = 0; t < thread_count; ++t) | ||||||
|  |     { | ||||||
|  |         threads.push_back(std::thread([&]() | ||||||
|  |         { | ||||||
|  |             for(;;) | ||||||
|  |             { | ||||||
|  |                 int counter = ++msg_counter; | ||||||
|  |                 if (counter > howmany) break; | ||||||
|  |                 log->info("Hello logger: msg number {}", counter); | ||||||
|  |             } | ||||||
|  |         })); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     for(auto &t:threads) | ||||||
|  |     { | ||||||
|  |         t.join(); | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     auto delta = system_clock::now() - start; | ||||||
|  |     auto delta_d = duration_cast<duration<double>> (delta).count(); | ||||||
|  |     auto per_sec = size_t(howmany / delta_d); | ||||||
|  |     cout << format(per_sec) << "/sec" << endl; | ||||||
|  |     return per_sec; | ||||||
|  | } | ||||||
							
								
								
									
										35
									
								
								bench/utils.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								bench/utils.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,35 @@ | |||||||
|  | //
 | ||||||
|  | // Copyright(c) 2015 Gabi Melman.
 | ||||||
|  | // Distributed under the MIT License (http://opensource.org/licenses/MIT)
 | ||||||
|  | //
 | ||||||
|  | 
 | ||||||
|  | #pragma once | ||||||
|  | 
 | ||||||
|  | #include <sstream> | ||||||
|  | #include <iomanip> | ||||||
|  | #include <locale> | ||||||
|  | 
 | ||||||
|  | namespace utils | ||||||
|  | { | ||||||
|  | 
 | ||||||
|  | template<typename T> | ||||||
|  | inline std::string format(const T& value) | ||||||
|  | { | ||||||
|  |     static std::locale loc(""); | ||||||
|  |     std::stringstream ss; | ||||||
|  |     ss.imbue(loc); | ||||||
|  |     ss << value; | ||||||
|  |     return ss.str(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | template<> | ||||||
|  | inline std::string format(const double & value) | ||||||
|  | { | ||||||
|  |     static std::locale loc(""); | ||||||
|  |     std::stringstream ss; | ||||||
|  |     ss.imbue(loc); | ||||||
|  |     ss << std::fixed << std::setprecision(1) << value; | ||||||
|  |     return ss.str(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | } | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user