Received: by 2002:ac0:950c:0:0:0:0:0 with SMTP id f12csp3823371imc; Thu, 14 Mar 2019 06:13:04 -0700 (PDT) X-Google-Smtp-Source: APXvYqzpD5cILMv8nYK46YLKWtcwl9Eb3lT9gkhBeWaibtE4v+H6NDk1MNu9DoP74OK7G4tsug00 X-Received: by 2002:a17:902:3f83:: with SMTP id a3mr49248454pld.6.1552569184530; Thu, 14 Mar 2019 06:13:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1552569184; cv=none; d=google.com; s=arc-20160816; b=tmizsZnajV0kmqedjXUZc+dWCuTQrSxJ6xVKNUlrq4rXLbm4mtg+KDGr9i2hrENGB+ gQxgCq5LpptZb4jJ1aGMBcv0wavg4No1FTl2SyGhSnZbHVpYIPnvLE2h8cd4Fihaz2hI goMR6Cw7iyJo3NasBEe9DlGkE3wxvQhVq0FUortvRGAayrJ8dwwfMyPRxZRvt4nMgaGg BUTIvAc9SHQpdBHTVMXovOVmeIjfdGM4q/GH74OVtLyHdiigON6BuP9QQtXEJ0TIDCd/ 3QAZqQYRXweUrfPyOx3cAIAQikntoW7eArAqV83v74gNq0VWIrM8LPICQHk2Agek3+xI 2u2Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:subject:cc:to :from:date:user-agent:message-id:dkim-signature; bh=BN4kwSkadNvN9UU38Ue6u/l6aAsV4JY0CbwCqMAflF8=; b=uHOGUNMWT/zh7ezYnoZDSAJRnVk1gmJu2jdX54MrnAydd6Ra+5/TqMRe0vk3w3whZO kpuRqka+wpdrS1N0o6kI9sBqcnjY8Vztjr9UKYpA+u5ouxf67B0fZcealDHgu6+TelZR iYscR/EiDbUMp3rOyvf5KVz2detgs/PFDSglhbsOfn45jeKH+4hiVg/Tc0DHCZRzuMUq rGjts/klIjz9EqmbzJDtRtiWMw1wRHczzHKC6LwXEa04KKPJDvJSo08gIscrH1HqIb2i tRT/MiEvdHa2ss+uglVBLCoXUq3LFZV5sqzOjBzY70hZp7XWZmoaTkRb86eVb7PHEy0F oSQg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@infradead.org header.s=merlin.20170209 header.b=tRMjHAy0; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id u62si5337564pgc.204.2019.03.14.06.12.46; Thu, 14 Mar 2019 06:13:04 -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=fail header.i=@infradead.org header.s=merlin.20170209 header.b=tRMjHAy0; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727531AbfCNNLo (ORCPT + 99 others); Thu, 14 Mar 2019 09:11:44 -0400 Received: from merlin.infradead.org ([205.233.59.134]:59852 "EHLO merlin.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727423AbfCNNLn (ORCPT ); Thu, 14 Mar 2019 09:11:43 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=merlin.20170209; h=Content-Type:MIME-Version:References: Subject:Cc:To:From:Date:Message-Id:Sender:Reply-To:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:List-Id:List-Help: List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=BN4kwSkadNvN9UU38Ue6u/l6aAsV4JY0CbwCqMAflF8=; b=tRMjHAy0U1NXEYfRex8RcYM0u/ ezeyD4prP2lKp0y7rISnhorq/feWLs0WpGGviYJVsWMIpt1WwUu4B3VtTIIDChreuuNKvedJfD4vw /iOExxuPoGgookUa+HgqKQ4MG2yuIz3ucuSssbcLQZ7VHEMPVH2FA55tFIniLeKSUxOT5kvEfWsFJ ujl5o1FR274HyADXkGx47ZnD5s87o49p4XMPDPtZc2EM0M+ErTA+zWGyEoI/oroxYS3IEy2p7b6zj /QNj9/ahmccpfW5S1tICzns0XNRlxcOkt9WgKPMrrYzk2jHu7aUJUpXLskGSu4UKhw/VHFobBi4t5 7RBFlZ/g==; Received: from j217100.upc-j.chello.nl ([24.132.217.100] helo=hirez.programming.kicks-ass.net) by merlin.infradead.org with esmtpsa (Exim 4.90_1 #2 (Red Hat Linux)) id 1h4Q8w-0005RZ-79; Thu, 14 Mar 2019 13:11:30 +0000 Received: by hirez.programming.kicks-ass.net (Postfix, from userid 0) id 66C52203E5149; Thu, 14 Mar 2019 14:11:27 +0100 (CET) Message-Id: <20190314130706.061994422@infradead.org> User-Agent: quilt/0.65 Date: Thu, 14 Mar 2019 14:01:20 +0100 From: Peter Zijlstra To: mingo@kernel.org, eranian@google.com, jolsa@redhat.com Cc: linux-kernel@vger.kernel.org, tonyj@suse.com, nelson.dsouza@intel.com, peterz@infradead.org Subject: [RFC][PATCH 7/8] perf/x86: Optimize x86_schedule_events() References: <20190314130113.919278615@infradead.org> MIME-Version: 1.0 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 Now that cpuc->event_constraint[] is retained, we can avoid calling get_event_constraints() over and over again. Signed-off-by: Peter Zijlstra (Intel) --- arch/x86/events/core.c | 25 +++++++++++++++++++++---- arch/x86/events/intel/core.c | 3 ++- 2 files changed, 23 insertions(+), 5 deletions(-) --- a/arch/x86/events/core.c +++ b/arch/x86/events/core.c @@ -844,6 +844,12 @@ int perf_assign_events(struct event_cons } EXPORT_SYMBOL_GPL(perf_assign_events); +static inline bool is_ht_workaround_active(struct cpu_hw_events *cpuc) +{ + return is_ht_workaround_enabled() && !cpuc->is_fake && + READ_ONCE(cpuc->excl_cntrs->exclusive_present); +} + int x86_schedule_events(struct cpu_hw_events *cpuc, int n, int *assign) { struct event_constraint *c; @@ -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; + } wmin = min(wmin, c->weight); wmax = max(wmax, c->weight); @@ -903,8 +921,7 @@ int x86_schedule_events(struct cpu_hw_ev * N/2 counters can be used. This helps with events with * specific counter constraints. */ - if (is_ht_workaround_enabled() && !cpuc->is_fake && - READ_ONCE(cpuc->excl_cntrs->exclusive_present)) + if (is_ht_workaround_active(cpuc)) gpmax /= 2; unsched = perf_assign_events(cpuc->event_constraint, n, wmin, --- a/arch/x86/events/intel/core.c +++ b/arch/x86/events/intel/core.c @@ -2945,7 +2945,8 @@ intel_get_event_constraints(struct cpu_h * - dynamic constraint: handled by intel_get_excl_constraints() */ c2 = __intel_get_event_constraints(cpuc, idx, event); - if (c1 && (c1->flags & PERF_X86_EVENT_DYNAMIC)) { + if (c1) { + WARN_ON_ONCE(!(c1->flags & PERF_X86_EVENT_DYNAMIC)); bitmap_copy(c1->idxmsk, c2->idxmsk, X86_PMC_IDX_MAX); c1->weight = c2->weight; c2 = c1;