[PATCH i-g-t] Establish relative engine speeds

Anna Karas anna.karas at intel.com
Fri Nov 1 12:20:46 UTC 2019


Log calibrations per engine to test if there are platforms
which need per engine nop calibration.
Signed-off-by: Anna Karas <anna.karas at intel.com>
---
 tests/i915/gem_nop_speed.c            | 123 ++++++++++++++
 tests/intel-ci/fast-feedback.testlist | 234 +-------------------------
 tests/meson.build                     |   1 +
 3 files changed, 125 insertions(+), 233 deletions(-)
 create mode 100644 tests/i915/gem_nop_speed.c

diff --git a/tests/i915/gem_nop_speed.c b/tests/i915/gem_nop_speed.c
new file mode 100644
index 00000000..35889ca0
--- /dev/null
+++ b/tests/i915/gem_nop_speed.c
@@ -0,0 +1,123 @@
+/*
+ * Copyright © 2019 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ *
+ * Authors:
+ *    Anna Karas <anna.karas at intel.com>
+ *
+ */
+
+#include "igt.h"
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <string.h>
+#include <fcntl.h>
+#include <inttypes.h>
+#include <errno.h>
+#include <poll.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <sys/ioctl.h>
+#include <sys/time.h>
+#include <sys/wait.h>
+#include <time.h>
+#include <assert.h>
+#include <limits.h>
+#include <pthread.h>
+
+#include "intel_chipset.h"
+#include "intel_reg.h"
+#include "drm.h"
+#include "ioctl_wrappers.h"
+#include "drmtest.h"
+
+#include "intel_io.h"
+#include "igt_aux.h"
+#include "igt_rand.h"
+#include "igt_perf.h"
+#include "sw_sync.h"
+#include "i915/gem_mman.h"
+#include "i915/gem_engine_topology.h"
+
+IGT_TEST_DESCRIPTION("Tests nop speed on various platforms.");
+
+static double elapsed(const struct timespec *start, const struct timespec *end)
+{
+	return (end->tv_sec - start->tv_sec) +
+	       (end->tv_nsec - start->tv_nsec) / 1e9;
+}
+
+static unsigned long calibrate_nop(int fd, struct intel_execution_engine2 *engine)
+{
+	const uint32_t bbe = 0xa << 23;
+	unsigned int steps = 17;
+	unsigned int usecs = 1000;
+	struct drm_i915_gem_exec_object2 obj = {};
+	struct drm_i915_gem_execbuffer2 eb = {
+		.buffer_count = 1,
+		.buffers_ptr = (uintptr_t)&obj,
+		.flags = engine->flags
+	};
+	long size, last_size;
+	struct timespec t_0, t_end;
+
+	clock_gettime(CLOCK_MONOTONIC, &t_0);
+
+	size = 256 * 1024;
+	do {
+		struct timespec t_start;
+
+		obj.handle = gem_create(fd, size);
+		gem_write(fd, obj.handle, size - sizeof(bbe), &bbe,
+			  sizeof(bbe));
+		gem_execbuf(fd, &eb);
+		gem_sync(fd, obj.handle);
+
+		clock_gettime(CLOCK_MONOTONIC, &t_start);
+		for (int i = 0; i < steps; i++)
+			gem_execbuf(fd, &eb);
+		gem_sync(fd, obj.handle);
+		clock_gettime(CLOCK_MONOTONIC, &t_end);
+
+		gem_close(fd, obj.handle);
+
+		last_size = size;
+		size = steps * size / elapsed(&t_start, &t_end) / 1e6 * usecs;
+		size = ALIGN(size, sizeof(uint32_t));
+	} while (elapsed(&t_0, &t_end) < 5 ||
+		 labs(size - last_size) > (size / 100));
+
+	return size / sizeof(uint32_t);
+}
+
+igt_simple_main
+{
+	struct intel_execution_engine2 *engine;
+	int fd = __drm_open_driver(DRIVER_INTEL);
+	igt_require(fd);
+
+	__for_each_physical_engine(fd, engine) {
+		unsigned long nop_calibration = calibrate_nop(fd, engine);
+		printf("%s: %lu\n", engine->name, nop_calibration);
+	}
+}
\ No newline at end of file
diff --git a/tests/intel-ci/fast-feedback.testlist b/tests/intel-ci/fast-feedback.testlist
index 2553a68c..ff7b7434 100644
--- a/tests/intel-ci/fast-feedback.testlist
+++ b/tests/intel-ci/fast-feedback.testlist
@@ -1,233 +1 @@
-# Keep alphabetically sorted by default
-
-igt at core_auth@basic-auth
-igt at debugfs_test@read_all_entries
-igt at gem_basic@bad-close
-igt at gem_basic@create-close
-igt at gem_basic@create-fd-close
-igt at gem_busy@busy-all
-igt at gem_close_race@basic-process
-igt at gem_close_race@basic-threads
-igt at gem_cpu_reloc@basic
-igt at gem_ctx_create@basic
-igt at gem_ctx_create@basic-files
-igt at gem_ctx_exec@basic
-igt at gem_ctx_param@basic
-igt at gem_ctx_param@basic-default
-igt at gem_ctx_switch@legacy-render
-igt at gem_ctx_switch@rcs0
-igt at gem_exec_basic@basic-all
-igt at gem_exec_create@basic
-igt at gem_exec_fence@basic-busy-default
-igt at gem_exec_fence@basic-wait-default
-igt at gem_exec_fence@basic-await-default
-igt at gem_exec_fence@nb-await-default
-igt at gem_exec_gttfill@basic
-igt at gem_exec_parallel@basic
-igt at gem_exec_parse@basic-allowed
-igt at gem_exec_parse@basic-rejected
-igt at gem_exec_reloc@basic-cpu
-igt at gem_exec_reloc@basic-gtt
-igt at gem_exec_reloc@basic-cpu-gtt
-igt at gem_exec_reloc@basic-gtt-cpu
-igt at gem_exec_reloc@basic-cpu-read
-igt at gem_exec_reloc@basic-gtt-read
-igt at gem_exec_reloc@basic-write-cpu
-igt at gem_exec_reloc@basic-write-gtt
-igt at gem_exec_reloc@basic-write-read
-igt at gem_exec_reloc@basic-cpu-noreloc
-igt at gem_exec_reloc@basic-gtt-noreloc
-igt at gem_exec_reloc@basic-cpu-gtt-noreloc
-igt at gem_exec_reloc@basic-gtt-cpu-noreloc
-igt at gem_exec_reloc@basic-cpu-read-noreloc
-igt at gem_exec_reloc@basic-gtt-read-noreloc
-igt at gem_exec_reloc@basic-write-cpu-noreloc
-igt at gem_exec_reloc@basic-write-gtt-noreloc
-igt at gem_exec_reloc@basic-write-read-noreloc
-igt at gem_exec_reloc@basic-cpu-active
-igt at gem_exec_reloc@basic-gtt-active
-igt at gem_exec_reloc@basic-cpu-gtt-active
-igt at gem_exec_reloc@basic-gtt-cpu-active
-igt at gem_exec_reloc@basic-cpu-read-active
-igt at gem_exec_reloc@basic-gtt-read-active
-igt at gem_exec_reloc@basic-write-cpu-active
-igt at gem_exec_reloc@basic-write-gtt-active
-igt at gem_exec_reloc@basic-write-read-active
-igt at gem_exec_reloc@basic-softpin
-igt at gem_exec_store@basic-all
-igt at gem_exec_suspend@basic
-igt at gem_exec_suspend@basic-s0
-igt at gem_exec_suspend@basic-s3
-igt at gem_exec_suspend@basic-s4-devices
-igt at gem_flink_basic@bad-flink
-igt at gem_flink_basic@bad-open
-igt at gem_flink_basic@basic
-igt at gem_flink_basic@double-flink
-igt at gem_flink_basic@flink-lifetime
-igt at gem_linear_blits@basic
-igt at gem_mmap@basic
-igt at gem_mmap@basic-small-bo
-igt at gem_mmap_gtt@basic
-igt at gem_mmap_gtt@basic-copy
-igt at gem_mmap_gtt@basic-read
-igt at gem_mmap_gtt@basic-read-no-prefault
-igt at gem_mmap_gtt@basic-read-write
-igt at gem_mmap_gtt@basic-read-write-distinct
-igt at gem_mmap_gtt@basic-short
-igt at gem_mmap_gtt@basic-small-bo
-igt at gem_mmap_gtt@basic-small-bo-tiledx
-igt at gem_mmap_gtt@basic-small-bo-tiledy
-igt at gem_mmap_gtt@basic-small-copy
-igt at gem_mmap_gtt@basic-small-copy-xy
-igt at gem_mmap_gtt@basic-write
-igt at gem_mmap_gtt@basic-write-cpu-read-gtt
-igt at gem_mmap_gtt@basic-write-gtt
-igt at gem_mmap_gtt@basic-write-gtt-no-prefault
-igt at gem_mmap_gtt@basic-write-no-prefault
-igt at gem_mmap_gtt@basic-write-read
-igt at gem_mmap_gtt@basic-write-read-distinct
-igt at gem_render_linear_blits@basic
-igt at gem_render_tiled_blits@basic
-igt at gem_ringfill@basic-default
-igt at gem_ringfill@basic-default-interruptible
-igt at gem_ringfill@basic-default-forked
-igt at gem_ringfill@basic-default-fd
-igt at gem_sync@basic-all
-igt at gem_sync@basic-each
-igt at gem_sync@basic-many-each
-igt at gem_sync@basic-store-all
-igt at gem_sync@basic-store-each
-igt at gem_tiled_blits@basic
-igt at gem_tiled_fence_blits@basic
-igt at gem_tiled_pread_basic
-igt at gem_wait@basic-busy-all
-igt at gem_wait@basic-wait-all
-igt at gem_wait@basic-await-all
-igt at gem_workarounds@basic-read
-igt at i915_getparams_basic@basic-eu-total
-igt at i915_getparams_basic@basic-subslice-total
-igt at i915_hangman@error-state-basic
-igt at kms_addfb_basic@addfb25-bad-modifier
-igt at kms_addfb_basic@addfb25-framebuffer-vs-set-tiling
-igt at kms_addfb_basic@addfb25-modifier-no-flag
-igt at kms_addfb_basic@addfb25-x-tiled
-igt at kms_addfb_basic@addfb25-x-tiled-mismatch
-igt at kms_addfb_basic@addfb25-yf-tiled
-igt at kms_addfb_basic@addfb25-y-tiled
-igt at kms_addfb_basic@addfb25-y-tiled-small
-igt at kms_addfb_basic@bad-pitch-0
-igt at kms_addfb_basic@bad-pitch-1024
-igt at kms_addfb_basic@bad-pitch-128
-igt at kms_addfb_basic@bad-pitch-256
-igt at kms_addfb_basic@bad-pitch-32
-igt at kms_addfb_basic@bad-pitch-63
-igt at kms_addfb_basic@bad-pitch-65536
-igt at kms_addfb_basic@bad-pitch-999
-igt at kms_addfb_basic@basic
-igt at kms_addfb_basic@basic-x-tiled
-igt at kms_addfb_basic@basic-y-tiled
-igt at kms_addfb_basic@bo-too-small
-igt at kms_addfb_basic@bo-too-small-due-to-tiling
-igt at kms_addfb_basic@clobberred-modifier
-igt at kms_addfb_basic@framebuffer-vs-set-tiling
-igt at kms_addfb_basic@invalid-get-prop
-igt at kms_addfb_basic@invalid-get-prop-any
-igt at kms_addfb_basic@invalid-set-prop
-igt at kms_addfb_basic@invalid-set-prop-any
-igt at kms_addfb_basic@no-handle
-igt at kms_addfb_basic@size-max
-igt at kms_addfb_basic@small-bo
-igt at kms_addfb_basic@tile-pitch-mismatch
-igt at kms_addfb_basic@too-high
-igt at kms_addfb_basic@too-wide
-igt at kms_addfb_basic@unused-handle
-igt at kms_addfb_basic@unused-modifier
-igt at kms_addfb_basic@unused-offsets
-igt at kms_addfb_basic@unused-pitches
-igt at kms_busy@basic-flip-a
-igt at kms_busy@basic-flip-b
-igt at kms_busy@basic-flip-c
-igt at kms_chamelium@dp-hpd-fast
-igt at kms_chamelium@dp-edid-read
-igt at kms_chamelium@dp-crc-fast
-igt at kms_chamelium@hdmi-hpd-fast
-igt at kms_chamelium@hdmi-edid-read
-igt at kms_chamelium@hdmi-crc-fast
-igt at kms_chamelium@vga-hpd-fast
-igt at kms_chamelium@vga-edid-read
-igt at kms_chamelium@common-hpd-after-suspend
-igt at kms_prop_blob@basic
-igt at kms_cursor_legacy@basic-busy-flip-before-cursor-atomic
-igt at kms_cursor_legacy@basic-busy-flip-before-cursor-legacy
-igt at kms_cursor_legacy@basic-flip-after-cursor-atomic
-igt at kms_cursor_legacy@basic-flip-after-cursor-legacy
-igt at kms_cursor_legacy@basic-flip-after-cursor-varying-size
-igt at kms_cursor_legacy@basic-flip-before-cursor-atomic
-igt at kms_cursor_legacy@basic-flip-before-cursor-legacy
-igt at kms_cursor_legacy@basic-flip-before-cursor-varying-size
-igt at kms_flip@basic-flip-vs-dpms
-igt at kms_flip@basic-flip-vs-modeset
-igt at kms_flip@basic-flip-vs-wf_vblank
-igt at kms_flip@basic-plain-flip
-igt at kms_force_connector_basic@force-connector-state
-igt at kms_force_connector_basic@force-edid
-igt at kms_force_connector_basic@force-load-detect
-igt at kms_force_connector_basic@prune-stale-modes
-igt at kms_frontbuffer_tracking@basic
-igt at kms_pipe_crc_basic@hang-read-crc-pipe-a
-igt at kms_pipe_crc_basic@nonblocking-crc-pipe-a
-igt at kms_pipe_crc_basic@nonblocking-crc-pipe-a-frame-sequence
-igt at kms_pipe_crc_basic@read-crc-pipe-a
-igt at kms_pipe_crc_basic@read-crc-pipe-b
-igt at kms_pipe_crc_basic@read-crc-pipe-c
-igt at kms_pipe_crc_basic@read-crc-pipe-a-frame-sequence
-igt at kms_pipe_crc_basic@suspend-read-crc-pipe-a
-igt at kms_psr@primary_page_flip
-igt at kms_psr@cursor_plane_move
-igt at kms_psr@sprite_plane_onoff
-igt at kms_psr@primary_mmap_gtt
-igt at kms_setmode@basic-clone-single-crtc
-igt at i915_pm_backlight@basic-brightness
-igt at i915_pm_rpm@basic-pci-d3-state
-igt at i915_pm_rpm@basic-rte
-igt at i915_pm_rps@basic-api
-igt at prime_busy@basic-after-default
-igt at prime_busy@basic-before-default
-igt at prime_busy@basic-wait-after-default
-igt at prime_busy@basic-wait-before-default
-igt at prime_self_import@basic-llseek-bad
-igt at prime_self_import@basic-llseek-size
-igt at prime_self_import@basic-with_fd_dup
-igt at prime_self_import@basic-with_one_bo
-igt at prime_self_import@basic-with_one_bo_two_files
-igt at prime_self_import@basic-with_two_bos
-igt at prime_vgem@basic-busy-default
-igt at prime_vgem@basic-fence-flip
-igt at prime_vgem@basic-fence-mmap
-igt at prime_vgem@basic-fence-read
-igt at prime_vgem@basic-fence-wait-default
-igt at prime_vgem@basic-gtt
-igt at prime_vgem@basic-read
-igt at prime_vgem@basic-sync-default
-igt at prime_vgem@basic-wait-default
-igt at prime_vgem@basic-write
-igt at vgem_basic@setversion
-igt at vgem_basic@create
-igt at vgem_basic@debugfs
-igt at vgem_basic@dmabuf-export
-igt at vgem_basic@dmabuf-fence
-igt at vgem_basic@dmabuf-fence-before
-igt at vgem_basic@dmabuf-mmap
-igt at vgem_basic@mmap
-igt at vgem_basic@second-client
-igt at vgem_basic@sysfs
-
-# All tests that do module unloading and reloading are executed last.
-# They will sometimes reveal issues of earlier tests leaving the
-# driver in a broken state that is not otherwise noticed in that test.
-
-igt at vgem_basic@unload
-igt at i915_module_load@reload
-igt at i915_module_load@reload-no-display
-igt at i915_module_load@reload-with-fault-injection
-igt at i915_pm_rpm@module-reload
+igt at gem_nop_speed
diff --git a/tests/meson.build b/tests/meson.build
index 7e3f9e0a..2e4a608e 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -172,6 +172,7 @@ i915_progs = [
 	'gem_mmap_gtt',
 	'gem_mmap_offset_exhaustion',
 	'gem_mmap_wc',
+	'gem_nop_speed',
 	'gem_partial_pwrite_pread',
 	'gem_persistent_relocs',
 	'gem_pipe_control_store_loop',
-- 
2.19.0



More information about the Intel-gfx-trybot mailing list