From patchwork Thu Mar 22 11:17:11 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tvrtko Ursulin X-Patchwork-Id: 10301259 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 2901A60386 for ; Thu, 22 Mar 2018 11:17:31 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0045429B3D for ; Thu, 22 Mar 2018 11:17:31 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id E91AC29B3F; Thu, 22 Mar 2018 11:17:30 +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=-3.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DRUGS_MUSCLE, RCVD_IN_DNSWL_MED, T_DKIM_INVALID autolearn=no 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 ACD8F29B3D for ; Thu, 22 Mar 2018 11:17:28 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 06EAA6EBD7; Thu, 22 Mar 2018 11:17:28 +0000 (UTC) X-Original-To: Intel-gfx@lists.freedesktop.org Delivered-To: Intel-gfx@lists.freedesktop.org Received: from mail-wm0-x231.google.com (mail-wm0-x231.google.com [IPv6:2a00:1450:400c:c09::231]) by gabe.freedesktop.org (Postfix) with ESMTPS id D46946EBD5 for ; Thu, 22 Mar 2018 11:17:25 +0000 (UTC) Received: by mail-wm0-x231.google.com with SMTP id f125so15294360wme.4 for ; Thu, 22 Mar 2018 04:17:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ursulin-net.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=VwSGCWcLe/ZiM6H5QXN9kBOtwMpnd2LGtSnvrUXU65A=; b=Xzq90oxEKqoslZVhozVetjrf4Bwy27VHr2QBiMb4rfJtRXHHzH4pzIR0vgj+UwvUyj R8klV1Fw2FFrO3qHnfd6+K7gOEhK6TTOxHQJ/laKUR1IZEEEClUA0wZcZcE7grp7Fdfs PqUXx+Yg0iHyuCljq1+FCRAKlrPX0GS/qWu1GCFD6w5zgt/Pc6Qs7kXqY+XfSBxobp27 mDfPdoYspJRs+ygFvs0AY3zqotgUI8XIno3eTc5dQ6feTq6yDiyTImhtzEI6vRWopHaf avh+KN9wFsTY6y7HNmvRQYMHZwn9AYGlYP6Aax2nGipkgvIpZiZHEvD5FotX9f2Y4ipJ rU0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=VwSGCWcLe/ZiM6H5QXN9kBOtwMpnd2LGtSnvrUXU65A=; b=IUTnbBoqijrnwFqnLcz5YcyiKv/FknKLMbub/ALO/9jVJAEDeWhmiJEcx3Dj0Y3jOw b4gpfBhen7wGx6oyWG+bpZAkQXZZbgzL4xV33CkJ3hW2KnGkh3+Eo7s7iNzLIOEgky9X jr3Qxl6a83HROBe3bQjc9HeTe9bjn3gLSHeWZ9UIpuzW1aia5VQRR/Q1Z7X6JMZp84JN VPGIE36fhL4V9cvvQNC1hfWPuNy04kY7PL1+IyVzJ3lT5BNPxZusTOzYD7aLWbBENeDY DTyf+otM20offWYRL0NdIlQUFGCLTriyY+rcq7ABEioBDJ1kQbN1VBDcsn+8YEkkzV7I QsCw== X-Gm-Message-State: AElRT7HylCSYSSENVc1ADEP1fNUM13XvGTZO4x3Z6JI++F0udiWU9RN/ s/PyDEjhzfIgB9da4nciAbutzw== X-Google-Smtp-Source: AIpwx4/TC/eeQKPctW3RYndkf7OyByHMuUm2PPEgza90IVEutPi5bdlrbmCXbyE71LfAI6tNXpZoQA== X-Received: by 10.28.52.83 with SMTP id b80mr2522262wma.90.1521717442364; Thu, 22 Mar 2018 04:17:22 -0700 (PDT) Received: from localhost.localdomain ([95.146.144.186]) by smtp.gmail.com with ESMTPSA id r19sm8056293wmd.48.2018.03.22.04.17.21 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 22 Mar 2018 04:17:21 -0700 (PDT) From: Tvrtko Ursulin X-Google-Original-From: Tvrtko Ursulin To: igt-dev@lists.freedesktop.org Date: Thu, 22 Mar 2018 11:17:11 +0000 Message-Id: <20180322111712.9056-2-tvrtko.ursulin@linux.intel.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180322111712.9056-1-tvrtko.ursulin@linux.intel.com> References: <20180322111712.9056-1-tvrtko.ursulin@linux.intel.com> Subject: [Intel-gfx] [PATCH i-g-t 2/3] tests/gem_eio: Speed up test execution 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: Intel-gfx@lists.freedesktop.org MIME-Version: 1.0 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" X-Virus-Scanned: ClamAV using ClamSMTP From: Tvrtko Ursulin If we stop relying on regular GPU hangs to be detected, but trigger them manually as soon as we know our batch of interest is actually executing on the GPU, we can dramatically speed up various subtests. This is enabled by the pollable spin batch added in the previous patch. Signed-off-by: Tvrtko Ursulin Suggested-by: Chris Wilson Cc: Antonio Argenziano --- Note that the 'wait' subtest is mysteriously hanging for me in the no-op batch send by gem_test_engines, but only on RCS engine. TBD while I am getting some CI results. --- lib.tar | Bin 0 -> 102400 bytes tests/gem_eio.c | 97 ++++++++++++++++++++++++++++++++++++++++---------------- 2 files changed, 70 insertions(+), 27 deletions(-) create mode 100644 lib.tar diff --git a/lib.tar b/lib.tar new file mode 100644 index 0000000000000000000000000000000000000000..ea04fad219a87f2e975852989526f8da4c9b7d6d GIT binary patch literal 102400 zcmeHw>vkJQlBWMsPf=!{kwJ=gUAkMAJc3A2!kPrQASAWM<5LF&3M57#fW}3X+V;H9 zzQ#V;eqTgnR#u_Fi%h%Sv+Oft5m|YSjEIa|M)rFro4wO%+?k!9f9?-kosITaxBb5@ z{O`$=M_=Ke?LR->3jamXqphu-hhJ?!+P@1vWSpFQj!wrdRPU@s-Eopc!*0|*YmHBnwP-qwT7%Eg zC>c-CV0bcZ^#;AcY1Cp@Z4AoF(=+rm8Fr@^t#N|-ov1aL4BNdHx{Nx*_Ut?vOl1yH zx7SZ5QE7UXM9at4VtHkayeIhu&|vB z(29LwL7T&IG)ek>cGANFWYOsy*JRNc2yntI3|unw#o6$j>tRQJNdQ-OHXdML0Ep`z z0(>&=ety&bk!9)54~A3BTBpJtk;&*z z+ow_rHV!aIK26!#s5Nc@14d^n(d4X!Rh}dUU`!9&!6LVCz+rX*iW^LO*el?cOv?Zg zE^@=o^mQdVuJ1SBl^d0)dK?`!>Tj!imAz=We2m}AYtg%E^L71AGeV6Ci)%T-v z?S1rpwYIkwRsMF=s2m?h^#*&d9v&T3D=4nkb`Rd{Rco)JmuOn6H=~22tIZmF-mf>Ja&%N~G^@LB4$6(_=uP9Oeq6yM z_Rw>!TH9}6pvqyT*4&6NG76*0Tl|WSUzZOKI4_P^euH&1IMZmie)PUkef7E-y{;eZ zRZ#e{f(e#i9#nKVEN}OqTs>Ti_R5FlSDa)cs-qWKC2Q(Dqj#?>Eaj+W{NHY~TCZ_I zyY*VLfuCzwZ=>m3zpEZs)}nHwdW;!!V*8Cc1|fLS2xFihG_6&%BZ6M$?so`PxRy6q zzME0BS1BK$yJOjaTBg43^5(sJe^T5^qG!|Id9rc#T~IRVoeo<4Y}sgfHcoI_Wh;K3 zY>t5TEDhTC{<{4*?u^f~#mhYQ+QTshTTUx4quvy(B3qa}Av5*)=`>%R%rkDE^+uDV z@Y6Us%?&VYPy6u&sEE8W`)zU&Pd*RY*+LHc@if7jmhau$TotN5)@^y3nJuCIVsZvb zi#y4rJ?@Q2a!;d!-pRN%{tPxDGzq>lC9imO^d`C(jz3Tom`K}cZ`x0uMte>`kV4z7 zrxC{5I71Oj%Ta$gB`u>cA`siH3Ao)L0UwwQ&y!5&WK-v@4+$6oxqdWmf%$-4b%qx> zS=il4?=(sV!`bQCM)YQYc}`~ooC*EU(OK)GoFX_6KB4c{`EWLnf!)lbK5&B!l>JOb zvvF@Y!%s{p>b81)j0h$?j=%uN=&nD+!pG-VJg3~QZKDDs@p8_rBp$F6^k#v%7Z;(U>_1*G8TqRmp{#MzIUmowp$FHmV%}D-N+J3llY2Cx} z@%LIaDm{#zJzL!2N;+tz_NrQ|#M-u$4o>E#r9T(;!v;Y&ht;^;cp2}${yr*geR|B% zcQD<1I23UH2uP+lHKx(aa&z}}d|dsHO7uK>wDs2~-?}>0SIzjKdfY5cM!i9d19-aP zzZqYM&v6ugil^A9$u#Z{+aJ)$QS)`9Qr?RX-!vtM2vkK1iAC<$(5i$}eTE|yOd%F70*ccwB9FunOh7`bQg`j%5@0&R)F19(VAedt+24mm;0uS{ zE;vH2Ciz(08J-i5g1Q&u-ZXLLEBAi7wG?`lGSXMgHx4w=Jgpc+IsG#?c zWY{gasQ_ZGzi@oC2!E!P!r7ow_;d2@y_{mUPl@olXc>M^(qW4WeAM@&JUZ>RUtPs4{!X4Su$qzd}t^th}G)g`t?UPxzn~Zm&Rr_&C)p&S9IS_U6 z2kLp)aMcQ*$q(C4e$0Ow=rV8+fsmH0 z8?@VEaW^VyztQvO5yYKX`N;7~^b>_BZp8c z=xJ$*xH3-uKI@H>($}TAI?>NROEp0Z(oDNG!0aIa#2uU)+%`WpwomFhXxW+`JopjI z@?ct8`USP{|Gz{@f0D?8ltIWO;xP`XuvdWNnv*2zUOmO7rOW4snT0U1MabIDlXEbl z(tXm@`gev?Yta_82;~!*4}#8C2>{5p!m6w{Z3Cp6?+As`3I0U~zGB)|=^$*VC2VzX z3C(^GV*GJKc`7;)_<&hW6>HMt0xgyVH&H1Dk)Frr=dDp3U$kX2=K3PDP;L)o30L3V+Szgic?dKr zHRw;5ef7SC=*hdIBLQ@OTjhrEnX~2^r7TKMJFo+v{P!Jyp#^8R6x9HgV#E)G}n!Q$&ge4xm(_SP3eyR zR`ymnQ5@%>7HtZVS*$r(GHZ`!g0~C0M{5un=cmKrw@?`+v*_m>#VwJqUNxZ6^}_MU zO!2?ms9LDw6^|Y4UuM06FX_iP`FlxZllAWmAmCyOdp#l_JOFJ$>^+96U5WSJ)f;

UbV6Ed{;vq@6DaFxPr|l<#S$ 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 { + while (!*((volatile bool *)spin->running)) + ; + } else { + igt_debug("__spin_wait - usleep mode\n"); + usleep(500e3); /* Better than nothing! */ + } +} + +/* + * Wedge the GPU when we know our batch is running. + */ +static void wedge_after_running(int fd, igt_spin_t *spin) +{ + __spin_wait(fd, spin); + manual_hang(fd); +} + static void test_wait(int fd) { - igt_hang_t hang; + struct timespec ts = { }; + igt_spin_t *hang; igt_require_gem(fd); + igt_nsec_elapsed(&ts); + /* If the request we wait on completes due to a hang (even for * that request), the user expects the return value to 0 (success). */ - hang = igt_hang_ring(fd, I915_EXEC_DEFAULT); - igt_assert_eq(__gem_wait(fd, hang.handle, -1), 0); - igt_post_hang_ring(fd, hang); + igt_require(i915_reset_control(true)); + hang = __spin_poll(fd, 0, I915_EXEC_DEFAULT); + wedge_after_running(fd, hang); + igt_assert_eq(__gem_wait(fd, hang->handle, -1), 0); + igt_spin_batch_free(fd, hang); /* If the GPU is wedged during the wait, again we expect the return * value to be 0 (success). */ igt_require(i915_reset_control(false)); - hang = igt_hang_ring(fd, I915_EXEC_DEFAULT); - igt_assert_eq(__gem_wait(fd, hang.handle, -1), 0); - igt_post_hang_ring(fd, hang); + hang = __spin_poll(fd, 0, I915_EXEC_DEFAULT); + wedge_after_running(fd, hang); + igt_assert_eq(__gem_wait(fd, hang->handle, -1), 0); + igt_spin_batch_free(fd, hang); igt_require(i915_reset_control(true)); trigger_reset(fd); + + /* HACK for CI */ + igt_assert(igt_nsec_elapsed(&ts) < 5e9); } static void test_suspend(int fd, int state) @@ -181,7 +215,7 @@ static void test_suspend(int fd, int state) /* Check we can suspend when the driver is already wedged */ igt_require(i915_reset_control(false)); - wedgeme(fd); + manual_hang(fd); igt_system_suspend_autoresume(state, SUSPEND_TEST_DEVICES); @@ -209,11 +243,10 @@ static void test_inflight(int fd) int fence[64]; /* conservative estimate of ring size */ gem_quiescent_gpu(fd); - igt_debug("Starting %s on engine '%s'\n", __func__, e__->name); igt_require(i915_reset_control(false)); - hang = __igt_spin_batch_new(fd, 0, engine, 0); + hang = __spin_poll(fd, 0, engine); obj[0].handle = hang->handle; memset(&execbuf, 0, sizeof(execbuf)); @@ -227,6 +260,8 @@ static void test_inflight(int fd) igt_assert(fence[n] != -1); } + wedge_after_running(fd, hang); + igt_assert_eq(__gem_wait(fd, obj[1].handle, -1), 0); for (unsigned int n = 0; n < ARRAY_SIZE(fence); n++) { igt_assert_eq(sync_fence_status(fence[n]), -EIO); @@ -256,7 +291,7 @@ static void test_inflight_suspend(int fd) obj[1].handle = gem_create(fd, 4096); gem_write(fd, obj[1].handle, 0, &bbe, sizeof(bbe)); - hang = __igt_spin_batch_new(fd, 0, 0, 0); + hang = __spin_poll(fd, 0, 0); obj[0].handle = hang->handle; memset(&execbuf, 0, sizeof(execbuf)); @@ -273,6 +308,8 @@ static void test_inflight_suspend(int fd) igt_set_autoresume_delay(30); igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE); + wedge_after_running(fd, hang); + igt_assert_eq(__gem_wait(fd, obj[1].handle, -1), 0); for (unsigned int n = 0; n < ARRAY_SIZE(fence); n++) { igt_assert_eq(sync_fence_status(fence[n]), -EIO); @@ -330,7 +367,7 @@ static void test_inflight_contexts(int fd) igt_debug("Starting %s on engine '%s'\n", __func__, e__->name); igt_require(i915_reset_control(false)); - hang = __igt_spin_batch_new(fd, 0, engine, 0); + hang = __spin_poll(fd, ctx[0], engine); obj[0].handle = hang->handle; memset(&execbuf, 0, sizeof(execbuf)); @@ -345,6 +382,8 @@ static void test_inflight_contexts(int fd) igt_assert(fence[n] != -1); } + wedge_after_running(fd, hang); + igt_assert_eq(__gem_wait(fd, obj[1].handle, -1), 0); for (unsigned int n = 0; n < ARRAY_SIZE(fence); n++) { igt_assert_eq(sync_fence_status(fence[n]), -EIO); @@ -375,7 +414,7 @@ static void test_inflight_external(int fd) fence = igt_cork_plug(&cork, fd); igt_require(i915_reset_control(false)); - hang = __igt_spin_batch_new(fd, 0, 0, 0); + hang = __spin_poll(fd, 0, 0); memset(&obj, 0, sizeof(obj)); obj.handle = gem_create(fd, 4096); @@ -393,6 +432,8 @@ static void test_inflight_external(int fd) fence = execbuf.rsvd2 >> 32; igt_assert(fence != -1); + wedge_after_running(fd, hang); + gem_sync(fd, hang->handle); /* wedged, with an unready batch */ igt_assert(!gem_bo_busy(fd, hang->handle)); igt_assert(gem_bo_busy(fd, obj.handle)); @@ -420,7 +461,7 @@ static void test_inflight_internal(int fd) igt_require(gem_has_exec_fence(fd)); igt_require(i915_reset_control(false)); - hang = __igt_spin_batch_new(fd, 0, 0, 0); + hang = __spin_poll(fd, 0, 0); memset(obj, 0, sizeof(obj)); obj[0].handle = hang->handle; @@ -441,6 +482,8 @@ static void test_inflight_internal(int fd) nfence++; } + wedge_after_running(fd, hang); + igt_assert_eq(__gem_wait(fd, obj[1].handle, -1), 0); while (nfence--) { igt_assert_eq(sync_fence_status(fences[nfence]), -EIO);