From patchwork Mon Jun 25 13:13:59 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chris Wilson X-Patchwork-Id: 10486023 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 3CA9360230 for ; Mon, 25 Jun 2018 13:14:16 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2CF111FE82 for ; Mon, 25 Jun 2018 13:14:16 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 212541FF29; Mon, 25 Jun 2018 13:14:16 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00, MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id B65DA1FE82 for ; Mon, 25 Jun 2018 13:14:15 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id EFB4789DED; Mon, 25 Jun 2018 13:14:14 +0000 (UTC) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from fireflyinternet.com (mail.fireflyinternet.com [109.228.58.192]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0CA5D89D87; Mon, 25 Jun 2018 13:14:12 +0000 (UTC) X-Default-Received-SPF: pass (skip=forwardok (res=PASS)) x-ip-name=78.156.65.138; Received: from haswell.alporthouse.com (unverified [78.156.65.138]) by fireflyinternet.com (Firefly Internet (M1)) with ESMTP id 12152278-1500050 for multiple; Mon, 25 Jun 2018 14:14:03 +0100 Received: by haswell.alporthouse.com (sSMTP sendmail emulation); Mon, 25 Jun 2018 14:14:02 +0100 From: Chris Wilson To: intel-gfx@lists.freedesktop.org Date: Mon, 25 Jun 2018 14:13:59 +0100 Message-Id: <20180625131359.16458-2-chris@chris-wilson.co.uk> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180625131359.16458-1-chris@chris-wilson.co.uk> References: <20180625131359.16458-1-chris@chris-wilson.co.uk> X-Originating-IP: 78.156.65.138 X-Country: code=GB country="United Kingdom" ip=78.156.65.138 Subject: [Intel-gfx] [PATCH i-g-t 2/2] lib: Spin fast, retire early X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: igt-dev@lists.freedesktop.org MIME-Version: 1.0 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" X-Virus-Scanned: ClamAV using ClamSMTP When using the pollable spinner, we often want to use it as a means of ensuring the task is running on the GPU before switching to something else. In which case we don't want to add extra delay inside the spinner, but the current 1000 NOPs add on order of 5us, which is often larger than the target latency. v2: Don't change perf_pmu as that is sensitive to the extra CPU latency from a tight GPU spinner. Signed-off-by: Chris Wilson Reviewed-by: Antonio Argenziano #v1 Reviewed-by: Joonas Lahtinen #v1 Cc: Tvrtko Ursulin --- lib/igt_dummyload.c | 3 ++- lib/igt_dummyload.h | 1 + tests/gem_ctx_isolation.c | 1 + tests/gem_eio.c | 1 + tests/gem_exec_latency.c | 4 ++-- 5 files changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/igt_dummyload.c b/lib/igt_dummyload.c index 94efdf745..7beb66244 100644 --- a/lib/igt_dummyload.c +++ b/lib/igt_dummyload.c @@ -199,7 +199,8 @@ emit_recursive_batch(igt_spin_t *spin, * between function calls, that appears enough to keep SNB out of * trouble. See https://bugs.freedesktop.org/show_bug.cgi?id=102262 */ - batch += 1000; + if (!(opts->flags & IGT_SPIN_FAST)) + batch += 1000; /* recurse */ r = &relocs[obj[BATCH].relocation_count++]; diff --git a/lib/igt_dummyload.h b/lib/igt_dummyload.h index c794f2544..e80a12451 100644 --- a/lib/igt_dummyload.h +++ b/lib/igt_dummyload.h @@ -52,6 +52,7 @@ struct igt_spin_factory { #define IGT_SPIN_FENCE_OUT (1 << 0) #define IGT_SPIN_POLL_RUN (1 << 1) +#define IGT_SPIN_FAST (1 << 2) igt_spin_t * __igt_spin_batch_factory(int fd, const struct igt_spin_factory *opts); diff --git a/tests/gem_ctx_isolation.c b/tests/gem_ctx_isolation.c index 2e19e8c03..4325e1c28 100644 --- a/tests/gem_ctx_isolation.c +++ b/tests/gem_ctx_isolation.c @@ -560,6 +560,7 @@ static void inject_reset_context(int fd, unsigned int engine) struct igt_spin_factory opts = { .ctx = gem_context_create(fd), .engine = engine, + .flags = IGT_SPIN_FAST, }; igt_spin_t *spin; diff --git a/tests/gem_eio.c b/tests/gem_eio.c index 0ec1aaec9..3162a3170 100644 --- a/tests/gem_eio.c +++ b/tests/gem_eio.c @@ -160,6 +160,7 @@ static igt_spin_t * __spin_poll(int fd, uint32_t ctx, unsigned long flags) struct igt_spin_factory opts = { .ctx = ctx, .engine = flags, + .flags = IGT_SPIN_FAST, }; if (gem_can_store_dword(fd, opts.engine)) diff --git a/tests/gem_exec_latency.c b/tests/gem_exec_latency.c index 75811f325..de16322a6 100644 --- a/tests/gem_exec_latency.c +++ b/tests/gem_exec_latency.c @@ -65,7 +65,7 @@ poll_ring(int fd, unsigned ring, const char *name) { const struct igt_spin_factory opts = { .engine = ring, - .flags = IGT_SPIN_POLL_RUN, + .flags = IGT_SPIN_POLL_RUN | IGT_SPIN_FAST, }; struct timespec tv = {}; unsigned long cycles; @@ -464,7 +464,7 @@ rthog_latency_on_ring(int fd, unsigned int engine, const char *name, unsigned in #define MMAP_SZ (64 << 10) const struct igt_spin_factory opts = { .engine = engine, - .flags = IGT_SPIN_POLL_RUN, + .flags = IGT_SPIN_POLL_RUN | IGT_SPIN_FAST, }; struct rt_pkt *results; unsigned int engines[16];