From patchwork Tue Aug 14 15:05:18 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tvrtko Ursulin X-Patchwork-Id: 10565825 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 66F4A139A for ; Tue, 14 Aug 2018 15:05:44 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 595B92A05E for ; Tue, 14 Aug 2018 15:05:44 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 4BD232A0E6; Tue, 14 Aug 2018 15:05:44 +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 CB4432A05E for ; Tue, 14 Aug 2018 15:05:43 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id EAF876E29D; Tue, 14 Aug 2018 15:05:42 +0000 (UTC) X-Original-To: Intel-gfx@lists.freedesktop.org Delivered-To: Intel-gfx@lists.freedesktop.org Received: from mail-wm0-x241.google.com (mail-wm0-x241.google.com [IPv6:2a00:1450:400c:c09::241]) by gabe.freedesktop.org (Postfix) with ESMTPS id 46FC56E294 for ; Tue, 14 Aug 2018 15:05:36 +0000 (UTC) Received: by mail-wm0-x241.google.com with SMTP id o11-v6so12569869wmh.2 for ; Tue, 14 Aug 2018 08:05:36 -0700 (PDT) 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=HYWTPlXqjfhprrhG7nkoVNvwBeCh5ti9zY5Z4uIONrA=; b=EZxNWbO6ieGLqbZt0P8U4dsxGpRBCVH4UNg8/7Qawv00PtUz/r12h5GW44SzDBEeMi 5TA53pD8vLVsDRuKObR7mqRJjLEkcijgzK6KtZ9wNkUr9EgIkZRJtdbYGZA3WoRwu0VH JTdSHZBoYnqvIDI2dVmG8tZ8rhfeJdNSeIelF4VNwuf2XKu2k+zgIfsXeSSF4O9Ev+kL tERMAM3OEPkToBYkWD9iG4EbIy9pXJZzg5u4mndMaUNIHC6goF2Gthp5RotVGinnKDDo GmCmn9Gxh7HEL8ODzTdz2NRV5yz2bG6G7zfT2t95uyc+0rpMuJyKoskz4q8trskx4ZKY BaQQ== X-Gm-Message-State: AOUpUlFNJTfH/nIq+/cvdGb9SqjyFyVwQ+YNWBReS//DqhAy2ARVVAvW 70lL+eLhvNh3yQ9rF5Bzl3zWTA== X-Google-Smtp-Source: AA+uWPykxuhM3SUkDEI6fsBDy7hTBpPcgEBbTQKKVXfTIvJnfD37SK2OvwOz5e0fv1JHHZyxBd53Bw== X-Received: by 2002:a1c:2352:: with SMTP id j79-v6mr11159860wmj.124.1534259134780; Tue, 14 Aug 2018 08:05:34 -0700 (PDT) Received: from localhost.localdomain ([95.144.165.93]) by smtp.gmail.com with ESMTPSA id x82-v6sm39942383wmd.11.2018.08.14.08.05.33 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 14 Aug 2018 08:05:34 -0700 (PDT) From: Tvrtko Ursulin X-Google-Original-From: Tvrtko Ursulin To: igt-dev@lists.freedesktop.org Date: Tue, 14 Aug 2018 16:05:18 +0100 Message-Id: <20180814150519.20204-7-tvrtko.ursulin@linux.intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180814150519.20204-1-tvrtko.ursulin@linux.intel.com> References: <20180814150519.20204-1-tvrtko.ursulin@linux.intel.com> Subject: [Intel-gfx] [PATCH i-g-t 6/7] gem_wsim: Per context preemption point control 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 Allow workloads to specify frequency of preemption points per context. New workload command ('X') is added to allow this. Signed-off-by: Tvrtko Ursulin --- benchmarks/gem_wsim.c | 84 ++++++++++++++++++++++++++++++++++++++++-- benchmarks/wsim/README | 18 ++++++++- 2 files changed, 98 insertions(+), 4 deletions(-) diff --git a/benchmarks/gem_wsim.c b/benchmarks/gem_wsim.c index f60c086a3f1e..fd268b3ab456 100644 --- a/benchmarks/gem_wsim.c +++ b/benchmarks/gem_wsim.c @@ -83,7 +83,8 @@ enum w_type QD_THROTTLE, SW_FENCE, SW_FENCE_SIGNAL, - CTX_PRIORITY + CTX_PRIORITY, + PREEMPTION }; struct deps @@ -122,6 +123,7 @@ struct w_step unsigned int idx; struct igt_list rq_link; unsigned int request; + unsigned int preempt_us; struct drm_i915_gem_execbuffer2 eb; struct drm_i915_gem_exec_object2 *obj; @@ -441,6 +443,42 @@ parse_workload(struct w_arg *arg, unsigned int flags, struct workload *app_w) } else if (!strcmp(field, "f")) { step.type = SW_FENCE; goto add_step; + } else if (!strcmp(field, "X")) { + unsigned int nr = 0; + while ((field = strtok_r(fstart, ".", &fctx)) != + NULL) { + tmp = atoi(field); + if (tmp <= 0 && nr == 0) { + if (verbose) + fprintf(stderr, + "Invalid context at step %u!\n", + nr_steps); + return NULL; + } else if (tmp < 0 && nr == 1) { + if (verbose) + fprintf(stderr, + "Invalid preemption period at step %u!\n", + nr_steps); + return NULL; + } + + if (nr == 0) { + step.context = tmp; + } else if (nr == 1) { + step.period = tmp; + } else { + if (verbose) + fprintf(stderr, + "Invalid preemption format at step %u!\n", + nr_steps); + return NULL; + } + + nr++; + } + + step.type = PREEMPTION; + goto add_step; } tmp = atoi(field); @@ -686,11 +724,14 @@ static unsigned long get_bb_sz(unsigned int duration) static void init_bb(struct w_step *w, unsigned int flags) { - /* Preemption point every 100us. */ - const unsigned int arb_period = get_bb_sz(100) / sizeof(uint32_t); + const unsigned int arb_period = + get_bb_sz(w->preempt_us) / sizeof(uint32_t); unsigned int i; uint32_t *ptr; + if (!arb_period) + return; + gem_set_domain(fd, w->bb_handle, I915_GEM_DOMAIN_WC, I915_GEM_DOMAIN_WC); @@ -965,6 +1006,41 @@ prepare_workload(unsigned int id, struct workload *wrk, unsigned int flags) } } + /* Record default preemption. */ + for (i = 0, w = wrk->steps; i < wrk->nr_steps; i++, w++) { + if (w->type == BATCH) + w->preempt_us = 100; + } + + /* + * Scan for contexts with modified preemption config and record their + * preemption period for the following steps belonging to the same + * context. + */ + for (i = 0, w = wrk->steps; i < wrk->nr_steps; i++, w++) { + struct w_step *w2; + int j; + + if (w->type != PREEMPTION) + continue; + + for (j = i + 1; j < wrk->nr_steps; j++) { + w2 = &wrk->steps[j]; + + if (w2->context != w->context) + continue; + else if (w2->type == PREEMPTION) + break; + else if (w2->type != BATCH) + continue; + + w2->preempt_us = w->period; + } + } + + /* + * Allocate batch buffers. + */ for (i = 0, w = wrk->steps; i < wrk->nr_steps; i++, w++) { unsigned int _flags = flags; enum intel_engine_id engine = w->engine; @@ -1869,6 +1945,8 @@ static void *run_workload(void *data) w->priority; } continue; + } else if (w->type == PREEMPTION) { + continue; } if (do_sleep || w->type == PERIOD) { diff --git a/benchmarks/wsim/README b/benchmarks/wsim/README index fd9bff3401af..205cd6c93afb 100644 --- a/benchmarks/wsim/README +++ b/benchmarks/wsim/README @@ -3,7 +3,7 @@ Workload descriptor format ctx.engine.duration_us.dependency.wait,... ..[-].[/][...].<0|1>,... -P.. +P|X.. d|p|s|t|q|a.,... f @@ -24,6 +24,7 @@ Additional workload steps are also supported: 'f' - Create a sync fence. 'a' - Advance the previously created sync fence. 'P' - Context priority. + 'X' - Context preemption control. Engine ids: RCS, BCS, VCS, VCS1, VCS2, VECS @@ -128,3 +129,18 @@ is submitted against it which depends on the batch from context 1. Context priority command is executed at workload runtime and is valid until overriden by another (optional) same context priority change. Actual driver ioctls are executed only if the priority level has changed for the context. + +Context preemption control +-------------------------- + + X.1.0 + 1.RCS.1000.0.0 + X.1.500 + 1.RCS.1000.0.0 + +Context 1 is marked as non-preemptable batches and a batch is sent against 1. +The same context is then marked to have batches which can be preempted every +500us and another batch is submitted. + +Same as with context priority, context preemption commands are valid until +optionally overriden by another preemption control change on the same context.