2022-03-15 10:43:10

by Ingo Molnar

[permalink] [raw]
Subject: [PATCH 09/15] sched/headers: Introduce kernel/sched/build_policy.c and build multiple .c files there

Similarly to kernel/sched/build_utility.c, collect all 'scheduling policy' related
source code files into kernel/sched/build_policy.c:

kernel/sched/idle.c

kernel/sched/rt.c

kernel/sched/cpudeadline.c
kernel/sched/pelt.c

kernel/sched/cputime.c
kernel/sched/deadline.c

With the exception of fair.c, which we continue to build as a separate file
for build efficiency and parallelism reasons.

Signed-off-by: Ingo Molnar <[email protected]>
Reviewed-by: Peter Zijlstra <[email protected]>
---
kernel/sched/Makefile | 2 +-
kernel/sched/build_policy.c | 29 +++++++++++++++++++++++++++++
kernel/sched/cpudeadline.c | 1 -
kernel/sched/cputime.c | 1 -
kernel/sched/deadline.c | 2 --
kernel/sched/idle.c | 3 ---
kernel/sched/pelt.c | 4 ----
kernel/sched/rt.c | 3 ---
kernel/sched/sched.h | 8 ++++++++
9 files changed, 38 insertions(+), 15 deletions(-)

diff --git a/kernel/sched/Makefile b/kernel/sched/Makefile
index 4a4785cb3cd2..976092b7bd45 100644
--- a/kernel/sched/Makefile
+++ b/kernel/sched/Makefile
@@ -30,5 +30,5 @@ endif
#
obj-y += core.o
obj-y += fair.o
+obj-y += build_policy.o
obj-y += build_utility.o
-obj-y += idle.o rt.o deadline.o cputime.o cpudeadline.o pelt.o
diff --git a/kernel/sched/build_policy.c b/kernel/sched/build_policy.c
new file mode 100644
index 000000000000..6bb384ddcfab
--- /dev/null
+++ b/kernel/sched/build_policy.c
@@ -0,0 +1,29 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * These are the scheduling policy related scheduler files, built
+ * in a single compilation unit for build efficiency reasons.
+ *
+ * ( Incidentally, the size of the compilation unit is roughly
+ * comparable to core.c and fair.c, the other two big
+ * compilation units. This helps balance build time, while
+ * coalescing source files to amortize header inclusion
+ * cost. )
+ *
+ * core.c and fair.c are built separately.
+ */
+
+#include "sched.h"
+#include "pelt.h"
+
+#include "idle.c"
+
+#include "rt.c"
+
+#ifdef CONFIG_SMP
+# include "cpudeadline.c"
+# include "pelt.c"
+#endif
+
+#include "cputime.c"
+#include "deadline.c"
+
diff --git a/kernel/sched/cpudeadline.c b/kernel/sched/cpudeadline.c
index 0e196f0de492..02d970a879ed 100644
--- a/kernel/sched/cpudeadline.c
+++ b/kernel/sched/cpudeadline.c
@@ -6,7 +6,6 @@
*
* Author: Juri Lelli <[email protected]>
*/
-#include "sched.h"

static inline int parent(int i)
{
diff --git a/kernel/sched/cputime.c b/kernel/sched/cputime.c
index b7ec42732b28..78a233d43757 100644
--- a/kernel/sched/cputime.c
+++ b/kernel/sched/cputime.c
@@ -2,7 +2,6 @@
/*
* Simple CPU accounting cgroup controller
*/
-#include "sched.h"

#ifdef CONFIG_IRQ_TIME_ACCOUNTING

diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c
index d2c072b0ef01..fca2d7de4d3d 100644
--- a/kernel/sched/deadline.c
+++ b/kernel/sched/deadline.c
@@ -15,8 +15,6 @@
* Michael Trimarchi <[email protected]>,
* Fabio Checconi <[email protected]>
*/
-#include "sched.h"
-#include "pelt.h"

struct dl_bandwidth def_dl_bandwidth;

diff --git a/kernel/sched/idle.c b/kernel/sched/idle.c
index d17b0a5ce6ac..8f8b5020e76a 100644
--- a/kernel/sched/idle.c
+++ b/kernel/sched/idle.c
@@ -6,9 +6,6 @@
* (NOTE: these are not related to SCHED_IDLE batch scheduled
* tasks which are handled in sched/fair.c )
*/
-#include "sched.h"
-
-#include <trace/events/power.h>

/* Linker adds these: start and end of __cpuidle functions */
extern char __cpuidle_text_start[], __cpuidle_text_end[];
diff --git a/kernel/sched/pelt.c b/kernel/sched/pelt.c
index a554e3bbab2b..0f310768260c 100644
--- a/kernel/sched/pelt.c
+++ b/kernel/sched/pelt.c
@@ -24,10 +24,6 @@
* Author: Vincent Guittot <[email protected]>
*/

-#include <linux/sched.h>
-#include "sched.h"
-#include "pelt.h"
-
/*
* Approximate:
* val * y^n, where y^32 ~= 0.5 (~1 scheduling period)
diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c
index 7b4f4fbbb404..ff4c044aed12 100644
--- a/kernel/sched/rt.c
+++ b/kernel/sched/rt.c
@@ -3,9 +3,6 @@
* Real-Time Scheduling Class (mapped to the SCHED_FIFO and SCHED_RR
* policies)
*/
-#include "sched.h"
-
-#include "pelt.h"

int sched_rr_timeslice = RR_TIMESLICE;
int sysctl_sched_rr_timeslice = (MSEC_PER_SEC / HZ) * RR_TIMESLICE;
diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h
index 79c7a8a2be65..f7d10b98e911 100644
--- a/kernel/sched/sched.h
+++ b/kernel/sched/sched.h
@@ -13,6 +13,7 @@
#include <linux/prctl.h>
#include <linux/ptrace_api.h>
#include <linux/gfp_api.h>
+#include <linux/posix-timers.h>
#include <linux/sched/clock.h>
#include <linux/workqueue_api.h>
#include <linux/tick.h>
@@ -113,8 +114,11 @@
#include <linux/cpumask_api.h>
#include <linux/ctype.h>
#include <linux/file.h>
+#include <linux/hrtimer_api.h>
+#include <linux/interrupt.h>
#include <linux/jiffies.h>
#include <linux/kref_api.h>
+#include <linux/ktime_api.h>
#include <linux/lockdep_api.h>
#include <linux/module.h>
#include <linux/mutex_api.h>
@@ -126,12 +130,16 @@
#include <linux/sched/loadavg.h>
#include <linux/sched/mm.h>
#include <linux/sched/rseq_api.h>
+#include <linux/sched/signal.h>
#include <linux/seq_file.h>
#include <linux/seqlock.h>
+#include <linux/softirq.h>
+#include <linux/spinlock_api.h>
#include <linux/syscalls_api.h>
#include <linux/syscalls.h>
#include <linux/topology.h>
#include <linux/types.h>
+#include <linux/u64_stats_sync_api.h>
#include <linux/uaccess.h>
#include <linux/wait_api.h>
#include <linux/workqueue_api.h>
--
2.32.0


2022-08-23 08:07:49

by Hui Su

[permalink] [raw]
Subject: Re: [PATCH 09/15] sched/headers: Introduce kernel/sched/build_policy.c and build multiple .c files there

Hi Ingo, Since commit f96eca432015ddc1b621632488ebc345bca06791 merged, the
scripts/clang-tools/gen_compile_commands.py can't work very well.
In this patch the build_policy.c and build_utility.c include kernel/sched/xxx.c(
such as rt.c idle.c...), so it compile the build_utility.o build_policy.o directly,
and it won't generate kernel/sched/xxx.c(such as rt.o idle.o), so the gen_compile_commands.py
can't work.
It will report "[8/23/2022, 3:24:06 PM] "rt.c" not found in "${workspaceFolder}/compile_commands.json".
'includePath' from c_cpp_properties.json in folder 'linux' will be used for this file instead.".
And i test the kdump & crash tools, it can find the functions by line in kernel/sched/xxx.c(
such as rt.c idle.c), it works well.
I can't solve this report error, so i want to get help.
Maybe we change the gen_compile_commands.py code can solve this problem or
can we revert this change?(3.9% build wall time decrease really matter? it will
destory all tool's parse result which depends on the compiled file result).

2022-08-24 15:55:12

by Thomas Gleixner

[permalink] [raw]
Subject: Re: [PATCH 09/15] sched/headers: Introduce kernel/sched/build_policy.c and build multiple .c files there

On Tue, Aug 23 2022 at 15:47, suhui kernel wrote:
> Hi Ingo, Since commit f96eca432015ddc1b621632488ebc345bca06791 merged, the
> scripts/clang-tools/gen_compile_commands.py can't work very well.
>
> In this patch the build_policy.c and build_utility.c include kernel/sched/xxx.c(
> such as rt.c idle.c...), so it compile the build_utility.o build_policy.o directly,
> and it won't generate kernel/sched/xxx.c(such as rt.o idle.o), so the gen_compile_commands.py
> can't work.

gen_compile_commands.py works perfectly fine and generates the entries
for build_policy.o and built_utility.o as expected.

gen_compile_commands.py scans the build tree for .cmd files and extracts
the command line from those files into the the json file. As there is no
.cmd file for the .c files which are included into build_*.c there wont
be entries in the json file either.

> It will report "[8/23/2022, 3:24:06 PM] "rt.c" not found in "${workspaceFolder}/compile_commands.json".
> 'includePath' from c_cpp_properties.json in folder 'linux' will be
> used for this file instead.".

No idea where this message comes from, but certainly not from
gen_compile_commands.py because that generates the file.

The clang-tidy kernel build target generates and uses that file and that
works perfectly fine.

So what exactly broke?

Thanks,

tglx