Changes: boost, easylogging, g2log, glog, spdlog.
This commit is contained in:
		
							parent
							
								
									c83dd5d60e
								
							
						
					
					
						commit
						70ad1aa409
					
				
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -1,4 +1,5 @@ | |||||||
| # Auto generated files | # Auto generated files | ||||||
|  | build/* | ||||||
| *.slo | *.slo | ||||||
| *.lo | *.lo | ||||||
| *.o | *.o | ||||||
|  | |||||||
| @ -3,7 +3,15 @@ CXXFLAGS	= -march=native -Wall -Wextra -pedantic -std=c++11 -pthread -I../includ | |||||||
| CXX_RELEASE_FLAGS = -O3 -flto -DNDEBUG | CXX_RELEASE_FLAGS = -O3 -flto -DNDEBUG | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 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 | #         g2log-async
 | ||||||
|  | binaries=spdlog-bench spdlog-bench-mt spdlog-async spdlog-null-async \
 | ||||||
|  |          boost-bench boost-bench-mt \
 | ||||||
|  |          glog-bench glog-bench-mt \
 | ||||||
|  |          g3log-async \
 | ||||||
|  |          p7-bench p7-bench-mt \
 | ||||||
|  |          log4cpp-bench log4cpp-bench-mt \
 | ||||||
|  |          log4cplus-bench log4cplus-bench-mt \
 | ||||||
|  |          easylogging-bench easylogging-bench-mt | ||||||
| 
 | 
 | ||||||
| all: $(binaries) | all: $(binaries) | ||||||
| 
 | 
 | ||||||
| @ -16,13 +24,10 @@ spdlog-bench-mt: spdlog-bench-mt.cpp | |||||||
| spdlog-async: spdlog-async.cpp | 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 | spdlog-null-async: spdlog-null-async.cpp | ||||||
| 	$(CXX) spdlog-null-async.cpp -o spdlog-null-async $(CXXFLAGS) $(CXX_RELEASE_FLAGS) | 	$(CXX) spdlog-null-async.cpp -o spdlog-null-async $(CXXFLAGS) $(CXX_RELEASE_FLAGS) | ||||||
| 
 | 
 | ||||||
| 	 | BOOST_FLAGS	= -DBOOST_LOG_DYN_LINK -I$(HOME)/include -I/usr/include -L$(HOME)/lib -lboost_log_setup -lboost_log -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 | ||||||
| 	$(CXX) boost-bench.cpp -o boost-bench $(CXXFLAGS) $(BOOST_FLAGS) $(CXX_RELEASE_FLAGS) | 	$(CXX) boost-bench.cpp -o boost-bench $(CXXFLAGS) $(BOOST_FLAGS) $(CXX_RELEASE_FLAGS) | ||||||
| @ -30,21 +35,43 @@ boost-bench: boost-bench.cpp | |||||||
| boost-bench-mt: boost-bench-mt.cpp | boost-bench-mt: boost-bench-mt.cpp | ||||||
| 	$(CXX) boost-bench-mt.cpp -o boost-bench-mt $(CXXFLAGS) $(BOOST_FLAGS) $(CXX_RELEASE_FLAGS)	 | 	$(CXX) boost-bench-mt.cpp -o boost-bench-mt $(CXXFLAGS) $(BOOST_FLAGS) $(CXX_RELEASE_FLAGS)	 | ||||||
| 
 | 
 | ||||||
| 
 | GLOG_FLAGS = -I$(HOME)/include -L$(HOME)/lib -lglog | ||||||
| GLOG_FLAGS = -lglog |  | ||||||
| glog-bench: glog-bench.cpp | glog-bench: glog-bench.cpp | ||||||
| 	$(CXX) glog-bench.cpp -o glog-bench $(CXXFLAGS) $(GLOG_FLAGS) $(CXX_RELEASE_FLAGS) | 	$(CXX) glog-bench.cpp -o glog-bench $(CXXFLAGS) $(GLOG_FLAGS) $(CXX_RELEASE_FLAGS) | ||||||
| 	 | 	 | ||||||
| glog-bench-mt: glog-bench-mt.cpp | glog-bench-mt: glog-bench-mt.cpp | ||||||
| 	$(CXX) glog-bench-mt.cpp -o glog-bench-mt $(CXXFLAGS) $(GLOG_FLAGS) $(CXX_RELEASE_FLAGS)	 | 	$(CXX) glog-bench-mt.cpp -o glog-bench-mt $(CXXFLAGS) $(GLOG_FLAGS) $(CXX_RELEASE_FLAGS)	 | ||||||
| 
 | 
 | ||||||
| 
 | G2LOG_FLAGS = -I$(HOME)/include -L$(HOME)/lib -llib_g2logger  | ||||||
| G2LOG_FLAGS = -I/home/gabi/devel/g2log/g2log/src -L/home/gabi/devel/g2log/g2log -llib_g2logger  |  | ||||||
| g2log-async: g2log-async.cpp | g2log-async: g2log-async.cpp | ||||||
| 	$(CXX) g2log-async.cpp -o g2log-async $(CXXFLAGS) $(G2LOG_FLAGS) $(CXX_RELEASE_FLAGS) | 	$(CXX) g2log-async.cpp -o g2log-async $(CXXFLAGS) $(G2LOG_FLAGS) $(CXX_RELEASE_FLAGS) | ||||||
| 	 | 	 | ||||||
|  | G3LOG_FLAGS = -I$(HOME)/include -L$(HOME)/lib -lg3logger | ||||||
|  | g3log-async: g3log-async.cpp | ||||||
|  | 	$(CXX) g3log-async.cpp -o g3log-async $(CXXFLAGS) $(G3LOG_FLAGS) $(CXX_RELEASE_FLAGS) | ||||||
| 
 | 
 | ||||||
| EASYL_FLAGS = -I../../easylogging/src/ | P7_FLAGS = -I$(HOME)/P7/Headers -I$(HOME)/include -L$(HOME)/lib -lP7 | ||||||
|  | p7-bench: p7-bench.cpp | ||||||
|  | 	$(CXX) p7-bench.cpp -o p7-bench $(CXXFLAGS) $(P7_FLAGS) $(CXX_RELEASE_FLAGS) | ||||||
|  | 
 | ||||||
|  | p7-bench-mt: p7-bench-mt.cpp | ||||||
|  | 	$(CXX) p7-bench-mt.cpp -o p7-bench-mt $(CXXFLAGS) $(P7_FLAGS) $(CXX_RELEASE_FLAGS) | ||||||
|  | 
 | ||||||
|  | LOG4CPP_FLAGS = -I$(HOME)/include -L$(HOME)/lib -llog4cpp | ||||||
|  | log4cpp-bench: log4cpp-bench.cpp | ||||||
|  | 	$(CXX) log4cpp-bench.cpp -o log4cpp-bench $(CXXFLAGS) $(LOG4CPP_FLAGS) $(CXX_RELEASE_FLAGS) | ||||||
|  | 
 | ||||||
|  | log4cpp-bench-mt: log4cpp-bench-mt.cpp | ||||||
|  | 	$(CXX) log4cpp-bench-mt.cpp -o log4cpp-bench-mt $(CXXFLAGS) $(LOG4CPP_FLAGS) $(CXX_RELEASE_FLAGS) | ||||||
|  | 
 | ||||||
|  | LOG4CPLUS_FLAGS = -I$(HOME)/include -L$(HOME)/lib -llog4cplus | ||||||
|  | log4cplus-bench: log4cplus-bench.cpp | ||||||
|  | 	$(CXX) log4cplus-bench.cpp -o log4cplus-bench $(CXXFLAGS) $(LOG4CPLUS_FLAGS) $(CXX_RELEASE_FLAGS) | ||||||
|  | 
 | ||||||
|  | log4cplus-bench-mt: log4cplus-bench-mt.cpp | ||||||
|  | 	$(CXX) log4cplus-bench-mt.cpp -o log4cplus-bench-mt $(CXXFLAGS) $(LOG4CPLUS_FLAGS) $(CXX_RELEASE_FLAGS) | ||||||
|  | 
 | ||||||
|  | EASYL_FLAGS = -I$(HOME)/easyloggingpp/src | ||||||
| easylogging-bench: easylogging-bench.cpp | easylogging-bench: easylogging-bench.cpp | ||||||
| 	$(CXX) easylogging-bench.cpp -o easylogging-bench $(CXXFLAGS) $(EASYL_FLAGS) $(CXX_RELEASE_FLAGS) | 	$(CXX) easylogging-bench.cpp -o easylogging-bench $(CXXFLAGS) $(EASYL_FLAGS) $(CXX_RELEASE_FLAGS) | ||||||
| easylogging-bench-mt: easylogging-bench-mt.cpp | easylogging-bench-mt: easylogging-bench-mt.cpp | ||||||
| @ -55,8 +82,4 @@ easylogging-bench-mt: easylogging-bench-mt.cpp | |||||||
| clean: | clean: | ||||||
| 	rm -f *.o logs/* $(binaries) | 	rm -f *.o logs/* $(binaries) | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| rebuild: clean all | rebuild: clean all | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|  | |||||||
| @ -4,6 +4,8 @@ | |||||||
| //
 | //
 | ||||||
| 
 | 
 | ||||||
| #include <atomic> | #include <atomic> | ||||||
|  | #include <chrono> | ||||||
|  | #include <iostream> | ||||||
| #include <thread> | #include <thread> | ||||||
| #include <vector> | #include <vector> | ||||||
| 
 | 
 | ||||||
| @ -23,7 +25,7 @@ namespace keywords = boost::log::keywords; | |||||||
| 
 | 
 | ||||||
| void init() | void init() | ||||||
| { | { | ||||||
|     logging::add_file_log(keywords::file_name = "logs/boost-sample_%N.log", /*< file name pattern >*/ |     logging::add_file_log(keywords::file_name = "logs/boost-bench-mt_%N.log", /*< file name pattern >*/ | ||||||
|         keywords::auto_flush = false, keywords::format = "[%TimeStamp%]: %Message%"); |         keywords::auto_flush = false, keywords::format = "[%TimeStamp%]: %Message%"); | ||||||
| 
 | 
 | ||||||
|     logging::core::get()->set_filter(logging::trivial::severity >= logging::trivial::info); |     logging::core::get()->set_filter(logging::trivial::severity >= logging::trivial::info); | ||||||
| @ -33,6 +35,9 @@ using namespace std; | |||||||
| 
 | 
 | ||||||
| int main(int argc, char *argv[]) | int main(int argc, char *argv[]) | ||||||
| { | { | ||||||
|  |     using namespace std::chrono; | ||||||
|  |     using clock = steady_clock; | ||||||
|  | 
 | ||||||
|     int thread_count = 10; |     int thread_count = 10; | ||||||
|     if (argc > 1) |     if (argc > 1) | ||||||
|         thread_count = atoi(argv[1]); |         thread_count = atoi(argv[1]); | ||||||
| @ -49,6 +54,7 @@ int main(int argc, char *argv[]) | |||||||
|     std::atomic<int> msg_counter{0}; |     std::atomic<int> msg_counter{0}; | ||||||
|     vector<thread> threads; |     vector<thread> threads; | ||||||
| 
 | 
 | ||||||
|  |     auto start = clock::now(); | ||||||
|     for (int t = 0; t < thread_count; ++t) |     for (int t = 0; t < thread_count; ++t) | ||||||
|     { |     { | ||||||
|         threads.push_back(std::thread([&]() { |         threads.push_back(std::thread([&]() { | ||||||
| @ -65,7 +71,17 @@ int main(int argc, char *argv[]) | |||||||
|     for (auto &t : threads) |     for (auto &t : threads) | ||||||
|     { |     { | ||||||
|         t.join(); |         t.join(); | ||||||
|     }; |     } | ||||||
|  | 
 | ||||||
|  |     duration<float> delta = clock::now() - start; | ||||||
|  |     float deltaf = delta.count(); | ||||||
|  |     auto rate = howmany / deltaf; | ||||||
|  | 
 | ||||||
|  |     std::cout << "Total: " << howmany << std::endl; | ||||||
|  |     std::cout << "Threads: " << thread_count << std::endl; | ||||||
|  |     std::cout << "Delta = " << deltaf << " seconds" << std::endl; | ||||||
|  |     std::cout << "Rate = " << rate << "/sec" << std::endl; | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
|     return 0; |     return 0; | ||||||
| } | } | ||||||
|  | |||||||
| @ -2,6 +2,10 @@ | |||||||
| // Copyright(c) 2015 Gabi Melman.
 | // Copyright(c) 2015 Gabi Melman.
 | ||||||
| // Distributed under the MIT License (http://opensource.org/licenses/MIT)
 | // Distributed under the MIT License (http://opensource.org/licenses/MIT)
 | ||||||
| //
 | //
 | ||||||
|  | 
 | ||||||
|  | #include <chrono> | ||||||
|  | #include <iostream> | ||||||
|  | 
 | ||||||
| #include <boost/log/core.hpp> | #include <boost/log/core.hpp> | ||||||
| #include <boost/log/expressions.hpp> | #include <boost/log/expressions.hpp> | ||||||
| #include <boost/log/sinks/text_file_backend.hpp> | #include <boost/log/sinks/text_file_backend.hpp> | ||||||
| @ -18,22 +22,35 @@ namespace keywords = boost::log::keywords; | |||||||
| 
 | 
 | ||||||
| void init() | void init() | ||||||
| { | { | ||||||
|     logging::add_file_log(keywords::file_name = "logs/boost-sample_%N.log", /*< file name pattern >*/ |     logging::add_file_log(keywords::file_name = "logs/boost-bench_%N.log", /*< file name pattern >*/ | ||||||
|         keywords::auto_flush = false, keywords::format = "[%TimeStamp%]: %Message%"); |         keywords::auto_flush = false, keywords::format = "[%TimeStamp%]: %Message%"); | ||||||
| 
 | 
 | ||||||
|     logging::core::get()->set_filter(logging::trivial::severity >= logging::trivial::info); |     logging::core::get()->set_filter(logging::trivial::severity >= logging::trivial::info); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int main(int argc, char *[]) | int main(int, char *[]) | ||||||
| { | { | ||||||
|  |     using namespace std::chrono; | ||||||
|  |     using clock = steady_clock; | ||||||
|  | 
 | ||||||
|     int howmany = 1000000; |     int howmany = 1000000; | ||||||
|     init(); |     init(); | ||||||
|     logging::add_common_attributes(); |     logging::add_common_attributes(); | ||||||
| 
 | 
 | ||||||
|     using namespace logging::trivial; |     using namespace logging::trivial; | ||||||
|     src::severity_logger_mt<severity_level> lg; |     src::severity_logger_mt<severity_level> lg; | ||||||
|  | 
 | ||||||
|  |     auto start = clock::now(); | ||||||
|     for (int i = 0; i < howmany; ++i) |     for (int i = 0; i < howmany; ++i) | ||||||
|         BOOST_LOG_SEV(lg, info) << "boost message #" << i << ": This is some text for your pleasure"; |         BOOST_LOG_SEV(lg, info) << "boost message #" << i << ": This is some text for your pleasure"; | ||||||
| 
 | 
 | ||||||
|  |     duration<float> delta = clock::now() - start; | ||||||
|  |     float deltaf = delta.count(); | ||||||
|  |     auto rate = howmany / deltaf; | ||||||
|  | 
 | ||||||
|  |     std::cout << "Total: " << howmany << std::endl; | ||||||
|  |     std::cout << "Delta = " << deltaf << " seconds" << std::endl; | ||||||
|  |     std::cout << "Rate = " << rate << "/sec" << std::endl; | ||||||
|  | 
 | ||||||
|     return 0; |     return 0; | ||||||
| } | } | ||||||
|  | |||||||
| @ -4,17 +4,22 @@ | |||||||
| //
 | //
 | ||||||
| 
 | 
 | ||||||
| #include <atomic> | #include <atomic> | ||||||
|  | #include <chrono> | ||||||
|  | #include <iostream> | ||||||
| #include <thread> | #include <thread> | ||||||
| #include <vector> | #include <vector> | ||||||
| 
 | 
 | ||||||
| #define _ELPP_THREAD_SAFE | #define ELPP_THREAD_SAFE | ||||||
| #include "easylogging++.h" | #include "easylogging++.h" | ||||||
| _INITIALIZE_EASYLOGGINGPP | #include "easylogging++.cc" | ||||||
|  | INITIALIZE_EASYLOGGINGPP | ||||||
| 
 | 
 | ||||||
| using namespace std; | using namespace std; | ||||||
| 
 | 
 | ||||||
| int main(int argc, char *argv[]) | int main(int argc, char *argv[]) | ||||||
| { | { | ||||||
|  |     using namespace std::chrono; | ||||||
|  |     using clock = steady_clock; | ||||||
| 
 | 
 | ||||||
|     int thread_count = 10; |     int thread_count = 10; | ||||||
|     if (argc > 1) |     if (argc > 1) | ||||||
| @ -23,12 +28,13 @@ int main(int argc, char *argv[]) | |||||||
|     int howmany = 1000000; |     int howmany = 1000000; | ||||||
| 
 | 
 | ||||||
|     // Load configuration from file
 |     // Load configuration from file
 | ||||||
|     el::Configurations conf("easyl.conf"); |     el::Configurations conf("easyl-mt.conf"); | ||||||
|     el::Loggers::reconfigureLogger("default", conf); |     el::Loggers::reconfigureLogger("default", conf); | ||||||
| 
 | 
 | ||||||
|     std::atomic<int> msg_counter{0}; |     std::atomic<int> msg_counter{0}; | ||||||
|     vector<thread> threads; |     vector<thread> threads; | ||||||
| 
 | 
 | ||||||
|  |     auto start = clock::now(); | ||||||
|     for (int t = 0; t < thread_count; ++t) |     for (int t = 0; t < thread_count; ++t) | ||||||
|     { |     { | ||||||
|         threads.push_back(std::thread([&]() { |         threads.push_back(std::thread([&]() { | ||||||
| @ -45,7 +51,16 @@ int main(int argc, char *argv[]) | |||||||
|     for (auto &t : threads) |     for (auto &t : threads) | ||||||
|     { |     { | ||||||
|         t.join(); |         t.join(); | ||||||
|     }; |     } | ||||||
|  | 
 | ||||||
|  |     duration<float> delta = clock::now() - start; | ||||||
|  |     float deltaf = delta.count(); | ||||||
|  |     auto rate = howmany / deltaf; | ||||||
|  | 
 | ||||||
|  |     std::cout << "Total: " << howmany << std::endl; | ||||||
|  |     std::cout << "Threads: " << thread_count << std::endl; | ||||||
|  |     std::cout << "Delta = " << deltaf << " seconds" << std::endl; | ||||||
|  |     std::cout << "Rate = " << rate << "/sec" << std::endl; | ||||||
| 
 | 
 | ||||||
|     return 0; |     return 0; | ||||||
| } | } | ||||||
|  | |||||||
| @ -3,19 +3,37 @@ | |||||||
| // Distributed under the MIT License (http://opensource.org/licenses/MIT)
 | // Distributed under the MIT License (http://opensource.org/licenses/MIT)
 | ||||||
| //
 | //
 | ||||||
| 
 | 
 | ||||||
| #include "easylogging++.h" | #include <chrono> | ||||||
|  | #include <iostream> | ||||||
| 
 | 
 | ||||||
| _INITIALIZE_EASYLOGGINGPP | #include "easylogging++.h" | ||||||
|  | #include "easylogging++.cc" | ||||||
|  | INITIALIZE_EASYLOGGINGPP | ||||||
| 
 | 
 | ||||||
| int main(int, char *[]) | int main(int, char *[]) | ||||||
| { | { | ||||||
|  |     using namespace std::chrono; | ||||||
|  |     using clock = steady_clock; | ||||||
|  | 
 | ||||||
|     int howmany = 1000000; |     int howmany = 1000000; | ||||||
| 
 | 
 | ||||||
|     // Load configuration from file
 |     // Load configuration from file
 | ||||||
|     el::Configurations conf("easyl.conf"); |     el::Configurations conf("easyl.conf"); | ||||||
|     el::Loggers::reconfigureLogger("default", conf); |     el::Loggers::reconfigureLogger("default", conf); | ||||||
| 
 | 
 | ||||||
|  |     el::Logger* defaultLogger = el::Loggers::getLogger("default"); | ||||||
|  | 
 | ||||||
|  |     auto start = clock::now(); | ||||||
|     for (int i = 0; i < howmany; ++i) |     for (int i = 0; i < howmany; ++i) | ||||||
|         LOG(INFO) << "easylog message #" << i << ": This is some text for your pleasure"; |         LOG(INFO) << "easylog message #" << i << ": This is some text for your pleasure"; | ||||||
|  | 
 | ||||||
|  |     duration<float> delta = clock::now() - start; | ||||||
|  |     float deltaf = delta.count(); | ||||||
|  |     auto rate = howmany / deltaf; | ||||||
|  | 
 | ||||||
|  |     std::cout << "Total: " << howmany << std::endl; | ||||||
|  |     std::cout << "Delta = " << deltaf << " seconds" << std::endl; | ||||||
|  |     std::cout << "Rate = " << rate << "/sec" << std::endl; | ||||||
|  | 
 | ||||||
|     return 0; |     return 0; | ||||||
| } | } | ||||||
|  | |||||||
| @ -47,7 +47,7 @@ int main(int argc, char *argv[]) | |||||||
|     for (auto &t : threads) |     for (auto &t : threads) | ||||||
|     { |     { | ||||||
|         t.join(); |         t.join(); | ||||||
|     }; |     } | ||||||
| 
 | 
 | ||||||
|     duration<float> delta = clock::now() - start; |     duration<float> delta = clock::now() - start; | ||||||
|     float deltaf = delta.count(); |     float deltaf = delta.count(); | ||||||
|  | |||||||
| @ -4,6 +4,8 @@ | |||||||
| //
 | //
 | ||||||
| 
 | 
 | ||||||
| #include <atomic> | #include <atomic> | ||||||
|  | #include <chrono> | ||||||
|  | #include <iostream> | ||||||
| #include <thread> | #include <thread> | ||||||
| #include <vector> | #include <vector> | ||||||
| 
 | 
 | ||||||
| @ -13,6 +15,8 @@ using namespace std; | |||||||
| 
 | 
 | ||||||
| int main(int argc, char *argv[]) | int main(int argc, char *argv[]) | ||||||
| { | { | ||||||
|  |     using namespace std::chrono; | ||||||
|  |     using clock = steady_clock; | ||||||
| 
 | 
 | ||||||
|     int thread_count = 10; |     int thread_count = 10; | ||||||
|     if (argc > 1) |     if (argc > 1) | ||||||
| @ -27,6 +31,7 @@ int main(int argc, char *argv[]) | |||||||
|     std::atomic<int> msg_counter{0}; |     std::atomic<int> msg_counter{0}; | ||||||
|     vector<thread> threads; |     vector<thread> threads; | ||||||
| 
 | 
 | ||||||
|  |     auto start = clock::now(); | ||||||
|     for (int t = 0; t < thread_count; ++t) |     for (int t = 0; t < thread_count; ++t) | ||||||
|     { |     { | ||||||
|         threads.push_back(std::thread([&]() { |         threads.push_back(std::thread([&]() { | ||||||
| @ -43,7 +48,16 @@ int main(int argc, char *argv[]) | |||||||
|     for (auto &t : threads) |     for (auto &t : threads) | ||||||
|     { |     { | ||||||
|         t.join(); |         t.join(); | ||||||
|     }; |     } | ||||||
|  | 
 | ||||||
|  |     duration<float> delta = clock::now() - start; | ||||||
|  |     float deltaf = delta.count(); | ||||||
|  |     auto rate = howmany / deltaf; | ||||||
|  | 
 | ||||||
|  |     std::cout << "Total: " << howmany << std::endl; | ||||||
|  |     std::cout << "Threads: " << thread_count << std::endl; | ||||||
|  |     std::cout << "Delta = " << deltaf << " seconds" << std::endl; | ||||||
|  |     std::cout << "Rate = " << rate << "/sec" << std::endl; | ||||||
| 
 | 
 | ||||||
|     return 0; |     return 0; | ||||||
| } | } | ||||||
|  | |||||||
| @ -3,17 +3,33 @@ | |||||||
| // Distributed under the MIT License (http://opensource.org/licenses/MIT)
 | // Distributed under the MIT License (http://opensource.org/licenses/MIT)
 | ||||||
| //
 | //
 | ||||||
| 
 | 
 | ||||||
|  | #include <chrono> | ||||||
|  | #include <iostream> | ||||||
|  | 
 | ||||||
| #include "glog/logging.h" | #include "glog/logging.h" | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
| int main(int, char *argv[]) | int main(int, char *argv[]) | ||||||
| { | { | ||||||
|  |     using namespace std::chrono; | ||||||
|  |     using clock = steady_clock; | ||||||
|  | 
 | ||||||
|     int howmany = 1000000; |     int howmany = 1000000; | ||||||
| 
 | 
 | ||||||
|     FLAGS_logtostderr = 0; |     FLAGS_logtostderr = 0; | ||||||
|     FLAGS_log_dir = "logs"; |     FLAGS_log_dir = "logs"; | ||||||
|     google::InitGoogleLogging(argv[0]); |     google::InitGoogleLogging(argv[0]); | ||||||
|  |     auto start = clock::now(); | ||||||
|     for (int i = 0; i < howmany; ++i) |     for (int i = 0; i < howmany; ++i) | ||||||
|         LOG(INFO) << "glog message # " << i << ": This is some text for your pleasure"; |         LOG(INFO) << "glog message #" << i << ": This is some text for your pleasure"; | ||||||
|  | 
 | ||||||
|  |     duration<float> delta = clock::now() - start; | ||||||
|  |     float deltaf = delta.count(); | ||||||
|  |     auto rate = howmany / deltaf; | ||||||
|  | 
 | ||||||
|  |     std::cout << "Total: " << howmany << std::endl; | ||||||
|  |     std::cout << "Delta = " << deltaf << " seconds" << std::endl; | ||||||
|  |     std::cout << "Rate = " << rate << "/sec" << std::endl; | ||||||
| 
 | 
 | ||||||
|     return 0; |     return 0; | ||||||
| } | } | ||||||
|  | |||||||
							
								
								
									
										19
									
								
								bench/mem
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										19
									
								
								bench/mem
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,19 @@ | |||||||
|  | #!/bin/sh | ||||||
|  | 
 | ||||||
|  | if [ $# -lt 1 ]; then | ||||||
|  |   echo "usage: $0 <program>" | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | PROG=$1 | ||||||
|  | 
 | ||||||
|  | if [ ! -x "$PROG" ]; then | ||||||
|  |   echo $PROG not found or not executable. | ||||||
|  |   exit 1 | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | $* & | ||||||
|  | PID=$! | ||||||
|  | 
 | ||||||
|  | while `kill -0 $PID 2>/dev/null`; do | ||||||
|  |   ps -eo size,pid,user,pcpu,command --sort -size | awk '{ line=1 ; hr=$1/1024 ; printf("%13.2f Mb ",hr); } { for ( x=4 ; x<=NF ; x++ ) { printf("%s ",$x) } print "" }' | grep -v grep | grep -v $0 | grep $PROG | ||||||
|  | done | ||||||
							
								
								
									
										
											BIN
										
									
								
								bench/p7-bench
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								bench/p7-bench
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							| @ -15,22 +15,22 @@ using namespace std; | |||||||
| 
 | 
 | ||||||
| int main(int argc, char *argv[]) | int main(int argc, char *argv[]) | ||||||
| { | { | ||||||
| 
 |  | ||||||
|     using namespace std::chrono; |     using namespace std::chrono; | ||||||
|     using clock = steady_clock; |     using clock = steady_clock; | ||||||
|     namespace spd = spdlog; |  | ||||||
| 
 | 
 | ||||||
|     int thread_count = 10; |     int thread_count = 10; | ||||||
|     if (argc > 1) |     if (argc > 1) | ||||||
|         thread_count = ::atoi(argv[1]); |         thread_count = ::atoi(argv[1]); | ||||||
|  | 
 | ||||||
|     int howmany = 1000000; |     int howmany = 1000000; | ||||||
| 
 | 
 | ||||||
|     spd::set_async_mode(1048576); |     spdlog::set_async_mode(1048576); | ||||||
|     auto logger = spdlog::create<spd::sinks::simple_file_sink_mt>("file_logger", "logs/spd-bench-async.txt", false); |     auto logger = spdlog::create<spdlog::sinks::simple_file_sink_mt>("file_logger", "logs/spdlog-bench-async.log", false); | ||||||
|     logger->set_pattern("[%Y-%b-%d %T.%e]: %v"); |     logger->set_pattern("[%Y-%b-%d %T.%e]: %f"); | ||||||
| 
 | 
 | ||||||
|     std::atomic<int> msg_counter{0}; |     std::atomic<int> msg_counter{0}; | ||||||
|     vector<thread> threads; |     vector<thread> threads; | ||||||
|  | 
 | ||||||
|     auto start = clock::now(); |     auto start = clock::now(); | ||||||
|     for (int t = 0; t < thread_count; ++t) |     for (int t = 0; t < thread_count; ++t) | ||||||
|     { |     { | ||||||
| @ -48,7 +48,7 @@ int main(int argc, char *argv[]) | |||||||
|     for (auto &t : threads) |     for (auto &t : threads) | ||||||
|     { |     { | ||||||
|         t.join(); |         t.join(); | ||||||
|     }; |     } | ||||||
| 
 | 
 | ||||||
|     duration<float> delta = clock::now() - start; |     duration<float> delta = clock::now() - start; | ||||||
|     float deltaf = delta.count(); |     float deltaf = delta.count(); | ||||||
|  | |||||||
| @ -3,16 +3,21 @@ | |||||||
| // Distributed under the MIT License (http://opensource.org/licenses/MIT)
 | // Distributed under the MIT License (http://opensource.org/licenses/MIT)
 | ||||||
| //
 | //
 | ||||||
| 
 | 
 | ||||||
| #include "spdlog/spdlog.h" |  | ||||||
| #include <atomic> | #include <atomic> | ||||||
|  | #include <chrono> | ||||||
|  | #include <iostream> | ||||||
| #include <cstdlib> | #include <cstdlib> | ||||||
| #include <thread> | #include <thread> | ||||||
| #include <vector> | #include <vector> | ||||||
| 
 | 
 | ||||||
|  | #include "spdlog/spdlog.h" | ||||||
|  | 
 | ||||||
| using namespace std; | using namespace std; | ||||||
| 
 | 
 | ||||||
| int main(int argc, char *argv[]) | int main(int argc, char *argv[]) | ||||||
| { | { | ||||||
|  |     using namespace std::chrono; | ||||||
|  |     using clock = steady_clock; | ||||||
| 
 | 
 | ||||||
|     int thread_count = 10; |     int thread_count = 10; | ||||||
|     if (argc > 1) |     if (argc > 1) | ||||||
| @ -20,15 +25,13 @@ int main(int argc, char *argv[]) | |||||||
| 
 | 
 | ||||||
|     int howmany = 1000000; |     int howmany = 1000000; | ||||||
| 
 | 
 | ||||||
|     namespace spd = spdlog; |     auto logger = spdlog::create<spdlog::sinks::simple_file_sink_mt>("file_logger", "logs/spdlog-bench-mt.log", false); | ||||||
| 
 |     logger->set_pattern("[%Y-%b-%d %T.%f]: %v"); | ||||||
|     auto logger = spdlog::create<spd::sinks::simple_file_sink_mt>("file_logger", "logs/spd-bench-mt.txt", false); |  | ||||||
| 
 |  | ||||||
|     logger->set_pattern("[%Y-%b-%d %T.%e]: %v"); |  | ||||||
| 
 | 
 | ||||||
|     std::atomic<int> msg_counter{0}; |     std::atomic<int> msg_counter{0}; | ||||||
|     std::vector<thread> threads; |     std::vector<thread> threads; | ||||||
| 
 | 
 | ||||||
|  |     auto start = clock::now(); | ||||||
|     for (int t = 0; t < thread_count; ++t) |     for (int t = 0; t < thread_count; ++t) | ||||||
|     { |     { | ||||||
|         threads.push_back(std::thread([&]() { |         threads.push_back(std::thread([&]() { | ||||||
| @ -45,7 +48,16 @@ int main(int argc, char *argv[]) | |||||||
|     for (auto &t : threads) |     for (auto &t : threads) | ||||||
|     { |     { | ||||||
|         t.join(); |         t.join(); | ||||||
|     }; |     } | ||||||
|  | 
 | ||||||
|  |     duration<float> delta = clock::now() - start; | ||||||
|  |     float deltaf = delta.count(); | ||||||
|  |     auto rate = howmany / deltaf; | ||||||
|  | 
 | ||||||
|  |     std::cout << "Total: " << howmany << std::endl; | ||||||
|  |     std::cout << "Threads: " << thread_count << std::endl; | ||||||
|  |     std::cout << "Delta = " << deltaf << " seconds" << std::endl; | ||||||
|  |     std::cout << "Rate = " << rate << "/sec" << std::endl; | ||||||
| 
 | 
 | ||||||
|     return 0; |     return 0; | ||||||
| } | } | ||||||
|  | |||||||
| @ -3,17 +3,32 @@ | |||||||
| // Distributed under the MIT License (http://opensource.org/licenses/MIT)
 | // Distributed under the MIT License (http://opensource.org/licenses/MIT)
 | ||||||
| //
 | //
 | ||||||
| 
 | 
 | ||||||
|  | #include <chrono> | ||||||
|  | #include <iostream> | ||||||
|  | 
 | ||||||
| #include "spdlog/spdlog.h" | #include "spdlog/spdlog.h" | ||||||
| 
 | 
 | ||||||
| int main(int, char *[]) | int main(int, char *[]) | ||||||
| { | { | ||||||
|     int howmany = 1000000; |     using namespace std::chrono; | ||||||
|     namespace spd = spdlog; |     using clock = steady_clock; | ||||||
|     /// Create a file rotating logger with 5mb size max and 3 rotated files
 |  | ||||||
|     auto logger = spdlog::create<spd::sinks::simple_file_sink_st>("file_logger", "logs/spd-bench-st.txt", false); |  | ||||||
| 
 | 
 | ||||||
|     logger->set_pattern("[%Y-%b-%d %T.%e]: %v"); |     int howmany = 1000000; | ||||||
|  | 
 | ||||||
|  |     auto logger = spdlog::create<spdlog::sinks::simple_file_sink_st>("file_logger", "logs/spdlog-bench.log", false); | ||||||
|  |     logger->set_pattern("[%Y-%b-%d %T.%f]: %v"); | ||||||
|  | 
 | ||||||
|  |     auto start = clock::now(); | ||||||
|     for (int i = 0; i < howmany; ++i) |     for (int i = 0; i < howmany; ++i) | ||||||
|         logger->info("spdlog message #{} : This is some text for your pleasure", i); |         logger->info("spdlog message #{} : This is some text for your pleasure", i); | ||||||
|  | 
 | ||||||
|  |     duration<float> delta = clock::now() - start; | ||||||
|  |     float deltaf = delta.count(); | ||||||
|  |     auto rate = howmany / deltaf; | ||||||
|  | 
 | ||||||
|  |     std::cout << "Total: " << howmany << std::endl; | ||||||
|  |     std::cout << "Delta = " << deltaf << " seconds" << std::endl; | ||||||
|  |     std::cout << "Rate = " << rate << "/sec" << std::endl; | ||||||
|  | 
 | ||||||
|     return 0; |     return 0; | ||||||
| } | } | ||||||
|  | |||||||
| @ -93,7 +93,7 @@ size_t bench_as(int howmany, std::shared_ptr<spdlog::logger> log, int thread_cou | |||||||
|     for (auto &t : threads) |     for (auto &t : threads) | ||||||
|     { |     { | ||||||
|         t.join(); |         t.join(); | ||||||
|     }; |     } | ||||||
| 
 | 
 | ||||||
|     auto delta = system_clock::now() - start; |     auto delta = system_clock::now() - start; | ||||||
|     auto delta_d = duration_cast<duration<double>>(delta).count(); |     auto delta_d = duration_cast<duration<double>>(delta).count(); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user