Received: by 2002:ac0:bc90:0:0:0:0:0 with SMTP id a16csp867578img; Wed, 20 Mar 2019 12:33:42 -0700 (PDT) X-Google-Smtp-Source: APXvYqzlZRMrNhDJX/1/RzMsxdvVENKMQ+q1hkrb6vozDk93snatzEIxAaSIfGMwKAJwa91cyOJ6 X-Received: by 2002:a17:902:8c81:: with SMTP id t1mr10294992plo.309.1553110422874; Wed, 20 Mar 2019 12:33:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1553110422; cv=none; d=google.com; s=arc-20160816; b=g32rz8eNzP+yp/GisAoupsdoSNO+urpHh3MH6t/19twuAPsyFkEIXCZA1iC85BTbT8 8oTtDi3Dd4CHxwnqR/igaJ3+7+ePxJHI/AVOR7A9mComsLhLTql27/tFrnuQAyok7f8T Kr9PS0QE0Z7ONdqeD5oyr387x11SdBU2C7jCGYpwZfDqd//ygNXdJdDMmjxSvOYZIYGY Z2F8aUrdoRe+qxskmIHK0f+pN34S2JYa4VAiJkoGeGfWjovLdfIrIxYEp2leukOdEq5H vnO7vlNkJOgAIumoSRRd4scKRtvzWWZFiVA3wAibiTmApEEYuCdkbdRorQ5xniDAcTxG noLg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=lnh4d9FMsUh+puifdzo73TnsQigvSChyiiU4x35+CIQ=; b=kmrYBaKmTy32rof+h0NNFUYE2hT5LeIOW+mrMRwnBtCZPt+qVVmOPQrmTMXMWcCqqG VOUmc0hKpfXVGHpxFyyFp0l/yjWgnNXMPtQ3vNr+A1VuZ7SBJ2Mza7eEpE1g+DI5ItH/ pTTc96X6zuP1XVJodREd/RtP0acH/1zj7BEVScZfQYWIiTcqr92V2xjLUTHpD5KJbIqU bO2fu2F/I0m4tqfd2SR7tPUKAvUnOyLqRkH4J2DqfJ82qkIVxGo+jEd51fsaHRtCMnJT YUG6xNHMxs0SHuwqFYdN21xcCvMeFyL+qmC54O1WqrJyuCVNWFnv3rCKYCnBZnyQ3dlG qtPg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=gWDWWpdJ; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 65si2542924plf.288.2019.03.20.12.33.26; Wed, 20 Mar 2019 12:33:42 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=gWDWWpdJ; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726839AbfCTTaj (ORCPT + 99 others); Wed, 20 Mar 2019 15:30:39 -0400 Received: from mail-vs1-f49.google.com ([209.85.217.49]:34961 "EHLO mail-vs1-f49.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726740AbfCTTaj (ORCPT ); Wed, 20 Mar 2019 15:30:39 -0400 Received: by mail-vs1-f49.google.com with SMTP id e1so2256703vsp.2 for ; Wed, 20 Mar 2019 12:30:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=lnh4d9FMsUh+puifdzo73TnsQigvSChyiiU4x35+CIQ=; b=gWDWWpdJ6kLJBQDd7dxSemaYYlqc64Au3rchGTXh4AKqUJwBv7AqeNXsBE1s3YPkLS A8pWl/do3PDEH0x8A31Ut8Ri0pjsZZo7A7ayt+BGm5yJ84iBKV+0ULjWoNgBCt+iDZhM zd7UyPpD2HWbamROD3W6tkxSnehkkh6xLqBCFo4L14TlUF2ePvFibgNWmUlAj0Qy/9fM SrTFKPY/DayJNXJjXsr0OCXAB/0rOP5JM/Q99GdfGtudgoQoLMCGW/2C5VntAHvjkbPY ZqG4QxEuo+BGQogGCnTdanPmTeqAGim2BMYUVLLj6d8PvrBLWbWCzHx2ocC8XOiL7I1O XdEA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=lnh4d9FMsUh+puifdzo73TnsQigvSChyiiU4x35+CIQ=; b=F+RewTjC1xwway7dY7uGny6bpy1zXgBJ8e+NPoEh09Wk5eY9KffLLaIzNgqRl3Vwc5 60JpyZvVicO9N3kwPNAyBf3tntzEDmFW79bcnVPYxgicSIDfpmWqvQaO5fzDloft13AI PTnK8EwdaU5Nb0J1pnkYr9NtKW+lqvLH96KsajBNHQHnRVxufP4WOJhf2OtKTJTHjZ4R 9H9u8j+oBvX4XSBg/+UBe0ogGSvDp/UXDms3Wa6NQ+GtZx/RnWX+/vDV1VtK8IvhcEQo yXYqC/LCo1MUQh5EOeX2kA3Ygf70lJd6VApa2FeUmG/fQPTkKYAEnVMhLPS32lDYSQL/ OmPA== X-Gm-Message-State: APjAAAW2kS5bKCdfA1699PMqdcsI6pdKYr/yLS5b7xZK1It+ZesXd2J5 3qYEwWHUdDZBUeQDHLBGO4wwPXIV/1xcko4soINZ4w== X-Received: by 2002:a05:6102:d4:: with SMTP id u20mr6126580vsp.101.1553110237738; Wed, 20 Mar 2019 12:30:37 -0700 (PDT) MIME-Version: 1.0 References: <20190314130113.919278615@infradead.org> <20190314130706.061994422@infradead.org> <20190320131108.GG6058@hirez.programming.kicks-ass.net> In-Reply-To: <20190320131108.GG6058@hirez.programming.kicks-ass.net> From: Stephane Eranian Date: Wed, 20 Mar 2019 12:30:25 -0700 Message-ID: Subject: Re: [RFC][PATCH 7/8] perf/x86: Optimize x86_schedule_events() To: Peter Zijlstra Cc: Ingo Molnar , Jiri Olsa , LKML , tonyj@suse.com, nelson.dsouza@intel.com Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Mar 20, 2019 at 6:11 AM Peter Zijlstra wrote: > > On Tue, Mar 19, 2019 at 04:55:16PM -0700, Stephane Eranian wrote: > > On Thu, Mar 14, 2019 at 6:11 AM Peter Zijlstra wrote: > > > @@ -858,8 +864,20 @@ int x86_schedule_events(struct cpu_hw_ev > > > x86_pmu.start_scheduling(cpuc); > > > > > > for (i = 0, wmin = X86_PMC_IDX_MAX, wmax = 0; i < n; i++) { > > > - c = x86_pmu.get_event_constraints(cpuc, i, cpuc->event_list[i]); > > > - cpuc->event_constraint[i] = c; > > > + c = cpuc->event_constraint[i]; > > > + > > > + /* > > > + * Request constraints for new events; or for those events that > > > + * have a dynamic constraint due to the HT workaround -- for > > > + * those the constraint can change due to scheduling activity > > > + * on the other sibling. > > > + */ > > > + if (!c || ((c->flags & PERF_X86_EVENT_DYNAMIC) && > > > + is_ht_workaround_active(cpuc))) { > > > + > > > + c = x86_pmu.get_event_constraints(cpuc, i, cpuc->event_list[i]); > > > + cpuc->event_constraint[i] = c; > > > + } > > > On this one, I think there may be a problem with events with > > shared_regs constraints. > > Hmm... > > > Constraint is dynamic as it depends on other events which share the > > same MSR, yet it is not marked as DYNAMIC. > > it returns &emptyconstraint or a table constraint, depending on register > state. > > > But this may be okay because these other events are all on the same > > CPU and thus scheduled during the same ctx_sched_in(). Yet with the > > swapping in intel_alt_er(), we need to double-check that we cannot > > reuse a constraint which could be stale. > > > I believe this is okay, just double-check. > > I'm not sure I see a problem. > > So if we're the first event on a shared register, we claim the register > and scheduling succeeds (barring other constraints). > > If we're the second event on a shared register (and have conflicting > register state), we get the empty constraint. This _will_ cause > scheduling to fail. We'll not cache the state and punt it back to the > core code. > > So no future scheduling pass will come to see a shared reg constraint > that could've changed. > > Now, there is indeed the intel_alt_er() thing, which slightly > complicates this; then suppose we schedule an event on RSP0, another on > RSP1, then remove the RSP0 one. Even in that case, the remaining RSP1 > event will not change its constraint, since intel_fixup_er() rewrites > the event to be a native RSP1 event. > > So that too reduces to the prior case. > I came the same conclusion later yesterday. I think this is okay. > > That said; I have simplified the above condition to: > > @@ -858,8 +858,17 @@ int x86_schedule_events(struct cpu_hw_ev > x86_pmu.start_scheduling(cpuc); > > for (i = 0, wmin = X86_PMC_IDX_MAX, wmax = 0; i < n; i++) { > - c = x86_pmu.get_event_constraints(cpuc, i, cpuc->event_list[i]); > - cpuc->event_constraint[i] = c; > + c = cpuc->event_constraint[i]; > + > + /* > + * Request constraints for new events; or for those events that > + * have a dynamic constraint -- for those the constraint can > + * change due to external factors (sibling state, allow_tfa). > + */ > + if (!c || (c->flags & PERF_X86_EVENT_DYNAMIC)) { > + c = x86_pmu.get_event_constraints(cpuc, i, cpuc->event_list[i]); > + cpuc->event_constraint[i] = c; > + } > Right now DYNAMIC is only casued by the HT bug, but it could change later on but the logic here would remain. If HT workaround is disabled, then no evnt is tagged with DYNAMIC. > wmin = min(wmin, c->weight); > wmax = max(wmax, c->weight); > > Because any dynamic event can change from one moment to the next. I agree.