dmaengine: dmatest: exclude compare and fill time during perf report
authorSinan Kaya <okaya@codeaurora.org>
Thu, 1 Sep 2016 14:02:55 +0000 (10:02 -0400)
committerVinod Koul <vinod.koul@intel.com>
Fri, 2 Sep 2016 11:07:04 +0000 (16:37 +0530)
Dmatest is currently including compare and fill time into the
calculated performance numbers. This does not reflect the HW
capability and the results vary based on the CPU speed instead of
the HW speed.

Signed-off-by: Sinan Kaya <okaya@codeaurora.org>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
drivers/dma/dmatest.c

index 1245db5..738fbd1 100644 (file)
@@ -426,7 +426,9 @@ static int dmatest_func(void *data)
        int                     src_cnt;
        int                     dst_cnt;
        int                     i;
-       ktime_t                 ktime;
+       ktime_t                 ktime, start, diff;
+       ktime_t                 filltime = ktime_set(0, 0);
+       ktime_t                 comparetime = ktime_set(0, 0);
        s64                     runtime = 0;
        unsigned long long      total_len = 0;
 
@@ -531,6 +533,7 @@ static int dmatest_func(void *data)
                        src_off = 0;
                        dst_off = 0;
                } else {
+                       start = ktime_get();
                        src_off = dmatest_random() % (params->buf_size - len + 1);
                        dst_off = dmatest_random() % (params->buf_size - len + 1);
 
@@ -541,6 +544,9 @@ static int dmatest_func(void *data)
                                          params->buf_size);
                        dmatest_init_dsts(thread->dsts, dst_off, len,
                                          params->buf_size);
+
+                       diff = ktime_sub(ktime_get(), start);
+                       filltime = ktime_add(filltime, diff);
                }
 
                um = dmaengine_get_unmap_data(dev->dev, src_cnt+dst_cnt,
@@ -683,6 +689,7 @@ static int dmatest_func(void *data)
                        continue;
                }
 
+               start = ktime_get();
                pr_debug("%s: verifying source buffer...\n", current->comm);
                error_count = dmatest_verify(thread->srcs, 0, src_off,
                                0, PATTERN_SRC, true);
@@ -703,6 +710,9 @@ static int dmatest_func(void *data)
                                params->buf_size, dst_off + len,
                                PATTERN_DST, false);
 
+               diff = ktime_sub(ktime_get(), start);
+               comparetime = ktime_add(comparetime, diff);
+
                if (error_count) {
                        result("data error", total_tests, src_off, dst_off,
                               len, error_count);
@@ -712,7 +722,10 @@ static int dmatest_func(void *data)
                                       dst_off, len, 0);
                }
        }
-       runtime = ktime_us_delta(ktime_get(), ktime);
+       ktime = ktime_sub(ktime_get(), ktime);
+       ktime = ktime_sub(ktime, comparetime);
+       ktime = ktime_sub(ktime, filltime);
+       runtime = ktime_to_us(ktime);
 
        ret = 0;
 err_dstbuf: