Message ID | 573DFA6E.7060406@codeaurora.org (mailing list archive) |
---|---|
State | Not Applicable |
Headers | show |
On Thu, May 19, 2016 at 01:39:58PM -0400, Sinan Kaya wrote: > From ec9f4480fac1648e9f53112b143a535774e3795d Mon Sep 17 00:00:00 2001 > From: Sinan Kaya <okaya@codeaurora.org> > Date: Wed, 18 May 2016 16:57:15 -0400 > Subject: [PATCH] dmatest: exclude compare and fill time during performance > report > > Change-Id: I3428a85c3a58f990b985fc10fe736dfb3e56b206 We dont want these here... > --- a/drivers/dma/dmatest.c > +++ b/drivers/dma/dmatest.c > @@ -416,7 +416,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; > > @@ -517,6 +519,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); > > @@ -527,6 +530,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); If you are very picky about perf, shouldn't we just track time here and then later do subtraction to get diff
On 5/30/2016 1:11 AM, Vinod Koul wrote: > On Thu, May 19, 2016 at 01:39:58PM -0400, Sinan Kaya wrote: > >> From ec9f4480fac1648e9f53112b143a535774e3795d Mon Sep 17 00:00:00 2001 >> From: Sinan Kaya <okaya@codeaurora.org> >> Date: Wed, 18 May 2016 16:57:15 -0400 >> Subject: [PATCH] dmatest: exclude compare and fill time during performance >> report >> >> Change-Id: I3428a85c3a58f990b985fc10fe736dfb3e56b206 > > We dont want these here... > Sure, >> --- a/drivers/dma/dmatest.c >> +++ b/drivers/dma/dmatest.c >> @@ -416,7 +416,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; >> >> @@ -517,6 +519,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); >> >> @@ -527,6 +530,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); > > If you are very picky about perf, shouldn't we just track time here and then > later do subtraction to get diff > That's what I was originally doing. I realized that the loop gets called multiple times before reaching to final point where the actual performance is measured. I'm trying to account for multiple fills and compares by using a stack local variable. Then, I deduct the final result.
diff --git a/drivers/dma/dmatest.c b/drivers/dma/dmatest.c index b8576fd..0b3e1f9 100644 --- a/drivers/dma/dmatest.c +++ b/drivers/dma/dmatest.c @@ -416,7 +416,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; @@ -517,6 +519,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); @@ -527,6 +530,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, @@ -657,6 +663,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); @@ -677,6 +684,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); @@ -686,7 +696,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: