cpp test write content speed to ssd and usual disk respectively 1M,10M,100M rows data,the fact has illustrated the write speed of ssd is 4-5 times faster than usual disk
#include <chrono> #include <ctime> #include <fstream> #include <iomanip> #include <iostream> #include <sstream> #include <thread> #include <uuid/uuid.h> std::string get_time_now() { auto now = std::chrono::high_resolution_clock::now(); time_t raw_time = std::chrono::high_resolution_clock::to_time_t(now); struct tm tm_info = *localtime(&raw_time); std::chrono::seconds seconds = std::chrono::duration_cast<std::chrono::seconds>(now.time_since_epoch()); auto mills = std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()); auto micros = std::chrono::duration_cast<std::chrono::microseconds>(now.time_since_epoch()); auto nanos = std::chrono::duration_cast<std::chrono::nanoseconds>(now.time_since_epoch()); std::stringstream ss; ss << std::put_time(&tm_info, "%Y%m%d%H%M%S") << "_" << std::setw(3) << std::setfill('0') << (mills.count() - seconds.count() * 1000) << std::setw(3) << std::setfill('0') << (micros.count() - mills.count() * 1000) << std::setw(3) << std::setfill('0') << (nanos.count() - micros.count() * 1000); return ss.str(); } char *uuid_value = (char *)malloc(40); char *get_uuid_value() { uuid_t new_uuid; uuid_generate(new_uuid); uuid_unparse(new_uuid, uuid_value); return uuid_value; } void log_file(const std::string &file_name, const int &loops) { std::fstream w_file(file_name, std::ios::app); if (!w_file.is_open()) { std::cout << get_time_now() << ",create or open " << file_name << " failed!" << std::endl; return; } std::uint64_t num = 0; std::stringstream ss; for (int j = 0; j < loops; j++) { for (int i = 0; i < 1000000; i++) { ss << ++num << "," << get_uuid_value() << std::endl; } w_file << ss.str(); ss = std::stringstream(); std::cout << get_time_now() << "," << num << ",loop:" << j + 1 << std::endl; } w_file.close(); std::cout << get_time_now() << ",finish in " << __FUNCTION__ << std::endl; } std::stringstream read_file_to_ss(const std::string &file_name) { std::stringstream ss; std::fstream r_file(file_name, std::ios::in); if (!r_file.is_open()) { std::cout << get_time_now() << " open " << file_name << " failed!" << std::endl; return ss; } std::string line; while (getline(r_file, line)) { ss << line; } r_file.close(); return ss; } void test_populate_ssd(const std::string &src_name, const int &len, const std::string &dest_file) { // std::string file_name1="log1.txt",file_name10="log10.txt",file_name_100="log100.txt"; // /media/fred/WD_BLACK/log1.txt std::stringstream ss = read_file_to_ss(src_name); std::fstream w_file(dest_file, std::ios::app); std::chrono::time_point<std::chrono::high_resolution_clock> _start_time, _end_time; for (int i = 0; i < 10; i++) { _start_time = std::chrono::high_resolution_clock::now(); w_file << ss.str(); _end_time = std::chrono::high_resolution_clock::now(); std::cout << get_time_now()<<",src file:"<<src_name << ",rows:" << len << ",loop: " << i + 1 << ",length:" << ss.str().length()<<std::endl; std::cout << ",Time cost:" << std::chrono::duration_cast<std::chrono::seconds>(_end_time - _start_time).count() << " seconds," << std::chrono::duration_cast<std::chrono::milliseconds>(_end_time - _start_time).count() << " mills," << std::chrono::duration_cast<std::chrono::microseconds>(_end_time - _start_time).count() << " micros," << std::chrono::duration_cast<std::chrono::nanoseconds>(_end_time - _start_time).count() << " nanos!" << std::endl; } std::cout << get_time_now() << ",finish len:" << len << std::this_thread::get_id() << std::endl; } void test_populate_ssd_1_10_100() { std::cout << "1000000" << std::endl; test_populate_ssd("log1.txt", 1000000, "/media/fred/WD_BLACK/log1.txt"); std::cout << std::endl << std::endl; std::cout << "10000000" << std::endl; test_populate_ssd("log10.txt", 10000000, "/media/fred/WD_BLACK/log10.txt"); std::cout << std::endl << std::endl; std::cout << "100000000" << std::endl; test_populate_ssd("log100.txt", 1000000, "/media/fred/WD_BLACK/log100.txt"); std::cout << std::endl << std::endl; std::cout << get_time_now() << ",finish in:" << __FUNCTION__<<","<< std::this_thread::get_id() << std::endl; } int main(int args, char **argv) { // log_file(argv[1], atoi(argv[2])); test_populate_ssd_1_10_100(); std::cout << get_time_now() << ",finish in " << __FUNCTION__ << std::endl; }
Compile
g++-12 -std=c++2a -I. *.cpp -o h1 -luuid
Run
nohup ./h1 >>write.log | tail -f write.log
The execute script as below
#include <chrono> #include <ctime> #include <fstream> #include <iomanip> #include <iostream> #include <sstream> #include <thread> #include <uuid/uuid.h> std::string get_time_now() { auto now = std::chrono::high_resolution_clock::now(); time_t raw_time = std::chrono::high_resolution_clock::to_time_t(now); struct tm tm_info = *localtime(&raw_time); std::chrono::seconds seconds = std::chrono::duration_cast<std::chrono::seconds>(now.time_since_epoch()); auto mills = std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()); auto micros = std::chrono::duration_cast<std::chrono::microseconds>(now.time_since_epoch()); auto nanos = std::chrono::duration_cast<std::chrono::nanoseconds>(now.time_since_epoch()); std::stringstream ss; ss << std::put_time(&tm_info, "%Y%m%d%H%M%S") << "_" << std::setw(3) << std::setfill('0') << (mills.count() - seconds.count() * 1000) << std::setw(3) << std::setfill('0') << (micros.count() - mills.count() * 1000) << std::setw(3) << std::setfill('0') << (nanos.count() - micros.count() * 1000); return ss.str(); } char *uuid_value = (char *)malloc(40); char *get_uuid_value() { uuid_t new_uuid; uuid_generate(new_uuid); uuid_unparse(new_uuid, uuid_value); return uuid_value; } void log_file(const std::string &file_name, const int &loops) { std::fstream w_file(file_name, std::ios::app); if (!w_file.is_open()) { std::cout << get_time_now() << ",create or open " << file_name << " failed!" << std::endl; return; } std::uint64_t num = 0; std::stringstream ss; for (int j = 0; j < loops; j++) { for (int i = 0; i < 1000000; i++) { ss << ++num << "," << get_uuid_value() << std::endl; } w_file << ss.str(); ss = std::stringstream(); std::cout << get_time_now() << "," << num << ",loop:" << j + 1 << std::endl; } w_file.close(); std::cout << get_time_now() << ",finish in " << __FUNCTION__ << std::endl; } std::stringstream read_file_to_ss(const std::string &file_name) { std::stringstream ss; std::fstream r_file(file_name, std::ios::in); if (!r_file.is_open()) { std::cout << get_time_now() << " open " << file_name << " failed!" << std::endl; return ss; } std::string line; while (getline(r_file, line)) { ss << line; } r_file.close(); return ss; } void test_populate_ssd(const std::string &src_name, const int &len, const std::string &dest_file) { // std::string file_name1="log1.txt",file_name10="log10.txt",file_name_100="log100.txt"; // /media/fred/WD_BLACK/log1.txt std::stringstream ss = read_file_to_ss(src_name); std::fstream w_file(dest_file, std::ios::app); std::chrono::time_point<std::chrono::high_resolution_clock> _start_time, _end_time; for (int i = 0; i < 10; i++) { _start_time = std::chrono::high_resolution_clock::now(); w_file << ss.str(); _end_time = std::chrono::high_resolution_clock::now(); std::cout << get_time_now()<<",src file:"<<src_name << ",rows:" << len << ",loop: " << i + 1 << ",length:" << ss.str().length()<<std::endl; std::cout << ",Time cost:" << std::chrono::duration_cast<std::chrono::seconds>(_end_time - _start_time).count() << " seconds," << std::chrono::duration_cast<std::chrono::milliseconds>(_end_time - _start_time).count() << " mills," << std::chrono::duration_cast<std::chrono::microseconds>(_end_time - _start_time).count() << " micros," << std::chrono::duration_cast<std::chrono::nanoseconds>(_end_time - _start_time).count() << " nanos!" << std::endl; } std::cout << get_time_now() << ",finish len:" << len << std::this_thread::get_id() << std::endl; } void test_populate_ssd_1_10_100() { std::cout << "1000000" << std::endl; test_populate_ssd("log1.txt", 1000000, "/media/fred/WD_BLACK/log1.txt"); std::cout << std::endl << std::endl; std::cout << "10000000" << std::endl; test_populate_ssd("log10.txt", 10000000, "/media/fred/WD_BLACK/log10.txt"); std::cout << std::endl << std::endl; std::cout << "100000000" << std::endl; test_populate_ssd("log100.txt", 1000000, "/media/fred/WD_BLACK/log100.txt"); std::cout << std::endl << std::endl; std::cout << get_time_now() << ",finish in:" << __FUNCTION__<<","<< std::this_thread::get_id() << std::endl; } void test_populate_disk_1_10_100() { std::cout << "1000000" << std::endl; test_populate_ssd("log1.txt", 1000000, "/media/fred/Elements/log1.txt"); std::cout << std::endl << std::endl; std::cout << "10000000" << std::endl; test_populate_ssd("log10.txt", 10000000, "/media/fred/Elements/log10.txt"); std::cout << std::endl << std::endl; std::cout << "100000000" << std::endl; test_populate_ssd("log100.txt", 1000000, "/media/fred/Elements/log100.txt"); std::cout << std::endl << std::endl; std::cout << get_time_now() << ",finish in:" << __FUNCTION__<<","<< std::this_thread::get_id() << std::endl; } int main(int args, char **argv) { ///media/fred/Elements // log_file(argv[1], atoi(argv[2])); // test_populate_ssd_1_10_100(); test_populate_disk_1_10_100(); std::cout << get_time_now() << ",finish in " << __FUNCTION__ << std::endl; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2020-06-05 C# deflatestream compress and decompress, compare their respective md5
2020-06-05 C# BinaryWriter BinaryReader demo
2019-06-05 C# NPOI Export DataTable C# NPOI导出DataTable 单元格自适应大小