[sheepdog] [PATCH 1/2] dog: add elapsed time to measure the program is fast or not

Ruoyu liangry at ucweb.com
Thu Jul 10 14:03:58 CEST 2014


On 2014年07月10日 19:52, Hitoshi Mitake wrote:
> At Mon,  7 Jul 2014 20:42:52 +0800,
> Ruoyu wrote:
>> As title.
>>
>> Signed-off-by: Ruoyu <liangry at ucweb.com>
>> ---
>>   dog/dog.c      |  7 +++++++
>>   include/util.h |  4 ++++
>>   lib/util.c     | 25 +++++++++++++++++++++++++
>>   3 files changed, 36 insertions(+)
> This patch lets dog print elapsed time unconditionally. It breaks
> existing software e.g. OpenStack Cinder because they have assumption
> about the format of dog's output. Could you add a new option for
> printing elapsed time?
>
> e.g. dog -t vdi list, -t means dog should print elapsed time
Thanks for you advise.
>
> Thanks,
> Hitoshi
>
>> diff --git a/dog/dog.c b/dog/dog.c
>> index 7d1153d..46992ec 100644
>> --- a/dog/dog.c
>> +++ b/dog/dog.c
>> @@ -453,6 +453,9 @@ int main(int argc, char **argv)
>>   	const struct sd_option *sd_opts;
>>   	uint8_t sdhost[16];
>>   	int sdport;
>> +	struct timespec start, end;
>> +
>> +	start = get_time_tick();
>>   
>>   	log_dog_operation(argc, argv);
>>   
>> @@ -565,5 +568,9 @@ int main(int argc, char **argv)
>>   	ret = command_fn(argc, argv);
>>   	if (ret == EXIT_USAGE)
>>   		subcommand_usage(argv[1], argv[2], EXIT_USAGE);
>> +
>> +	end = get_time_tick();
>> +	printf("\nElapsed time: %.3lf seconds\n",
>> +			get_time_interval(&start, &end));
>>   	return ret;
>>   }
>> diff --git a/include/util.h b/include/util.h
>> index c7a1921..d230f7f 100644
>> --- a/include/util.h
>> +++ b/include/util.h
>> @@ -125,6 +125,10 @@ int atomic_create_and_write(const char *path, const char *buf, size_t len,
>>   void find_zero_blocks(const void *buf, uint64_t *poffset, uint32_t *plen);
>>   void trim_zero_blocks(void *buf, uint64_t *poffset, uint32_t *plen);
>>   
>> +struct timespec get_time_tick(void);
>> +double get_time_interval(const struct timespec *start,
>> +						 const struct timespec *end);
>> +
>>   /* a type safe version of qsort() */
>>   #define xqsort(base, nmemb, compar)					\
>>   ({									\
>> diff --git a/lib/util.c b/lib/util.c
>> index 408fc19..9a3adcd 100644
>> --- a/lib/util.c
>> +++ b/lib/util.c
>> @@ -806,3 +806,28 @@ void trim_zero_blocks(void *buf, uint64_t *poffset, uint32_t *plen)
>>   	if (orig_offset < *poffset)
>>   		memmove(p, p + *poffset - orig_offset, *plen);
>>   }
>> +
>> +struct timespec get_time_tick(void)
>> +{
>> +	struct timespec ts;
>> +	int ret;
>> +
>> +	ts.tv_sec = 0;
>> +	ts.tv_nsec = 0;
>> +
>> +	ret = clock_gettime(CLOCK_MONOTONIC, &ts);
>> +	if (ret < 0)
>> +		sd_err("clock_gettime failure: %m");
>> +
>> +	return ts;
>> +}
>> +
>> +double get_time_interval(const struct timespec *start,
>> +						 const struct timespec *end)
>> +{
>> +	assert(start);
>> +	assert(end);
>> +
>> +	return ((end->tv_nsec - start->tv_nsec) * 0.000000001)
>> +			+ end->tv_sec - start->tv_sec;
>> +}
>> -- 
>> 1.8.3.2
>>
>>
>> -- 
>> sheepdog mailing list
>> sheepdog at lists.wpkg.org
>> http://lists.wpkg.org/mailman/listinfo/sheepdog





More information about the sheepdog mailing list