public inbox for igt-dev@lists.freedesktop.org
 help / color / mirror / Atom feed
* [igt-dev] [PATCH i-g-t] tests/perf: add a test for OA data polling reads using "small" buffers
@ 2020-03-26  5:42 Ashutosh Dixit
  2020-03-26  5:52 ` [igt-dev] ✗ Fi.CI.BUILD: failure for " Patchwork
                   ` (2 more replies)
  0 siblings, 3 replies; 18+ messages in thread
From: Ashutosh Dixit @ 2020-03-26  5:42 UTC (permalink / raw)
  To: igt-dev

Add a test for OA data non-blocking reads using buffers smaller than
the available data. This test would fail for perf revisions < 5
because poll would block even when data was available. Therefore the
amount of data read was limited by the buffer size and the timer
interval and it was impossible to read all available data. This issue
is fixed in perf revision 5.

Cc: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Cc: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Signed-off--by: Ashutosh Dixit <ashutosh.dixit@intel.com>
---
 tests/perf.c | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 81 insertions(+)

diff --git a/tests/perf.c b/tests/perf.c
index 724f6f809..41e3b4478 100644
--- a/tests/perf.c
+++ b/tests/perf.c
@@ -2265,6 +2265,81 @@ test_polling(void)
 	__perf_close(stream_fd);
 }
 
+static void test_polling_small_buf(void)
+{
+	int oa_exponent = max_oa_exponent_for_period_lte(10 * 1000 * 1000); /* 10ms */
+	/* Use a large value for the timer for a large amout of data to accumulate */
+	uint64_t kernel_hrtimer = 400 * 1000 * 1000; /* 400 ms */
+	uint64_t properties[] = {
+		/* Include OA reports in samples */
+		DRM_I915_PERF_PROP_SAMPLE_OA, true,
+
+		/* OA unit configuration */
+		DRM_I915_PERF_PROP_OA_METRICS_SET, test_set->perf_oa_metrics_set,
+		DRM_I915_PERF_PROP_OA_FORMAT, test_set->perf_oa_format,
+		DRM_I915_PERF_PROP_OA_EXPONENT, oa_exponent,
+
+		/* Kernel configuration (optional) */
+		DRM_I915_PERF_PROP_POLL_OA_PERIOD, kernel_hrtimer,
+	};
+	struct drm_i915_perf_open_param param = {
+		.flags = I915_PERF_FLAG_FD_CLOEXEC |
+			I915_PERF_FLAG_DISABLED |
+			I915_PERF_FLAG_FD_NONBLOCK,
+		.num_properties = NUM_PROPERTIES(properties),
+		.properties_ptr = to_user_pointer(properties),
+	};
+	uint8_t buf[1024 * 1024];
+	int ret, iterl = 0, iters = 0, large = 0, small = 0;
+	struct timespec tsl = {}, tss = {};
+
+	stream_fd = __perf_open(drm_fd, &param, true /* prevent_pm */);
+	do_ioctl(stream_fd, I915_PERF_IOCTL_ENABLE, 0);
+
+	/* First do non blocking reads for 4 seconds using 1 MB buffer */
+	igt_nsec_elapsed(&tsl);
+	igt_until_timeout(4) {
+		struct pollfd pollfd = { .fd = stream_fd, .events = POLLIN };
+
+		ret = poll(&pollfd, 1, -1);
+		igt_assert_eq(ret, 1);
+		igt_assert(pollfd.revents & POLLIN);
+
+		ret = read(stream_fd, buf, sizeof(buf));
+		igt_assert(ret > 0);
+		large += ret;
+		iterl++;
+	}
+	igt_debug("Read %d B in %d iterations in %ld ns using 1 MB buffer\n",
+		  large, iterl, igt_nsec_elapsed(&tsl));
+
+	/* Now repeat the read with a 4 KB buffer */
+	igt_nsec_elapsed(&tss);
+	igt_until_timeout(4) {
+		struct pollfd pollfd = { .fd = stream_fd, .events = POLLIN };
+
+		ret = poll(&pollfd, 1, -1);
+		igt_assert_eq(ret, 1);
+		igt_assert(pollfd.revents & POLLIN);
+
+		ret = read(stream_fd, buf, 4096);
+		igt_assert(ret > 0);
+		small += ret;
+		iters++;
+	}
+	igt_debug("Read %d B in %d iterations in %ld ns using 4 KB buffer\n",
+		  small, iters, igt_nsec_elapsed(&tss));
+
+	__perf_close(stream_fd);
+
+	/* Check that data read using the two methods is within 20% of each
+	 * other. Differences between the two cases is due to timing coupled
+	 * with granularity of the data reads, but they are still expected to be
+	 * "close".
+	 */
+	igt_assert(abs(large - small) * 100 / ((large + small) / 2) < 20);
+}
+
 static int
 num_valid_reports_captured(struct drm_i915_perf_open_param *param,
 			   int64_t *duration_ns)
@@ -4676,6 +4751,12 @@ igt_main
 	igt_subtest("polling")
 		test_polling();
 
+	igt_describe("Test polled read with buffer size smaller than available data");
+	igt_subtest("polling-small-buf") {
+		igt_require(i915_perf_revision(drm_fd) >= 5);
+		test_polling_small_buf();
+	}
+
 	igt_subtest("short-reads")
 		test_short_reads();
 
-- 
2.25.2

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [igt-dev] ✗ Fi.CI.BUILD: failure for tests/perf: add a test for OA data polling reads using "small" buffers
  2020-03-26  5:42 [igt-dev] [PATCH i-g-t] tests/perf: add a test for OA data polling reads using "small" buffers Ashutosh Dixit
@ 2020-03-26  5:52 ` Patchwork
  2020-03-26  6:01 ` [igt-dev] ✗ GitLab.Pipeline: warning " Patchwork
  2020-03-26  9:02 ` [igt-dev] [PATCH i-g-t] " Lionel Landwerlin
  2 siblings, 0 replies; 18+ messages in thread
From: Patchwork @ 2020-03-26  5:52 UTC (permalink / raw)
  To: Ashutosh Dixit; +Cc: igt-dev

== Series Details ==

Series: tests/perf: add a test for OA data polling reads using "small" buffers
URL   : https://patchwork.freedesktop.org/series/75100/
State : failure

== Summary ==

IGT patchset build failed on latest successful build
47becbc9cd1fc7b1b78692f90fd3dcd5a9066965 runner: Remember to sync journal.txt for all writes

[122/371] Linking target tests/template.
[123/371] Linking target tests/tools_test.
[124/371] Linking target tests/syncobj_wait.
[125/371] Linking target tests/v3d_get_bo_offset.
[126/371] Linking target tests/v3d_get_param.
[127/371] Linking target tests/v3d_mmap.
[128/371] Linking target tests/vc4_lookup_fail.
[129/371] Linking target tests/vc4_create_bo.
[130/371] Linking target tests/vc4_dmabuf_poll.
[131/371] Linking target tests/vc4_label_bo.
[132/371] Linking target tests/vc4_wait_bo.
[133/371] Linking target tests/vc4_tiling.
[134/371] Linking target tests/vc4_purgeable_bo.
[135/371] Linking target tests/prime_nv_pcopy.
[136/371] Linking target tests/vc4_wait_seqno.
[137/371] Linking target tests/vgem_basic.
[138/371] Linking target tests/vgem_slow.
[139/371] Linking target tests/prime_nv_api.
[140/371] Linking target tests/prime_nv_test.
[141/371] Linking target tests/kms_chamelium.
[142/371] Linking target tests/gen3_mixed_blits.
[143/371] Linking target tests/gem_close_race.
[144/371] Linking target tests/gen3_render_linear_blits.
[145/371] Compiling C object 'tests/tests@@perf@exe/perf.c.o'.
FAILED: tests/tests@@perf@exe/perf.c.o 
ccache cc -Itests/tests@@perf@exe -Itests -I../tests -I../include/drm-uapi -Ilib -I../lib -I../lib/stubs/syscalls -I. -I../ -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/libpng16 -I/usr/include/freetype2 -I/usr/include/libpng12 -I/usr/include/libdrm -I/usr/include/x86_64-linux-gnu -I/usr/include/alsa -I/usr/include -I/usr/include/libdrm/nouveau -I/home/cidrm/kernel_headers/include -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -std=gnu11 -O2 -g -D_GNU_SOURCE -include config.h -D_FORTIFY_SOURCE=2 -Wbad-function-cast -Wdeclaration-after-statement -Wformat=2 -Wimplicit-fallthrough=0 -Wlogical-op -Wmissing-declarations -Wmissing-format-attribute -Wmissing-noreturn -Wmissing-prototypes -Wnested-externs -Wold-style-definition -Wpointer-arith -Wredundant-decls -Wshadow -Wstrict-prototypes -Wuninitialized -Wunused -Wno-clobbered -Wno-maybe-uninitialized -Wno-missing-field-initializers -Wno-pointer-arith -Wno-sign-compare -Wno-type-limits -Wno-unused-parameter -Wno-unused-result -Werror=address -Werror=array-bounds -Werror=implicit -Werror=init-self -Werror=int-to-pointer-cast -Werror=main -Werror=missing-braces -Werror=nonnull -Werror=pointer-to-int-cast -Werror=return-type -Werror=sequence-point -Werror=trigraphs -Werror=write-strings -fno-builtin-malloc -fno-builtin-calloc -fcommon -pthread  -MD -MQ 'tests/tests@@perf@exe/perf.c.o' -MF 'tests/tests@@perf@exe/perf.c.o.d' -o 'tests/tests@@perf@exe/perf.c.o' -c ../tests/perf.c
../tests/perf.c: In function ‘test_polling_small_buf’:
../tests/perf.c:2283:3: error: ‘DRM_I915_PERF_PROP_POLL_OA_PERIOD’ undeclared (first use in this function); did you mean ‘DRM_I915_PERF_PROP_HOLD_PREEMPTION’?
   DRM_I915_PERF_PROP_POLL_OA_PERIOD, kernel_hrtimer,
   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   DRM_I915_PERF_PROP_HOLD_PREEMPTION
../tests/perf.c:2283:3: note: each undeclared identifier is reported only once for each function it appears in
In file included from ../lib/drmtest.h:39:0,
                 from ../lib/igt.h:27,
                 from ../tests/perf.c:41:
../tests/perf.c: In function ‘__real_main4666’:
../tests/perf.c:4756:15: error: implicit declaration of function ‘i915_perf_revision’; did you mean ‘i915_perf_remove_config’? [-Werror=implicit-function-declaration]
   igt_require(i915_perf_revision(drm_fd) >= 5);
               ^
../lib/igt_core.h:986:8: note: in definition of macro ‘igt_require’
  if (!(expr)) igt_skip_check(#expr , NULL); \
        ^~~~
../tests/perf.c:4756:15: warning: nested extern declaration of ‘i915_perf_revision’ [-Wnested-externs]
   igt_require(i915_perf_revision(drm_fd) >= 5);
               ^
../lib/igt_core.h:986:8: note: in definition of macro ‘igt_require’
  if (!(expr)) igt_skip_check(#expr , NULL); \
        ^~~~
cc1: some warnings being treated as errors
ninja: build stopped: subcommand failed.

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [igt-dev] ✗ GitLab.Pipeline: warning for tests/perf: add a test for OA data polling reads using "small" buffers
  2020-03-26  5:42 [igt-dev] [PATCH i-g-t] tests/perf: add a test for OA data polling reads using "small" buffers Ashutosh Dixit
  2020-03-26  5:52 ` [igt-dev] ✗ Fi.CI.BUILD: failure for " Patchwork
@ 2020-03-26  6:01 ` Patchwork
  2020-03-26  9:02 ` [igt-dev] [PATCH i-g-t] " Lionel Landwerlin
  2 siblings, 0 replies; 18+ messages in thread
From: Patchwork @ 2020-03-26  6:01 UTC (permalink / raw)
  To: Ashutosh Dixit; +Cc: igt-dev

== Series Details ==

Series: tests/perf: add a test for OA data polling reads using "small" buffers
URL   : https://patchwork.freedesktop.org/series/75100/
State : warning

== Summary ==

Did not get list of undocumented tests for this run, something is wrong!

Other than that, pipeline status: FAILED.

see https://gitlab.freedesktop.org/gfx-ci/igt-ci-tags/pipelines/124507 for the overview.

build:tests-debian-autotools has failed (https://gitlab.freedesktop.org/gfx-ci/igt-ci-tags/-/jobs/2064102):
     igt_require(i915_perf_revision(drm_fd) >= 5);
                 ^~~~~~~~~~~~~~~~~~
  ./../lib/igt_core.h:986:8: note: in definition of macro ‘igt_require’
    if (!(expr)) igt_skip_check(#expr , NULL); \
          ^~~~
  cc1: some warnings being treated as errors
  make[3]: *** [Makefile:4688: perf.o] Error 1
  make[3]: Leaving directory '/builds/gfx-ci/igt-ci-tags/tests'
  make[2]: *** [Makefile:5131: all-recursive] Error 1
  make[2]: Leaving directory '/builds/gfx-ci/igt-ci-tags/tests'
  make[1]: *** [Makefile:515: all-recursive] Error 1
  make[1]: Leaving directory '/builds/gfx-ci/igt-ci-tags'
  make: *** [Makefile:447: all] Error 2
  section_end:1585202124:build_script
  section_start:1585202124:after_script
  section_end:1585202125:after_script
  section_start:1585202125:upload_artifacts_on_failure
  section_end:1585202127:upload_artifacts_on_failure
  ERROR: Job failed: exit code 1
  

build:tests-debian-meson has failed (https://gitlab.freedesktop.org/gfx-ci/igt-ci-tags/-/jobs/2064097):
     igt_require(i915_perf_revision(drm_fd) >= 5);
                 ^~~~~~~~~~~~~~~~~~
  ../lib/igt_core.h:986:8: note: in definition of macro ‘igt_require’
    if (!(expr)) igt_skip_check(#expr , NULL); \
          ^~~~
  ../tests/perf.c:4756:15: warning: nested extern declaration of ‘i915_perf_revision’ [-Wnested-externs]
     igt_require(i915_perf_revision(drm_fd) >= 5);
                 ^~~~~~~~~~~~~~~~~~
  ../lib/igt_core.h:986:8: note: in definition of macro ‘igt_require’
    if (!(expr)) igt_skip_check(#expr , NULL); \
          ^~~~
  cc1: some warnings being treated as errors
  ninja: build stopped: subcommand failed.
  section_end:1585202061:build_script
  section_start:1585202061:after_script
  section_end:1585202062:after_script
  section_start:1585202062:upload_artifacts_on_failure
  section_end:1585202064:upload_artifacts_on_failure
  ERROR: Job failed: exit code 1
  

build:tests-debian-meson-arm64 has failed (https://gitlab.freedesktop.org/gfx-ci/igt-ci-tags/-/jobs/2064100):
     igt_require(i915_perf_revision(drm_fd) >= 5);
                 ^~~~~~~~~~~~~~~~~~
  ../lib/igt_core.h:986:8: note: in definition of macro ‘igt_require’
    if (!(expr)) igt_skip_check(#expr , NULL); \
          ^~~~
  ../tests/perf.c:4756:15: warning: nested extern declaration of ‘i915_perf_revision’ [-Wnested-externs]
     igt_require(i915_perf_revision(drm_fd) >= 5);
                 ^~~~~~~~~~~~~~~~~~
  ../lib/igt_core.h:986:8: note: in definition of macro ‘igt_require’
    if (!(expr)) igt_skip_check(#expr , NULL); \
          ^~~~
  cc1: some warnings being treated as errors
  ninja: build stopped: subcommand failed.
  section_end:1585202117:build_script
  section_start:1585202117:after_script
  section_end:1585202119:after_script
  section_start:1585202119:upload_artifacts_on_failure
  section_end:1585202120:upload_artifacts_on_failure
  ERROR: Job failed: exit code 1
  

build:tests-debian-meson-armhf has failed (https://gitlab.freedesktop.org/gfx-ci/igt-ci-tags/-/jobs/2064099):
     igt_require(i915_perf_revision(drm_fd) >= 5);
                 ^~~~~~~~~~~~~~~~~~
  ../lib/igt_core.h:986:8: note: in definition of macro ‘igt_require’
    if (!(expr)) igt_skip_check(#expr , NULL); \
          ^~~~
  ../tests/perf.c:4756:15: warning: nested extern declaration of ‘i915_perf_revision’ [-Wnested-externs]
     igt_require(i915_perf_revision(drm_fd) >= 5);
                 ^~~~~~~~~~~~~~~~~~
  ../lib/igt_core.h:986:8: note: in definition of macro ‘igt_require’
    if (!(expr)) igt_skip_check(#expr , NULL); \
          ^~~~
  cc1: some warnings being treated as errors
  ninja: build stopped: subcommand failed.
  section_end:1585202086:build_script
  section_start:1585202086:after_script
  section_end:1585202088:after_script
  section_start:1585202088:upload_artifacts_on_failure
  section_end:1585202089:upload_artifacts_on_failure
  ERROR: Job failed: exit code 1
  

build:tests-debian-meson-mips has failed (https://gitlab.freedesktop.org/gfx-ci/igt-ci-tags/-/jobs/2064101):
                                                                  ^
  ../tests/perf.c: In function ‘__real_main4666’:
  ../tests/perf.c:4756:15: error: implicit declaration of function ‘i915_perf_revision’ [-Werror=implicit-function-declaration]
     igt_require(i915_perf_revision(drm_fd) >= 5);
                 ^
  ../lib/igt_core.h:986:8: note: in definition of macro ‘igt_require’
    if (!(expr)) igt_skip_check(#expr , NULL); \
          ^~~~
  ../tests/perf.c:4756:3: warning: nested extern declaration of ‘i915_perf_revision’ [-Wnested-externs]
     igt_require(i915_perf_revision(drm_fd) >= 5);
     ^~~~~~~~~~~
  cc1: some warnings being treated as errors
  ninja: build stopped: subcommand failed.
  section_end:1585202248:build_script
  section_start:1585202248:after_script
  section_end:1585202250:after_script
  section_start:1585202250:upload_artifacts_on_failure
  section_end:1585202251:upload_artifacts_on_failure
  ERROR: Job failed: exit code 1
  

build:tests-fedora has failed (https://gitlab.freedesktop.org/gfx-ci/igt-ci-tags/-/jobs/2064093):
   4756 |   igt_require(i915_perf_revision(drm_fd) >= 5);
        |               ^~~~~~~~~~~~~~~~~~
  ../lib/igt_core.h:986:8: note: in definition of macro ‘igt_require’
    986 |  if (!(expr)) igt_skip_check(#expr , NULL); \
        |        ^~~~
  ../tests/perf.c:4756:15: warning: nested extern declaration of ‘i915_perf_revision’ [-Wnested-externs]
   4756 |   igt_require(i915_perf_revision(drm_fd) >= 5);
        |               ^~~~~~~~~~~~~~~~~~
  ../lib/igt_core.h:986:8: note: in definition of macro ‘igt_require’
    986 |  if (!(expr)) igt_skip_check(#expr , NULL); \
        |        ^~~~
  cc1: some warnings being treated as errors
  ninja: build stopped: subcommand failed.
  section_end:1585202061:build_script
  section_start:1585202061:after_script
  section_end:1585202062:after_script
  section_start:1585202062:upload_artifacts_on_failure
  section_end:1585202064:upload_artifacts_on_failure
  ERROR: Job failed: exit code 1
  

build:tests-fedora-clang has failed (https://gitlab.freedesktop.org/gfx-ci/igt-ci-tags/-/jobs/2064096):
                  DRM_I915_PERF_PROP_POLL_OA_PERIOD, kernel_hrtimer,
                  ^
  ../tests/perf.c:2289:21: error: invalid application of 'sizeof' to an incomplete type 'uint64_t []'
                  .num_properties = NUM_PROPERTIES(properties),
                                    ^~~~~~~~~~~~~~~~~~~~~~~~~~
  ../tests/perf.c:88:34: note: expanded from macro 'NUM_PROPERTIES'
  #define NUM_PROPERTIES(p) (sizeof(p) / (2 * sizeof(uint64_t)))
                                   ^~~
  ../tests/perf.c:4756:15: error: implicit declaration of function 'i915_perf_revision' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
                  igt_require(i915_perf_revision(drm_fd) >= 5);
                              ^
  3 errors generated.
  ninja: build stopped: subcommand failed.
  section_end:1585202110:build_script
  section_start:1585202110:after_script
  section_end:1585202111:after_script
  section_start:1585202111:upload_artifacts_on_failure
  section_end:1585202113:upload_artifacts_on_failure
  ERROR: Job failed: exit code 1
  

build:tests-fedora-no-libunwind has failed (https://gitlab.freedesktop.org/gfx-ci/igt-ci-tags/-/jobs/2064094):
   4756 |   igt_require(i915_perf_revision(drm_fd) >= 5);
        |               ^~~~~~~~~~~~~~~~~~
  ../lib/igt_core.h:986:8: note: in definition of macro ‘igt_require’
    986 |  if (!(expr)) igt_skip_check(#expr , NULL); \
        |        ^~~~
  ../tests/perf.c:4756:15: warning: nested extern declaration of ‘i915_perf_revision’ [-Wnested-externs]
   4756 |   igt_require(i915_perf_revision(drm_fd) >= 5);
        |               ^~~~~~~~~~~~~~~~~~
  ../lib/igt_core.h:986:8: note: in definition of macro ‘igt_require’
    986 |  if (!(expr)) igt_skip_check(#expr , NULL); \
        |        ^~~~
  cc1: some warnings being treated as errors
  ninja: build stopped: subcommand failed.
  section_end:1585202063:build_script
  section_start:1585202063:after_script
  section_end:1585202065:after_script
  section_start:1585202065:upload_artifacts_on_failure
  section_end:1585202066:upload_artifacts_on_failure
  ERROR: Job failed: exit code 1
  

build:tests-fedora-oldest-meson has failed (https://gitlab.freedesktop.org/gfx-ci/igt-ci-tags/-/jobs/2064095):
   4756 |   igt_require(i915_perf_revision(drm_fd) >= 5);
        |               ^~~~~~~~~~~~~~~~~~
  ../lib/igt_core.h:986:8: note: in definition of macro ‘igt_require’
    986 |  if (!(expr)) igt_skip_check(#expr , NULL); \
        |        ^~~~
  ../tests/perf.c:4756:15: warning: nested extern declaration of ‘i915_perf_revision’ [-Wnested-externs]
   4756 |   igt_require(i915_perf_revision(drm_fd) >= 5);
        |               ^~~~~~~~~~~~~~~~~~
  ../lib/igt_core.h:986:8: note: in definition of macro ‘igt_require’
    986 |  if (!(expr)) igt_skip_check(#expr , NULL); \
        |        ^~~~
  cc1: some warnings being treated as errors
  ninja: build stopped: subcommand failed.
  section_end:1585202068:build_script
  section_start:1585202068:after_script
  section_end:1585202069:after_script
  section_start:1585202069:upload_artifacts_on_failure
  section_end:1585202071:upload_artifacts_on_failure
  ERROR: Job failed: exit code 1

== Logs ==

For more details see: https://gitlab.freedesktop.org/gfx-ci/igt-ci-tags/pipelines/124507
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [igt-dev] [PATCH i-g-t] tests/perf: add a test for OA data polling reads using "small" buffers
  2020-03-26  5:42 [igt-dev] [PATCH i-g-t] tests/perf: add a test for OA data polling reads using "small" buffers Ashutosh Dixit
  2020-03-26  5:52 ` [igt-dev] ✗ Fi.CI.BUILD: failure for " Patchwork
  2020-03-26  6:01 ` [igt-dev] ✗ GitLab.Pipeline: warning " Patchwork
@ 2020-03-26  9:02 ` Lionel Landwerlin
  2020-03-27  4:08   ` Dixit, Ashutosh
  2 siblings, 1 reply; 18+ messages in thread
From: Lionel Landwerlin @ 2020-03-26  9:02 UTC (permalink / raw)
  To: Ashutosh Dixit, igt-dev

On 26/03/2020 07:42, Ashutosh Dixit wrote:
> Add a test for OA data non-blocking reads using buffers smaller than
> the available data. This test would fail for perf revisions < 5
> because poll would block even when data was available. Therefore the
> amount of data read was limited by the buffer size and the timer
> interval and it was impossible to read all available data. This issue
> is fixed in perf revision 5.


There seems to be a fundamental issue with this test, it's supposed to 
test a broken behavior with revision < 5 but then avoid testing anything 
there ;)


I've modified this test a bit here : 
https://gitlab.freedesktop.org/llandwerlin/igt-gpu-tools/-/tree/for-ashutosh

It's failing stable kernels.


Increasing the size of the buffer to 1Mb make the test pass.


-Lionel


>
> Cc: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
> Cc: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
> Signed-off--by: Ashutosh Dixit <ashutosh.dixit@intel.com>
> ---
>   tests/perf.c | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++
>   1 file changed, 81 insertions(+)
>
> diff --git a/tests/perf.c b/tests/perf.c
> index 724f6f809..41e3b4478 100644
> --- a/tests/perf.c
> +++ b/tests/perf.c
> @@ -2265,6 +2265,81 @@ test_polling(void)
>   	__perf_close(stream_fd);
>   }
>   
> +static void test_polling_small_buf(void)
> +{
> +	int oa_exponent = max_oa_exponent_for_period_lte(10 * 1000 * 1000); /* 10ms */
> +	/* Use a large value for the timer for a large amout of data to accumulate */
> +	uint64_t kernel_hrtimer = 400 * 1000 * 1000; /* 400 ms */
> +	uint64_t properties[] = {
> +		/* Include OA reports in samples */
> +		DRM_I915_PERF_PROP_SAMPLE_OA, true,
> +
> +		/* OA unit configuration */
> +		DRM_I915_PERF_PROP_OA_METRICS_SET, test_set->perf_oa_metrics_set,
> +		DRM_I915_PERF_PROP_OA_FORMAT, test_set->perf_oa_format,
> +		DRM_I915_PERF_PROP_OA_EXPONENT, oa_exponent,
> +
> +		/* Kernel configuration (optional) */
> +		DRM_I915_PERF_PROP_POLL_OA_PERIOD, kernel_hrtimer,
> +	};
> +	struct drm_i915_perf_open_param param = {
> +		.flags = I915_PERF_FLAG_FD_CLOEXEC |
> +			I915_PERF_FLAG_DISABLED |
> +			I915_PERF_FLAG_FD_NONBLOCK,
> +		.num_properties = NUM_PROPERTIES(properties),
> +		.properties_ptr = to_user_pointer(properties),
> +	};
> +	uint8_t buf[1024 * 1024];
> +	int ret, iterl = 0, iters = 0, large = 0, small = 0;
> +	struct timespec tsl = {}, tss = {};
> +
> +	stream_fd = __perf_open(drm_fd, &param, true /* prevent_pm */);
> +	do_ioctl(stream_fd, I915_PERF_IOCTL_ENABLE, 0);
> +
> +	/* First do non blocking reads for 4 seconds using 1 MB buffer */
> +	igt_nsec_elapsed(&tsl);
> +	igt_until_timeout(4) {
> +		struct pollfd pollfd = { .fd = stream_fd, .events = POLLIN };
> +
> +		ret = poll(&pollfd, 1, -1);
> +		igt_assert_eq(ret, 1);
> +		igt_assert(pollfd.revents & POLLIN);
> +
> +		ret = read(stream_fd, buf, sizeof(buf));
> +		igt_assert(ret > 0);
> +		large += ret;
> +		iterl++;
> +	}
> +	igt_debug("Read %d B in %d iterations in %ld ns using 1 MB buffer\n",
> +		  large, iterl, igt_nsec_elapsed(&tsl));
> +
> +	/* Now repeat the read with a 4 KB buffer */
> +	igt_nsec_elapsed(&tss);
> +	igt_until_timeout(4) {
> +		struct pollfd pollfd = { .fd = stream_fd, .events = POLLIN };
> +
> +		ret = poll(&pollfd, 1, -1);
> +		igt_assert_eq(ret, 1);
> +		igt_assert(pollfd.revents & POLLIN);
> +
> +		ret = read(stream_fd, buf, 4096);
> +		igt_assert(ret > 0);
> +		small += ret;
> +		iters++;
> +	}
> +	igt_debug("Read %d B in %d iterations in %ld ns using 4 KB buffer\n",
> +		  small, iters, igt_nsec_elapsed(&tss));
> +
> +	__perf_close(stream_fd);
> +
> +	/* Check that data read using the two methods is within 20% of each
> +	 * other. Differences between the two cases is due to timing coupled
> +	 * with granularity of the data reads, but they are still expected to be
> +	 * "close".
> +	 */
> +	igt_assert(abs(large - small) * 100 / ((large + small) / 2) < 20);
> +}
> +
>   static int
>   num_valid_reports_captured(struct drm_i915_perf_open_param *param,
>   			   int64_t *duration_ns)
> @@ -4676,6 +4751,12 @@ igt_main
>   	igt_subtest("polling")
>   		test_polling();
>   
> +	igt_describe("Test polled read with buffer size smaller than available data");
> +	igt_subtest("polling-small-buf") {
> +		igt_require(i915_perf_revision(drm_fd) >= 5);
> +		test_polling_small_buf();
> +	}
> +
>   	igt_subtest("short-reads")
>   		test_short_reads();
>   


_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [igt-dev] [PATCH i-g-t] tests/perf: add a test for OA data polling reads using "small" buffers
  2020-03-26  9:02 ` [igt-dev] [PATCH i-g-t] " Lionel Landwerlin
@ 2020-03-27  4:08   ` Dixit, Ashutosh
  0 siblings, 0 replies; 18+ messages in thread
From: Dixit, Ashutosh @ 2020-03-27  4:08 UTC (permalink / raw)
  To: Lionel Landwerlin; +Cc: igt-dev

On Thu, 26 Mar 2020 02:02:40 -0700, Lionel Landwerlin wrote:
>
> On 26/03/2020 07:42, Ashutosh Dixit wrote:
> > Add a test for OA data non-blocking reads using buffers smaller than
> > the available data. This test would fail for perf revisions < 5
> > because poll would block even when data was available. Therefore the
> > amount of data read was limited by the buffer size and the timer
> > interval and it was impossible to read all available data. This issue
> > is fixed in perf revision 5.
>
>
> There seems to be a fundamental issue with this test, it's supposed to
> test a broken behavior with revision < 5 but then avoid testing anything
> there ;)

It was guaranteed to fail, but I see your point, you are saying let if fail
for rev < 5 but then submit the kernel patch as a fix.

> I've modified this test a bit here :
> https://gitlab.freedesktop.org/llandwerlin/igt-gpu-tools/-/tree/for-ashutosh
>
> It's failing stable kernels.
>
> Increasing the size of the buffer to 1Mb make the test pass.

I like it, I didn't know you could estimate the amount of OA data. I will
clean it up, test and post it as v2.

Thanks!
--
Ashutosh
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [igt-dev] [PATCH i-g-t] tests/perf: add a test for OA data polling reads using "small" buffers
@ 2020-03-27  4:42 Ashutosh Dixit
  2020-03-27  4:50 ` Dixit, Ashutosh
  2020-03-27 20:56 ` Umesh Nerlige Ramappa
  0 siblings, 2 replies; 18+ messages in thread
From: Ashutosh Dixit @ 2020-03-27  4:42 UTC (permalink / raw)
  To: igt-dev

Add a test for OA data non-blocking reads using buffers smaller than
the available data. This test would fail for perf revisions < 5
because poll would block even when data was available. Therefore the
amount of data read was limited by the buffer size and the timer
interval and it was impossible to read all available data. This issue
is fixed in perf revision 5.

v2: Complete rewrite, make test fail on existing kernels (Lionel)

Cc: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Reviewed-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
---
 tests/perf.c | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 69 insertions(+)

diff --git a/tests/perf.c b/tests/perf.c
index 724f6f809..3dc757c3b 100644
--- a/tests/perf.c
+++ b/tests/perf.c
@@ -2265,6 +2265,71 @@ test_polling(void)
 	__perf_close(stream_fd);
 }
 
+static void test_polling_small_buf(void)
+{
+	int oa_exponent = max_oa_exponent_for_period_lte(40 * 1000); /* 40us */
+	uint64_t properties[] = {
+		/* Include OA reports in samples */
+		DRM_I915_PERF_PROP_SAMPLE_OA, true,
+
+		/* OA unit configuration */
+		DRM_I915_PERF_PROP_OA_METRICS_SET, test_set->perf_oa_metrics_set,
+		DRM_I915_PERF_PROP_OA_FORMAT, test_set->perf_oa_format,
+		DRM_I915_PERF_PROP_OA_EXPONENT, oa_exponent,
+	};
+	struct drm_i915_perf_open_param param = {
+		.flags = I915_PERF_FLAG_FD_CLOEXEC |
+			I915_PERF_FLAG_DISABLED |
+			I915_PERF_FLAG_FD_NONBLOCK,
+		.num_properties = NUM_PROPERTIES(properties),
+		.properties_ptr = to_user_pointer(properties),
+	};
+	uint32_t test_duration = 80 * 1000 * 1000;
+	int sample_size = (sizeof(struct drm_i915_perf_record_header) +
+				get_oa_format(test_set->perf_oa_format).size);
+	int n_expected_reports = test_duration / oa_exponent_to_ns(oa_exponent);
+	int n_expect_read_bytes = n_expected_reports * sample_size;
+	uint8_t buf[1024];
+	int n_bytes_read = 0;
+	uint32_t n_polls = 0;
+	struct timespec ts = {};
+
+	stream_fd = __perf_open(drm_fd, &param, true /* prevent_pm */);
+	do_ioctl(stream_fd, I915_PERF_IOCTL_ENABLE, 0);
+
+	igt_nsec_elapsed(&ts);
+
+	while (igt_nsec_elapsed(&ts) < test_duration) {
+		struct timespec poll_wait = {
+			.tv_sec = 0,
+			.tv_nsec = (test_duration - igt_nsec_elapsed(&ts)),
+		};
+		struct pollfd pollfd = { .fd = stream_fd, .events = POLLIN };
+		int ret;
+
+		ret = ppoll(&pollfd, 1, &poll_wait, NULL);
+
+		if (pollfd.revents & POLLIN) {
+			ret = read(stream_fd, buf, sizeof(buf));
+			if (ret >= 0)
+				n_bytes_read += ret;
+		}
+
+		n_polls++;
+
+		igt_debug("Elapsed=%lu wait=%lu\n", igt_nsec_elapsed(&ts), poll_wait.tv_nsec);
+	}
+
+	igt_info("Read %d expected %d (%.2f%% of the expected number), polls=%u\n",
+		  n_bytes_read, n_expect_read_bytes,
+		  n_bytes_read * 100.0f / n_expect_read_bytes,
+		  n_polls);
+
+	__perf_close(stream_fd);
+
+	igt_assert(abs(n_expect_read_bytes - n_bytes_read) < (0.10 * n_expect_read_bytes));
+}
+
 static int
 num_valid_reports_captured(struct drm_i915_perf_open_param *param,
 			   int64_t *duration_ns)
@@ -4676,6 +4741,10 @@ igt_main
 	igt_subtest("polling")
 		test_polling();
 
+	igt_describe("Test polled read with buffer size smaller than available data");
+	igt_subtest("polling-small-buf")
+		test_polling_small_buf();
+
 	igt_subtest("short-reads")
 		test_short_reads();
 
-- 
2.25.2

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* Re: [igt-dev] [PATCH i-g-t] tests/perf: add a test for OA data polling reads using "small" buffers
  2020-03-27  4:42 Ashutosh Dixit
@ 2020-03-27  4:50 ` Dixit, Ashutosh
  2020-03-27 16:09   ` Lionel Landwerlin
  2020-03-27 20:56 ` Umesh Nerlige Ramappa
  1 sibling, 1 reply; 18+ messages in thread
From: Dixit, Ashutosh @ 2020-03-27  4:50 UTC (permalink / raw)
  To: igt-dev

On Thu, 26 Mar 2020 21:42:50 -0700, Ashutosh Dixit wrote:
> diff --git a/tests/perf.c b/tests/perf.c
> index 724f6f809..3dc757c3b 100644
> --- a/tests/perf.c
> +++ b/tests/perf.c
> +static void test_polling_small_buf(void)
> +{

/snip/

> +
> +	igt_assert(abs(n_expect_read_bytes - n_bytes_read) < (0.10 * n_expect_read_bytes));
> +}
> +

I'd be wary of a 90% match on slow platforms like Atom? Maybe 80% is safer?
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [igt-dev] [PATCH i-g-t] tests/perf: add a test for OA data polling reads using "small" buffers
  2020-03-27  4:50 ` Dixit, Ashutosh
@ 2020-03-27 16:09   ` Lionel Landwerlin
  2020-03-27 19:03     ` Dixit, Ashutosh
  0 siblings, 1 reply; 18+ messages in thread
From: Lionel Landwerlin @ 2020-03-27 16:09 UTC (permalink / raw)
  To: Dixit, Ashutosh, igt-dev

On 27/03/2020 06:50, Dixit, Ashutosh wrote:
> On Thu, 26 Mar 2020 21:42:50 -0700, Ashutosh Dixit wrote:
>> diff --git a/tests/perf.c b/tests/perf.c
>> index 724f6f809..3dc757c3b 100644
>> --- a/tests/perf.c
>> +++ b/tests/perf.c
>> +static void test_polling_small_buf(void)
>> +{
> /snip/
>
>> +
>> +	igt_assert(abs(n_expect_read_bytes - n_bytes_read) < (0.10 * n_expect_read_bytes));
>> +}
>> +
> I'd be wary of a 90% match on slow platforms like Atom? Maybe 80% is safer?


Do we have any experiment showing them behaving differently?


-Lionel

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [igt-dev] [PATCH i-g-t] tests/perf: add a test for OA data polling reads using "small" buffers
  2020-03-27 16:09   ` Lionel Landwerlin
@ 2020-03-27 19:03     ` Dixit, Ashutosh
  2020-03-27 19:06       ` Lionel Landwerlin
  0 siblings, 1 reply; 18+ messages in thread
From: Dixit, Ashutosh @ 2020-03-27 19:03 UTC (permalink / raw)
  To: Lionel Landwerlin; +Cc: igt-dev

On Fri, 27 Mar 2020 09:09:41 -0700, Lionel Landwerlin wrote:
>
> On 27/03/2020 06:50, Dixit, Ashutosh wrote:
> > On Thu, 26 Mar 2020 21:42:50 -0700, Ashutosh Dixit wrote:
> >> diff --git a/tests/perf.c b/tests/perf.c
> >> index 724f6f809..3dc757c3b 100644
> >> --- a/tests/perf.c
> >> +++ b/tests/perf.c
> >> +static void test_polling_small_buf(void)
> >> +{
> > /snip/
> >
> >> +
> >> +	igt_assert(abs(n_expect_read_bytes - n_bytes_read) < (0.10 * n_expect_read_bytes));
> >> +}
> >> +
> > I'd be wary of a 90% match on slow platforms like Atom? Maybe 80% is safer?
>
>
> Do we have any experiment showing them behaving differently?

No I don't have any data, but considering that in previous stable versions
we can only read < 10% of the data, I think it should be ok to go down to
80%? So that we don't start getting unnecessary false alarms in CI, even
when the issue is fixed.
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [igt-dev] [PATCH i-g-t] tests/perf: add a test for OA data polling reads using "small" buffers
  2020-03-27 19:03     ` Dixit, Ashutosh
@ 2020-03-27 19:06       ` Lionel Landwerlin
  2020-03-27 19:49         ` Dixit, Ashutosh
  0 siblings, 1 reply; 18+ messages in thread
From: Lionel Landwerlin @ 2020-03-27 19:06 UTC (permalink / raw)
  To: Dixit, Ashutosh; +Cc: igt-dev

On 27/03/2020 21:03, Dixit, Ashutosh wrote:
> On Fri, 27 Mar 2020 09:09:41 -0700, Lionel Landwerlin wrote:
>> On 27/03/2020 06:50, Dixit, Ashutosh wrote:
>>> On Thu, 26 Mar 2020 21:42:50 -0700, Ashutosh Dixit wrote:
>>>> diff --git a/tests/perf.c b/tests/perf.c
>>>> index 724f6f809..3dc757c3b 100644
>>>> --- a/tests/perf.c
>>>> +++ b/tests/perf.c
>>>> +static void test_polling_small_buf(void)
>>>> +{
>>> /snip/
>>>
>>>> +
>>>> +	igt_assert(abs(n_expect_read_bytes - n_bytes_read) < (0.10 * n_expect_read_bytes));
>>>> +}
>>>> +
>>> I'd be wary of a 90% match on slow platforms like Atom? Maybe 80% is safer?
>>
>> Do we have any experiment showing them behaving differently?
> No I don't have any data, but considering that in previous stable versions
> we can only read < 10% of the data, I think it should be ok to go down to
> 80%? So that we don't start getting unnecessary false alarms in CI, even
> when the issue is fixed.

Okay, for the record I get somewhere between 93~95% of expected reports 
on KBLGT2.


-Lionel

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [igt-dev] [PATCH i-g-t] tests/perf: add a test for OA data polling reads using "small" buffers
  2020-03-27 19:06       ` Lionel Landwerlin
@ 2020-03-27 19:49         ` Dixit, Ashutosh
  2020-03-31  6:06           ` Dixit, Ashutosh
  0 siblings, 1 reply; 18+ messages in thread
From: Dixit, Ashutosh @ 2020-03-27 19:49 UTC (permalink / raw)
  To: Lionel Landwerlin; +Cc: igt-dev

On Fri, 27 Mar 2020 12:06:13 -0700, Lionel Landwerlin wrote:
>
> On 27/03/2020 21:03, Dixit, Ashutosh wrote:
> > On Fri, 27 Mar 2020 09:09:41 -0700, Lionel Landwerlin wrote:
> >> On 27/03/2020 06:50, Dixit, Ashutosh wrote:
> >>> On Thu, 26 Mar 2020 21:42:50 -0700, Ashutosh Dixit wrote:
> >>>> diff --git a/tests/perf.c b/tests/perf.c
> >>>> index 724f6f809..3dc757c3b 100644
> >>>> --- a/tests/perf.c
> >>>> +++ b/tests/perf.c
> >>>> +static void test_polling_small_buf(void)
> >>>> +{
> >>> /snip/
> >>>
> >>>> +
> >>>> +	igt_assert(abs(n_expect_read_bytes - n_bytes_read) < (0.10 * n_expect_read_bytes));
> >>>> +}
> >>>> +
> >>> I'd be wary of a 90% match on slow platforms like Atom? Maybe 80% is safer?
> >>
> >> Do we have any experiment showing them behaving differently?
> > No I don't have any data, but considering that in previous stable versions
> > we can only read < 10% of the data, I think it should be ok to go down to
> > 80%? So that we don't start getting unnecessary false alarms in CI, even
> > when the issue is fixed.
>
> Okay, for the record I get somewhere between 93~95% of expected reports on
> KBLGT2.

Yes I tried it and saw that. I already gave a R-b so we could probably
merge the patch after making that change (0.2 instead of 0.1 above), or do
you want me to post a new version with the change? Thanks!
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [igt-dev] [PATCH i-g-t] tests/perf: add a test for OA data polling reads using "small" buffers
  2020-03-27  4:42 Ashutosh Dixit
  2020-03-27  4:50 ` Dixit, Ashutosh
@ 2020-03-27 20:56 ` Umesh Nerlige Ramappa
  2020-03-27 22:02   ` Dixit, Ashutosh
  1 sibling, 1 reply; 18+ messages in thread
From: Umesh Nerlige Ramappa @ 2020-03-27 20:56 UTC (permalink / raw)
  To: Ashutosh Dixit; +Cc: igt-dev

On Thu, Mar 26, 2020 at 09:42:50PM -0700, Ashutosh Dixit wrote:
>Add a test for OA data non-blocking reads using buffers smaller than
>the available data. This test would fail for perf revisions < 5
>because poll would block even when data was available. Therefore the
>amount of data read was limited by the buffer size and the timer
>interval and it was impossible to read all available data. This issue
>is fixed in perf revision 5.
>
>v2: Complete rewrite, make test fail on existing kernels (Lionel)
>
>Cc: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
>Reviewed-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
>Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
>Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
>---
> tests/perf.c | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 69 insertions(+)
>
>diff --git a/tests/perf.c b/tests/perf.c
>index 724f6f809..3dc757c3b 100644
>--- a/tests/perf.c
>+++ b/tests/perf.c
>@@ -2265,6 +2265,71 @@ test_polling(void)
> 	__perf_close(stream_fd);
> }
>
>+static void test_polling_small_buf(void)
>+{
>+	int oa_exponent = max_oa_exponent_for_period_lte(40 * 1000); /* 40us */
>+	uint64_t properties[] = {
>+		/* Include OA reports in samples */
>+		DRM_I915_PERF_PROP_SAMPLE_OA, true,
>+
>+		/* OA unit configuration */
>+		DRM_I915_PERF_PROP_OA_METRICS_SET, test_set->perf_oa_metrics_set,
>+		DRM_I915_PERF_PROP_OA_FORMAT, test_set->perf_oa_format,
>+		DRM_I915_PERF_PROP_OA_EXPONENT, oa_exponent,
>+	};
>+	struct drm_i915_perf_open_param param = {
>+		.flags = I915_PERF_FLAG_FD_CLOEXEC |
>+			I915_PERF_FLAG_DISABLED |
>+			I915_PERF_FLAG_FD_NONBLOCK,
>+		.num_properties = NUM_PROPERTIES(properties),
>+		.properties_ptr = to_user_pointer(properties),
>+	};
>+	uint32_t test_duration = 80 * 1000 * 1000;
>+	int sample_size = (sizeof(struct drm_i915_perf_record_header) +
>+				get_oa_format(test_set->perf_oa_format).size);
>+	int n_expected_reports = test_duration / oa_exponent_to_ns(oa_exponent);
>+	int n_expect_read_bytes = n_expected_reports * sample_size;
>+	uint8_t buf[1024];
>+	int n_bytes_read = 0;
>+	uint32_t n_polls = 0;
>+	struct timespec ts = {};
>+
>+	stream_fd = __perf_open(drm_fd, &param, true /* prevent_pm */);
>+	do_ioctl(stream_fd, I915_PERF_IOCTL_ENABLE, 0);
>+
>+	igt_nsec_elapsed(&ts);
>+
>+	while (igt_nsec_elapsed(&ts) < test_duration) {
>+		struct timespec poll_wait = {
>+			.tv_sec = 0,
>+			.tv_nsec = (test_duration - igt_nsec_elapsed(&ts)),
>+		};
>+		struct pollfd pollfd = { .fd = stream_fd, .events = POLLIN };
>+		int ret;
>+
>+		ret = ppoll(&pollfd, 1, &poll_wait, NULL);

when poll_wait reaches a value less than the default hrtimer poll 
period, poll will start timing out. I think the timeout will itself not 
set the POLLIN event, so that many reports will never be read.

Lionel,

the expected reports calculated here (and in other igt tests) do not 
take context switch reports into account. Do you think we can run into a 
situation where our calculations may go wrong due to large number of 
context switches? thoughts?

Thanks,
Umesh

>+
>+		if (pollfd.revents & POLLIN) {
>+			ret = read(stream_fd, buf, sizeof(buf));
>+			if (ret >= 0)
>+				n_bytes_read += ret;
>+		}
>+
>+		n_polls++;
>+
>+		igt_debug("Elapsed=%lu wait=%lu\n", igt_nsec_elapsed(&ts), poll_wait.tv_nsec);
>+	}
>+
>+	igt_info("Read %d expected %d (%.2f%% of the expected number), polls=%u\n",
>+		  n_bytes_read, n_expect_read_bytes,
>+		  n_bytes_read * 100.0f / n_expect_read_bytes,
>+		  n_polls);
>+
>+	__perf_close(stream_fd);
>+
>+	igt_assert(abs(n_expect_read_bytes - n_bytes_read) < (0.10 * n_expect_read_bytes));
>+}
>+
> static int
> num_valid_reports_captured(struct drm_i915_perf_open_param *param,
> 			   int64_t *duration_ns)
>@@ -4676,6 +4741,10 @@ igt_main
> 	igt_subtest("polling")
> 		test_polling();
>
>+	igt_describe("Test polled read with buffer size smaller than available data");
>+	igt_subtest("polling-small-buf")
>+		test_polling_small_buf();
>+
> 	igt_subtest("short-reads")
> 		test_short_reads();
>
>-- 
>2.25.2
>
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [igt-dev] [PATCH i-g-t] tests/perf: add a test for OA data polling reads using "small" buffers
  2020-03-27 20:56 ` Umesh Nerlige Ramappa
@ 2020-03-27 22:02   ` Dixit, Ashutosh
  0 siblings, 0 replies; 18+ messages in thread
From: Dixit, Ashutosh @ 2020-03-27 22:02 UTC (permalink / raw)
  To: Umesh Nerlige Ramappa; +Cc: igt-dev

On Fri, 27 Mar 2020 13:56:42 -0700, Umesh Nerlige Ramappa wrote:
>
> On Thu, Mar 26, 2020 at 09:42:50PM -0700, Ashutosh Dixit wrote:
> > Add a test for OA data non-blocking reads using buffers smaller than
> > the available data. This test would fail for perf revisions < 5
> > because poll would block even when data was available. Therefore the
> > amount of data read was limited by the buffer size and the timer
> > interval and it was impossible to read all available data. This issue
> > is fixed in perf revision 5.
> >
> > v2: Complete rewrite, make test fail on existing kernels (Lionel)

/snip/

> > +	while (igt_nsec_elapsed(&ts) < test_duration) {
> > +		struct timespec poll_wait = {
> > +			.tv_sec = 0,
> > +			.tv_nsec = (test_duration - igt_nsec_elapsed(&ts)),
> > +		};
> > +		struct pollfd pollfd = { .fd = stream_fd, .events = POLLIN };
> > +		int ret;
> > +
> > +		ret = ppoll(&pollfd, 1, &poll_wait, NULL);
>
> when poll_wait reaches a value less than the default hrtimer poll period,
> poll will start timing out. I think the timeout will itself not set the
> POLLIN event, so that many reports will never be read.

Actually, poll timing out will just run in the loop running faster and
faster, so it will be busy spinning but will read data only when the timer
has fired and updated the tail pointer. So I think all reports will still
be read.

But that's a good point, what is the purpose of the timeout anyway? Why not
just have the poll unblock off the 5 ms timer? I will post a v3 with just
an infinite timeout and reducing data match requirement to 80%.

> the expected reports calculated here (and in other igt tests) do not take
> context switch reports into account. Do you think we can run into a
> situation where our calculations may go wrong due to large number of
> context switches? thoughts?

Well for IGT's mostly there is nothing else except the IGT running so maybe
it's ok? So what data is being collected when the GPU is idle, just some
periodic data?

Thanks!
--
Ashutosh
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [igt-dev] [PATCH i-g-t] tests/perf: add a test for OA data polling reads using "small" buffers
@ 2020-03-27 22:29 Ashutosh Dixit
  0 siblings, 0 replies; 18+ messages in thread
From: Ashutosh Dixit @ 2020-03-27 22:29 UTC (permalink / raw)
  To: igt-dev

Add a test for OA data non-blocking reads using buffers smaller than
the available data. This test would fail for perf revisions < 5
because poll would block even when data was available. Therefore the
amount of data read was limited by the buffer size and the timer
interval and it was impossible to read all available data. This issue
is fixed in perf revision 5.

v2: Complete rewrite, make test fail on existing kernels (Lionel)

v3: Use infinite ppoll timeout (Umesh)
    Increase mismatch tolerance to 20% (Ashutosh)

Cc: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Reviewed-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
---
 tests/perf.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 63 insertions(+)

diff --git a/tests/perf.c b/tests/perf.c
index 442d89fbe..6c0b2ee7f 100644
--- a/tests/perf.c
+++ b/tests/perf.c
@@ -2284,6 +2284,65 @@ test_polling(uint64_t requested_oa_period, bool set_kernel_hrtimer, uint64_t ker
 	__perf_close(stream_fd);
 }
 
+static void test_polling_small_buf(void)
+{
+	int oa_exponent = max_oa_exponent_for_period_lte(40 * 1000); /* 40us */
+	uint64_t properties[] = {
+		/* Include OA reports in samples */
+		DRM_I915_PERF_PROP_SAMPLE_OA, true,
+
+		/* OA unit configuration */
+		DRM_I915_PERF_PROP_OA_METRICS_SET, test_set->perf_oa_metrics_set,
+		DRM_I915_PERF_PROP_OA_FORMAT, test_set->perf_oa_format,
+		DRM_I915_PERF_PROP_OA_EXPONENT, oa_exponent,
+	};
+	struct drm_i915_perf_open_param param = {
+		.flags = I915_PERF_FLAG_FD_CLOEXEC |
+			I915_PERF_FLAG_DISABLED |
+			I915_PERF_FLAG_FD_NONBLOCK,
+		.num_properties = NUM_PROPERTIES(properties),
+		.properties_ptr = to_user_pointer(properties),
+	};
+	uint32_t test_duration = 80 * 1000 * 1000;
+	int sample_size = (sizeof(struct drm_i915_perf_record_header) +
+				get_oa_format(test_set->perf_oa_format).size);
+	int n_expected_reports = test_duration / oa_exponent_to_ns(oa_exponent);
+	int n_expect_read_bytes = n_expected_reports * sample_size;
+	uint8_t buf[1024];
+	int n_bytes_read = 0;
+	uint32_t n_polls = 0;
+	struct timespec ts = {};
+
+	stream_fd = __perf_open(drm_fd, &param, true /* prevent_pm */);
+	do_ioctl(stream_fd, I915_PERF_IOCTL_ENABLE, 0);
+
+	igt_nsec_elapsed(&ts);
+
+	while (igt_nsec_elapsed(&ts) < test_duration) {
+		struct pollfd pollfd = { .fd = stream_fd, .events = POLLIN };
+		int ret;
+
+		ret = ppoll(&pollfd, 1, NULL, NULL);
+
+		if (pollfd.revents & POLLIN) {
+			ret = read(stream_fd, buf, sizeof(buf));
+			if (ret >= 0)
+				n_bytes_read += ret;
+		}
+
+		n_polls++;
+	}
+
+	igt_info("Read %d expected %d (%.2f%% of the expected number), polls=%u\n",
+		  n_bytes_read, n_expect_read_bytes,
+		  n_bytes_read * 100.0f / n_expect_read_bytes,
+		  n_polls);
+
+	__perf_close(stream_fd);
+
+	igt_assert(abs(n_expect_read_bytes - n_bytes_read) < (0.20 * n_expect_read_bytes));
+}
+
 static int
 num_valid_reports_captured(struct drm_i915_perf_open_param *param,
 			   int64_t *duration_ns)
@@ -4919,6 +4978,10 @@ igt_main
 			     2 * 1000 * 1000 /* default 2ms hrtimer */);
 	}
 
+	igt_describe("Test polled read with buffer size smaller than available data");
+	igt_subtest("polling-small-buf")
+		test_polling_small_buf();
+
 	igt_subtest("short-reads")
 		test_short_reads();
 
-- 
2.25.2

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* Re: [igt-dev] [PATCH i-g-t] tests/perf: add a test for OA data polling reads using "small" buffers
  2020-03-27 19:49         ` Dixit, Ashutosh
@ 2020-03-31  6:06           ` Dixit, Ashutosh
  2020-03-31  7:36             ` Lionel Landwerlin
  0 siblings, 1 reply; 18+ messages in thread
From: Dixit, Ashutosh @ 2020-03-31  6:06 UTC (permalink / raw)
  To: Lionel Landwerlin; +Cc: igt-dev

On Fri, 27 Mar 2020 12:49:22 -0700, Dixit, Ashutosh wrote:
>
> On Fri, 27 Mar 2020 12:06:13 -0700, Lionel Landwerlin wrote:
> >
> > On 27/03/2020 21:03, Dixit, Ashutosh wrote:
> > > On Fri, 27 Mar 2020 09:09:41 -0700, Lionel Landwerlin wrote:
> > >> On 27/03/2020 06:50, Dixit, Ashutosh wrote:
> > >>> On Thu, 26 Mar 2020 21:42:50 -0700, Ashutosh Dixit wrote:
> > >>>> diff --git a/tests/perf.c b/tests/perf.c
> > >>>> index 724f6f809..3dc757c3b 100644
> > >>>> --- a/tests/perf.c
> > >>>> +++ b/tests/perf.c
> > >>>> +static void test_polling_small_buf(void)
> > >>>> +{
> > >>> /snip/
> > >>>
> > >>>> +
> > >>>> +	igt_assert(abs(n_expect_read_bytes - n_bytes_read) < (0.10 * n_expect_read_bytes));
> > >>>> +}
> > >>>> +
> > >>> I'd be wary of a 90% match on slow platforms like Atom? Maybe 80% is safer?
> > >>
> > >> Do we have any experiment showing them behaving differently?
> > > No I don't have any data, but considering that in previous stable versions
> > > we can only read < 10% of the data, I think it should be ok to go down to
> > > 80%? So that we don't start getting unnecessary false alarms in CI, even
> > > when the issue is fixed.
> >
> > Okay, for the record I get somewhere between 93~95% of expected reports on
> > KBLGT2.
>
> Yes I tried it and saw that. I already gave a R-b so we could probably
> merge the patch after making that change (0.2 instead of 0.1 above), or do
> you want me to post a new version with the change? Thanks!

Actually there has been some change in the kernel, earlier like you I was
also getting around 94% with a 1 KB buffer, now I am getting about
87%. I am getting 94% with a 1 MB buffer. Does the amount of expected data
in the test need to be modified? I can try to bisect tomorrow and see what
has done this, unless you already know. Thanks!
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [igt-dev] [PATCH i-g-t] tests/perf: add a test for OA data polling reads using "small" buffers
  2020-03-31  6:06           ` Dixit, Ashutosh
@ 2020-03-31  7:36             ` Lionel Landwerlin
  2020-03-31  7:48               ` Dixit, Ashutosh
  0 siblings, 1 reply; 18+ messages in thread
From: Lionel Landwerlin @ 2020-03-31  7:36 UTC (permalink / raw)
  To: Dixit, Ashutosh; +Cc: igt-dev

On 31/03/2020 09:06, Dixit, Ashutosh wrote:
> On Fri, 27 Mar 2020 12:49:22 -0700, Dixit, Ashutosh wrote:
>> On Fri, 27 Mar 2020 12:06:13 -0700, Lionel Landwerlin wrote:
>>> On 27/03/2020 21:03, Dixit, Ashutosh wrote:
>>>> On Fri, 27 Mar 2020 09:09:41 -0700, Lionel Landwerlin wrote:
>>>>> On 27/03/2020 06:50, Dixit, Ashutosh wrote:
>>>>>> On Thu, 26 Mar 2020 21:42:50 -0700, Ashutosh Dixit wrote:
>>>>>>> diff --git a/tests/perf.c b/tests/perf.c
>>>>>>> index 724f6f809..3dc757c3b 100644
>>>>>>> --- a/tests/perf.c
>>>>>>> +++ b/tests/perf.c
>>>>>>> +static void test_polling_small_buf(void)
>>>>>>> +{
>>>>>> /snip/
>>>>>>
>>>>>>> +
>>>>>>> +	igt_assert(abs(n_expect_read_bytes - n_bytes_read) < (0.10 * n_expect_read_bytes));
>>>>>>> +}
>>>>>>> +
>>>>>> I'd be wary of a 90% match on slow platforms like Atom? Maybe 80% is safer?
>>>>> Do we have any experiment showing them behaving differently?
>>>> No I don't have any data, but considering that in previous stable versions
>>>> we can only read < 10% of the data, I think it should be ok to go down to
>>>> 80%? So that we don't start getting unnecessary false alarms in CI, even
>>>> when the issue is fixed.
>>> Okay, for the record I get somewhere between 93~95% of expected reports on
>>> KBLGT2.
>> Yes I tried it and saw that. I already gave a R-b so we could probably
>> merge the patch after making that change (0.2 instead of 0.1 above), or do
>> you want me to post a new version with the change? Thanks!
> Actually there has been some change in the kernel, earlier like you I was
> also getting around 94% with a 1 KB buffer, now I am getting about
> 87%. I am getting 94% with a 1 MB buffer. Does the amount of expected data
> in the test need to be modified? I can try to bisect tomorrow and see what
> has done this, unless you already know. Thanks!

Ah, that's probably the read() bug you're fixing...

Are you running with the kernel patch : "drm/i915/perf: Do not clear 
pollin for small user read buffers" ?


-Lionel

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [igt-dev] [PATCH i-g-t] tests/perf: add a test for OA data polling reads using "small" buffers
  2020-03-31  7:36             ` Lionel Landwerlin
@ 2020-03-31  7:48               ` Dixit, Ashutosh
  2020-04-03  1:19                 ` Dixit, Ashutosh
  0 siblings, 1 reply; 18+ messages in thread
From: Dixit, Ashutosh @ 2020-03-31  7:48 UTC (permalink / raw)
  To: Lionel Landwerlin; +Cc: igt-dev

On Tue, 31 Mar 2020 00:36:54 -0700, Lionel Landwerlin wrote:
>
> On 31/03/2020 09:06, Dixit, Ashutosh wrote:
> > On Fri, 27 Mar 2020 12:49:22 -0700, Dixit, Ashutosh wrote:
> >> On Fri, 27 Mar 2020 12:06:13 -0700, Lionel Landwerlin wrote:
> >>> On 27/03/2020 21:03, Dixit, Ashutosh wrote:
> >>>> On Fri, 27 Mar 2020 09:09:41 -0700, Lionel Landwerlin wrote:
> >>>>> On 27/03/2020 06:50, Dixit, Ashutosh wrote:
> >>>>>> On Thu, 26 Mar 2020 21:42:50 -0700, Ashutosh Dixit wrote:
> >>>>>>> diff --git a/tests/perf.c b/tests/perf.c
> >>>>>>> index 724f6f809..3dc757c3b 100644
> >>>>>>> --- a/tests/perf.c
> >>>>>>> +++ b/tests/perf.c
> >>>>>>> +static void test_polling_small_buf(void)
> >>>>>>> +{
> >>>>>> /snip/
> >>>>>>
> >>>>>>> +
> >>>>>>> +	igt_assert(abs(n_expect_read_bytes - n_bytes_read) < (0.10 * n_expect_read_bytes));
> >>>>>>> +}
> >>>>>>> +
> >>>>>> I'd be wary of a 90% match on slow platforms like Atom? Maybe 80% is safer?
> >>>>> Do we have any experiment showing them behaving differently?
> >>>> No I don't have any data, but considering that in previous stable versions
> >>>> we can only read < 10% of the data, I think it should be ok to go down to
> >>>> 80%? So that we don't start getting unnecessary false alarms in CI, even
> >>>> when the issue is fixed.
> >>> Okay, for the record I get somewhere between 93~95% of expected reports on
> >>> KBLGT2.
> >> Yes I tried it and saw that. I already gave a R-b so we could probably
> >> merge the patch after making that change (0.2 instead of 0.1 above), or do
> >> you want me to post a new version with the change? Thanks!
> > Actually there has been some change in the kernel, earlier like you I was
> > also getting around 94% with a 1 KB buffer, now I am getting about
> > 87%. I am getting 94% with a 1 MB buffer. Does the amount of expected data
> > in the test need to be modified? I can try to bisect tomorrow and see what
> > has done this, unless you already know. Thanks!
>
> Ah, that's probably the read() bug you're fixing...
>
> Are you running with the kernel patch : "drm/i915/perf: Do not clear pollin
> for small user read buffers" ?

Yes, I was just testing the patch before posting it and I chanced on
this. Thanks!
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [igt-dev] [PATCH i-g-t] tests/perf: add a test for OA data polling reads using "small" buffers
  2020-03-31  7:48               ` Dixit, Ashutosh
@ 2020-04-03  1:19                 ` Dixit, Ashutosh
  0 siblings, 0 replies; 18+ messages in thread
From: Dixit, Ashutosh @ 2020-04-03  1:19 UTC (permalink / raw)
  To: Lionel Landwerlin; +Cc: igt-dev

On Tue, 31 Mar 2020 00:48:45 -0700, Dixit, Ashutosh wrote:
>
> On Tue, 31 Mar 2020 00:36:54 -0700, Lionel Landwerlin wrote:
> >
> > On 31/03/2020 09:06, Dixit, Ashutosh wrote:
> > > On Fri, 27 Mar 2020 12:49:22 -0700, Dixit, Ashutosh wrote:
> > >> On Fri, 27 Mar 2020 12:06:13 -0700, Lionel Landwerlin wrote:
> > >>> On 27/03/2020 21:03, Dixit, Ashutosh wrote:
> > >>>> On Fri, 27 Mar 2020 09:09:41 -0700, Lionel Landwerlin wrote:
> > >>>>> On 27/03/2020 06:50, Dixit, Ashutosh wrote:
> > >>>>>> On Thu, 26 Mar 2020 21:42:50 -0700, Ashutosh Dixit wrote:
> > >>>>>>> diff --git a/tests/perf.c b/tests/perf.c
> > >>>>>>> index 724f6f809..3dc757c3b 100644
> > >>>>>>> --- a/tests/perf.c
> > >>>>>>> +++ b/tests/perf.c
> > >>>>>>> +static void test_polling_small_buf(void)
> > >>>>>>> +{
> > >>>>>> /snip/
> > >>>>>>
> > >>>>>>> +
> > >>>>>>> +	igt_assert(abs(n_expect_read_bytes - n_bytes_read) < (0.10 * n_expect_read_bytes));
> > >>>>>>> +}
> > >>>>>>> +
> > >>>>>> I'd be wary of a 90% match on slow platforms like Atom? Maybe 80% is safer?
> > >>>>> Do we have any experiment showing them behaving differently?
> > >>>> No I don't have any data, but considering that in previous stable versions
> > >>>> we can only read < 10% of the data, I think it should be ok to go down to
> > >>>> 80%? So that we don't start getting unnecessary false alarms in CI, even
> > >>>> when the issue is fixed.
> > >>> Okay, for the record I get somewhere between 93~95% of expected reports on
> > >>> KBLGT2.
> > >> Yes I tried it and saw that. I already gave a R-b so we could probably
> > >> merge the patch after making that change (0.2 instead of 0.1 above), or do
> > >> you want me to post a new version with the change? Thanks!
> > >
> > > Actually there has been some change in the kernel, earlier like you I was
> > > also getting around 94% with a 1 KB buffer, now I am getting about
> > > 87%. I am getting 94% with a 1 MB buffer. Does the amount of expected data
> > > in the test need to be modified? I can try to bisect tomorrow and see what
> > > has done this, unless you already know. Thanks!

I haven't been able to easily narrow this down, I am not sure if it is
worth spending more time on it. However since v3 of the test only requires
a 80% match the test passes with kernel patch : "drm/i915/perf: Do not
clear pollin for small user read buffers" and will fail on prior/stable
kernels. Thanks!

> >
> > Ah, that's probably the read() bug you're fixing...
> >
> > Are you running with the kernel patch : "drm/i915/perf: Do not clear pollin
> > for small user read buffers" ?
>
> Yes, I was just testing the patch before posting it and I chanced on
> this. Thanks!

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2020-04-03  1:19 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-03-26  5:42 [igt-dev] [PATCH i-g-t] tests/perf: add a test for OA data polling reads using "small" buffers Ashutosh Dixit
2020-03-26  5:52 ` [igt-dev] ✗ Fi.CI.BUILD: failure for " Patchwork
2020-03-26  6:01 ` [igt-dev] ✗ GitLab.Pipeline: warning " Patchwork
2020-03-26  9:02 ` [igt-dev] [PATCH i-g-t] " Lionel Landwerlin
2020-03-27  4:08   ` Dixit, Ashutosh
  -- strict thread matches above, loose matches on Subject: below --
2020-03-27  4:42 Ashutosh Dixit
2020-03-27  4:50 ` Dixit, Ashutosh
2020-03-27 16:09   ` Lionel Landwerlin
2020-03-27 19:03     ` Dixit, Ashutosh
2020-03-27 19:06       ` Lionel Landwerlin
2020-03-27 19:49         ` Dixit, Ashutosh
2020-03-31  6:06           ` Dixit, Ashutosh
2020-03-31  7:36             ` Lionel Landwerlin
2020-03-31  7:48               ` Dixit, Ashutosh
2020-04-03  1:19                 ` Dixit, Ashutosh
2020-03-27 20:56 ` Umesh Nerlige Ramappa
2020-03-27 22:02   ` Dixit, Ashutosh
2020-03-27 22:29 Ashutosh Dixit

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox