mtd: tests: Use boottime
PATCH 1/1 mtd: tests: Use boottime
Wall time obtained from do_gettimeofday is susceptible to sudden jumps due to user setting the time or due to NTP. Boot time is constantly increasing time better suited for comparing two timestamps.
--- drivers/mtd/tests/speedtest.c | 9 ++++----- drivers/mtd/tests/torturetest.c | 9 ++++----- 2 files changed, 8 insertions(+), 10 deletions(-)
drivers/mtd/tests/speedtest.c +4 -5
@@ -49,7 +49,7 @@ static int pgsize;static int ebcnt;static int pgcnt;static int goodebcnt; -static struct timeval start, finish; +static ktime_t start, finish;static int multiblock_erase (int ebnum,int blocks) {
@@ -168,12 +168,12 @@ static int read_eraseblock_by_2pages(int ebnum)static inline void start_timing (void ) { -do_gettimeofday (&start); + start =ktime_get_boottime (); }static inline void stop_timing (void ) { -do_gettimeofday (&finish); + finish =ktime_get_boottime (); }static long calc_speed (void )
@@ -181,8 +181,7 @@ static long calc_speed(void)uint64_t k;long ms; - ms = (finish.tv_sec - start.tv_sec) *1000 + - (finish.tv_usec - start.tv_usec) /1000 ; + ms =ktime_to_ms (ktime_sub (finish, start));if (ms ==0 )return 0 ; k = (uint64_t )goodebcnt * (mtd->erasesize /1024 ) *1000 ;
drivers/mtd/tests/torturetest.c +4 -5
@@ -79,18 +79,18 @@ static unsigned char *check_buf;static unsigned int erase_cycles;static int pgsize; -static struct timeval start, finish; +static ktime_t start, finish;static void report_corrupt (unsigned char *read,unsigned char *written);static inline void start_timing (void ) { -do_gettimeofday (&start); + start =ktime_get_boottime (); }static inline void stop_timing (void ) { -do_gettimeofday (&finish); + finish =ktime_get_boottime (); }/*
@@ -333,8 +333,7 @@ static int __init tort_init(void)long ms;stop_timing (); - ms = (finish.tv_sec - start.tv_sec) *1000 + - (finish.tv_usec - start.tv_usec) /1000 ; + ms =ktime_to_ms (ktime_sub (finish, start));pr_info ("%08u erase cycles done, took %lu " "milliseconds (%lu seconds)\n" , erase_cycles, ms, ms /1000 );
Signature · 1 line
1.7.9.5
+ others
Quoted 5 lines · Abhilash Jindal
Wall time obtained from
do_gettimeofdayis susceptible to sudden jumps due to user setting the time or due to NTP. Boot time is constantly increasing time better suited for comparing two timestamps.Signed-off-by Abhilash Jindal <[email protected]>
Sorry, didn't notice this one earlier. We've merged an alternative patch that uses ktime_get():
commit af30c0a00aa0d086a820c2ec75544c07611834d7
Author: Shraddha Barke <[email protected]> Date: Thu Oct 22 20:29:54 2015 +0530
mtd: tests: Replace timeval with ktime_t
Quoted 1 line
From reading the API description, it's not really clear to me if
ktime_get() includes NTP jumps or not.
In any case, if you still need this patch, please rebase on the latest -next.
Regards,
Brian
Quoted 82 lines
--- drivers/mtd/tests/speedtest.c | 9 ++++----- drivers/mtd/tests/torturetest.c | 9 ++++----- 2 files changed, 8 insertions(+), 10 deletions(-)drivers/mtd/tests/speedtest.c +4
-5@@ -49,7 +49,7 @@ static int pgsize;static int ebcnt;static int pgcnt;static int goodebcnt; -static struct timeval start, finish; +static ktime_t start, finish;static int multiblock_erase (int ebnum,int blocks) {@@ -168,12 +168,12 @@ static int read_eraseblock_by_2pages(int ebnum)static inline void start_timing (void ) { -do_gettimeofday (&start); + start =ktime_get_boottime (); }static inline void stop_timing (void ) { -do_gettimeofday (&finish); + finish =ktime_get_boottime (); }static long calc_speed (void )@@ -181,8 +181,7 @@ static long calc_speed(void)uint64_t k;long ms; - ms = (finish.tv_sec - start.tv_sec) *1000 + - (finish.tv_usec - start.tv_usec) /1000 ; + ms =ktime_to_ms (ktime_sub (finish, start));if (ms ==0 )return 0 ; k = (uint64_t )goodebcnt * (mtd->erasesize /1024 ) *1000 ;drivers/mtd/tests/torturetest.c +4
-5@@ -79,18 +79,18 @@ static unsigned char *check_buf;static unsigned int erase_cycles;static int pgsize; -static struct timeval start, finish; +static ktime_t start, finish;static void report_corrupt (unsigned char *read,unsigned char *written);static inline void start_timing (void ) { -do_gettimeofday (&start); + start =ktime_get_boottime (); }static inline void stop_timing (void ) { -do_gettimeofday (&finish); + finish =ktime_get_boottime (); }/* @@ -333,8 +333,7 @@ static int __init tort_init(void)long ms;stop_timing (); - ms = (finish.tv_sec - start.tv_sec) *1000 + - (finish.tv_usec - start.tv_usec) /1000 ; + ms =ktime_to_ms (ktime_sub (finish, start));pr_info ("%08u erase cycles done, took %lu " "milliseconds (%lu seconds)\n" , erase_cycles, ms, ms /1000 );Signature · 1 line
1.7.9.5