Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp2015559ybl; Thu, 19 Dec 2019 06:44:45 -0800 (PST) X-Google-Smtp-Source: APXvYqwijXEbjZLrVABcIQjVLbAln/tNSpaTINetcDfBIROYdgqkHL2eHttSvi6YhZe+adh9JG23 X-Received: by 2002:a9d:402:: with SMTP id 2mr6044008otc.357.1576766685452; Thu, 19 Dec 2019 06:44:45 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1576766685; cv=none; d=google.com; s=arc-20160816; b=W9Gif8oG21BRehnnxSZiqxyH1qpdZ1RPdGJnRrk5sXiimNyGfEKOcZOPoaGk7NiXx/ cBNDzEWkZlHR8IpjP9jAFWMp2JS+WtFMThSOo+1Vd8V3qPVFWrkx7klsHLeFAbbcgGQB YauuwtcYMlwYymdluFEgpCvCwaqoZ2vdr0uIhEkAQh/vql5ImLiwDd9mFEbMVuuqA4fZ VooiNs7xT7FbtITz6zM/qJRTt5cNDj9mN2PDEYayIgBmqdCsvIsFPRLjkGsoThxUpgkD yuN3RacQ7C+oy/AHU3wqhQmhzZX7t1g/A2y+EThxW9wUgC4PNfE/iCMbas16o8Rua9Uv LRyw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:subject:cc:to:from:date; bh=l7w8oSa5f7u8ZgSDZafYP6LxUFm6QP9cZ+uCcPruqPM=; b=tWhMgQUlsCoxs77dF9Qm9ok9W7iiFDIYm6niNsRtZMvicDyC9aiR+0cVUfwmeiB2at pxYQ0dXtR9ybJMnbR5+NejwCG29mkY7k0+g2N8FR8EgXFqSFVJA9mO0CIaYcB7hd1H68 f38x8RwPYchMJNKhb7HoldJutWfybSwrF+jk9WTqsmvB6GzsMs1ARgVK9cyEvCWUEisr ztx60Z7Os5R8Q7g63RdUABw1FY8AF8MQCtztaEVns73+teusfnAyMyBPR0OjI2U2HYm5 oIJP9TobYC6ZghyLInx9mQo9AnV8dRdBMU+F81+eyi0H3WwS2/da4OM2Hlo9co1yACxx 43zw== ARC-Authentication-Results: i=1; mx.google.com; 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 11si4523895otz.101.2019.12.19.06.44.33; Thu, 19 Dec 2019 06:44:45 -0800 (PST) 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; 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 S1726797AbfLSOne (ORCPT + 99 others); Thu, 19 Dec 2019 09:43:34 -0500 Received: from mail.kernel.org ([198.145.29.99]:58200 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726701AbfLSOne (ORCPT ); Thu, 19 Dec 2019 09:43:34 -0500 Received: from gandalf.local.home (cpe-66-24-58-225.stny.res.rr.com [66.24.58.225]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id DC52521D7D; Thu, 19 Dec 2019 14:43:32 +0000 (UTC) Date: Thu, 19 Dec 2019 09:43:30 -0500 From: Steven Rostedt To: Kirill Tkhai Cc: Peter Zijlstra , mingo@redhat.com, juri.lelli@redhat.com, vincent.guittot@linaro.org, dietmar.eggemann@arm.com, bsegall@google.com, mgorman@suse.de, linux-kernel@vger.kernel.org Subject: Re: [PATCH RFC] sched: Micro optimization in pick_next_task() and in check_preempt_curr() Message-ID: <20191219094330.0e44c748@gandalf.local.home> In-Reply-To: References: <157675913272.349305.8936736338884044103.stgit@localhost.localdomain> <20191219131242.GK2827@hirez.programming.kicks-ass.net> <20191219140252.GS2871@hirez.programming.kicks-ass.net> X-Mailer: Claws Mail 3.17.3 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, 19 Dec 2019 17:25:40 +0300 Kirill Tkhai wrote: > (17:19:25) nbjoerg: but it is not guarenteed behavior > (17:19:50) nbjoerg: if for some strange reason you really need to enforce relative orders of global objects, put them in consecutively named sections Which appears to work. I tried this patch on top of yours: Not sure how this does with locality though. -- Steve diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h index e00f41aa8ec4..ff12a422ff19 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h @@ -108,6 +108,13 @@ #define SBSS_MAIN .sbss #endif +#define SCHED_DATA \ + *(__idle_sched_class) \ + *(__fair_sched_class) \ + *(__rt_sched_class) \ + *(__dl_sched_class) \ + *(__stop_sched_class) + /* * Align to a 32 byte boundary equal to the * alignment gcc 4.5 uses for a struct @@ -308,6 +315,7 @@ #define DATA_DATA \ *(.xiptext) \ *(DATA_MAIN) \ + SCHED_DATA \ *(.ref.data) \ *(.data..shared_aligned) /* percpu related */ \ MEM_KEEP(init.data*) \ diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c index 43323f875cb9..5abdbe569f93 100644 --- a/kernel/sched/deadline.c +++ b/kernel/sched/deadline.c @@ -2428,7 +2428,8 @@ static void prio_changed_dl(struct rq *rq, struct task_struct *p, } } -const struct sched_class dl_sched_class = { +const struct sched_class dl_sched_class + __attribute__((section("__dl_sched_class"))) = { .next = &rt_sched_class, .enqueue_task = enqueue_task_dl, .dequeue_task = dequeue_task_dl, diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 08a233e97a01..e745fe0e0cd3 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -10745,7 +10745,8 @@ static unsigned int get_rr_interval_fair(struct rq *rq, struct task_struct *task /* * All the scheduling class methods: */ -const struct sched_class fair_sched_class = { +const struct sched_class fair_sched_class + __attribute__((section("__fair_sched_class"))) = { .next = &idle_sched_class, .enqueue_task = enqueue_task_fair, .dequeue_task = dequeue_task_fair, diff --git a/kernel/sched/idle.c b/kernel/sched/idle.c index ffa959e91227..700a9c826f0e 100644 --- a/kernel/sched/idle.c +++ b/kernel/sched/idle.c @@ -454,7 +454,8 @@ static void update_curr_idle(struct rq *rq) /* * Simple, special scheduling class for the per-CPU idle tasks: */ -const struct sched_class idle_sched_class = { +const struct sched_class idle_sched_class + __attribute__((section("__idle_sched_class"))) = { /* .next is NULL */ /* no enqueue/yield_task for idle tasks */ diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c index e591d40fd645..5d3f9bcddaeb 100644 --- a/kernel/sched/rt.c +++ b/kernel/sched/rt.c @@ -2354,7 +2354,8 @@ static unsigned int get_rr_interval_rt(struct rq *rq, struct task_struct *task) return 0; } -const struct sched_class rt_sched_class = { +const struct sched_class rt_sched_class + __attribute__((section("__rt_sched_class"))) = { .next = &fair_sched_class, .enqueue_task = enqueue_task_rt, .dequeue_task = dequeue_task_rt, diff --git a/kernel/sched/stop_task.c b/kernel/sched/stop_task.c index 4c9e9975684f..03bc7530ff75 100644 --- a/kernel/sched/stop_task.c +++ b/kernel/sched/stop_task.c @@ -115,7 +115,8 @@ static void update_curr_stop(struct rq *rq) /* * Simple, special scheduling class for the per-CPU stop tasks: */ -const struct sched_class stop_sched_class = { +const struct sched_class stop_sched_class + __attribute__((section("__stop_sched_class"))) = { .next = &dl_sched_class, .enqueue_task = enqueue_task_stop,