浏览代码

dmaengine: dmatest: exclude compare and fill time during perf report

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>
Sinan Kaya 9 年之前
父节点
当前提交
e9405ef08c
共有 1 个文件被更改,包括 15 次插入2 次删除
  1. 15 2
      drivers/dma/dmatest.c

+ 15 - 2
drivers/dma/dmatest.c

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