Received: by 2002:a05:6a10:22f:0:0:0:0 with SMTP id 15csp1207273pxk; Fri, 2 Oct 2020 04:03:31 -0700 (PDT) X-Google-Smtp-Source: ABdhPJygDmJqeM22tXHOOPPMPCOEeYIK8M3S2UqU/bMUKyuf44dAqxkE4i0maBxlv1Pdyk5EENSL X-Received: by 2002:aa7:d353:: with SMTP id m19mr1605098edr.275.1601636610976; Fri, 02 Oct 2020 04:03:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1601636610; cv=none; d=google.com; s=arc-20160816; b=J2P79Dpebbq3MgIjO+DkUA8l06yv6AtmQOyEbZG8grhvAbiJm48Lii+BIYuE5iYEsv zTsWgh/ByTO9dpZIWmr/smjhk8aa0FWub3WZPb+fBu1+e1NrWw2SzBFyQPt2UZ9BsqJb YzjdtKZrsH5trI1Nabi/xSWT7jm4DVgeS2+lcP4z/TEaGbml/NRSWqvabHrgcMHnMGHS m+hB2Kf4K1BW5UVHwavYU0gLcFxKlVUoXURwKtctnevOooNiVyI4I/KKDSe9IMp+tBtf 6+dz1rV/PQGXMxZysAkG16fIyMxp8jF9LERzeqLYbRSPd6A12rlK/W6ErHmdqVmpfyAd q6Ug== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:user-agent:in-reply-to:content-disposition :mime-version:references:message-id:subject:cc:to:from:date; bh=QrwPbDiVIUsEc/NCjdd93/mxL6BC77GJn1gQTOk3QsE=; b=vXYC/yoEvf4hQ6M/A4solRT1LIRqmqeu5rQikt8yjkD64dbnNWo/wpAtdjXmdEK5WT u4rqbWhHFNl2O+OOibUq187+woRaQDFX9mTIfnxHpLmX7S1N0GYSF8BesIkjkuuvWAyO wx0cCRSt6d2DK37VD2iEbbW6wUMVkCTgM+cmxrjrI3bEZnoucx83zSsq7T/P+D2PppTv 1o7F253hrObpHDb1NR3i1CrRwO8Pl3wFWRrcLcPGjfS1xvSCsl5k2b3/6IDhdXzjyEOs 8CWeKq4PE7v9Kj5k0zCcJO/hoCfb0OoSxL8/9jsODIS5hiqdR93W4Jp3UZc/LeQcXgxu 92LQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id ly27si817632ejb.672.2020.10.02.04.03.06; Fri, 02 Oct 2020 04:03:30 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387483AbgJBLBK (ORCPT + 99 others); Fri, 2 Oct 2020 07:01:10 -0400 Received: from foss.arm.com ([217.140.110.172]:60582 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725953AbgJBLBK (ORCPT ); Fri, 2 Oct 2020 07:01:10 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id A73451063; Fri, 2 Oct 2020 04:01:09 -0700 (PDT) Received: from e107158-lin.cambridge.arm.com (e107158-lin.cambridge.arm.com [10.1.195.21]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 8D8C93F73B; Fri, 2 Oct 2020 04:01:08 -0700 (PDT) Date: Fri, 2 Oct 2020 12:01:06 +0100 From: Qais Yousef To: Rob Clark Cc: dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, Tejun Heo , timmurray@google.com, Daniel Vetter , Rob Clark , open list Subject: Re: [PATCH v2 0/3] drm: commit_work scheduling Message-ID: <20201002110105.e56qrvzoqfioi4hs@e107158-lin.cambridge.arm.com> References: <20200930211723.3028059-1-robdclark@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <20200930211723.3028059-1-robdclark@gmail.com> User-Agent: NeoMutt/20171215 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 09/30/20 14:17, Rob Clark wrote: > From: Rob Clark > > The android userspace treats the display pipeline as a realtime problem. > And arguably, if your goal is to not miss frame deadlines (ie. vblank), > it is. (See https://lwn.net/Articles/809545/ for the best explaination > that I found.) > > But this presents a problem with using workqueues for non-blocking > atomic commit_work(), because the SCHED_FIFO userspace thread(s) can > preempt the worker. Which is not really the outcome you want.. once > the required fences are scheduled, you want to push the atomic commit > down to hw ASAP. For me thees 2 properties 1. Run ASAP 2. Finish the work un-interrupted Scream the workers need to be SCHED_FIFO by default. CFS can't give you these guarantees. IMO using sched_set_fifo() for these workers is the right thing. > > But the decision of whether commit_work should be RT or not really > depends on what userspace is doing. For a pure CFS userspace display > pipeline, commit_work() should remain SCHED_NORMAL. I'm not sure I agree with this. I think it's better to characterize tasks based on their properties/requirements rather than what the rest of the userspace is using. I do appreciate that maybe some of these tasks have varying requirements during their life time. e.g: they have RT property during specific critical section but otherwise are CFS tasks. I think the UI thread in Android behaves like that. It's worth IMO trying that approach I pointed out earlier to see if making RT try to pick an idle CPU rather than preempt CFS helps. Not sure if it'd be accepted but IMHO it's a better direction to consider and discuss. Or maybe you can wrap userspace pipeline critical section lock such that any task holding it will automatically be promoted to SCHED_FIFO and then demoted to CFS once it releases it. Haven't worked with display pipelines before, so hopefully this makes sense :-) Thanks -- Qais Yousef > > To handle this, convert non-blocking commit_work() to use per-CRTC > kthread workers, instead of system_unbound_wq. Per-CRTC workers are > used to avoid serializing commits when userspace is using a per-CRTC > update loop. And the last patch exposes the task id to userspace as > a CRTC property, so that userspace can adjust the priority and sched > policy to fit it's needs. > > > v2: Drop client cap and in-kernel setting of priority/policy in > favor of exposing the kworker tid to userspace so that user- > space can set priority/policy. > > Rob Clark (3): > drm/crtc: Introduce per-crtc kworker > drm/atomic: Use kthread worker for nonblocking commits > drm: Expose CRTC's kworker task id > > drivers/gpu/drm/drm_atomic_helper.c | 13 ++++++++---- > drivers/gpu/drm/drm_crtc.c | 14 +++++++++++++ > drivers/gpu/drm/drm_mode_config.c | 14 +++++++++++++ > drivers/gpu/drm/drm_mode_object.c | 4 ++++ > include/drm/drm_atomic.h | 31 +++++++++++++++++++++++++++++ > include/drm/drm_crtc.h | 8 ++++++++ > include/drm/drm_mode_config.h | 9 +++++++++ > include/drm/drm_property.h | 9 +++++++++ > 8 files changed, 98 insertions(+), 4 deletions(-) > > -- > 2.26.2 >