我正在使用两种方法将相同文本的 x 行写入文件进行一些简单的基准测试:
直接刷机。
创建一个新线程并通过异步队列完成通信(主线程在一侧插入,另一个线程从另一侧读取)。此方法用于尽量减少最慢的写入(由于刷新)
这是一段代码,应该给出程序的基本概念:
int i;
char * buf;
int buf_size;
double local_start, local_end, global_start, global_end;
double slowest, fastest;
double local_time_difference;
buf = "A string to be printed to a file \n";
buf_size = strlen(buf);
fastest = MAX_WRITE_TIME;
slowest = 0;
logger_init(atoi(argv[1]));
global_start = get_time();
for(i = 0 ; i < 100000000 ; i++)
{
local_start = get_time();
logger_write(buf, buf_size);
local_end = get_time();
local_time_difference = local_end-local_start;
if(local_time_difference < fastest && local_time_difference != 0)
fastest = local_time_difference;
if(local_time_difference > slowest)
slowest = local_time_difference;
if(i % 10000 == 0)
usleep(1);
}
global_end = get_time();
printf("Fastest: %1.9f\nSlowest: %1.9f\nTotal Time: %1.9f\n", fastest, slowest, global_end-global_start);
logger_destroy();
获取时间过程以微秒为单位返回时间
double get_time()
{
struct timeval t;
struct timezone tzp;
gettimeofday(&t, &tzp);
return t.tv_sec + t.tv_usec*1e-6;
}
根据传递给 logger_init 的参数,logger_write 将直接写入文件或将其插入队列(队列大小不得超过某些特定限制)。正在使用GAsyncQueue
我目前用来计算最快和最慢写入的方法当然有效,但我的问题是:是否有工具或分析器可以为我做到这一点?即给我关于每个函数的统计数据(最大、最小和平均调用)
到目前为止我尝试过但没有运气的工具:
- gprof
- 飞涨
- Kcachegrind
- VTune
TL:DR 我正在寻找一种工具来为我提供特定功能的最小、最大和平均执行时间,而不是总时间。