Compare commits
1 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
13e3a3ac21 |
@@ -163,6 +163,24 @@ _acs_override="false"
|
||||
# This can be buggy and isn't recommended on a production machine, also enabling this option will not allow you to enable MGLRU.
|
||||
_bcachefs="false"
|
||||
|
||||
# Set to "true" to add multi-generational LRU framework support on kernel 5.18+ - Improves memory pressure handling - https://lore.kernel.org/lkml/20220706220022.968789-1-yuzhao@google.com/
|
||||
# Older kernel versions might have a patch available in the community-patches repo
|
||||
# ! This option will be disabled when bcachefs is enabled for now !
|
||||
_mglru="true"
|
||||
|
||||
# Set to "true" to enable support for fsync, an experimental replacement for esync found in Valve Proton 4.11+ - https://steamcommunity.com/games/221410/announcements/detail/2957094910196249305
|
||||
# Can be enabled alongside _futex_waitv on 5.13+ to use it as a fallback for older Proton builds
|
||||
_fsync="true"
|
||||
|
||||
# Set to "true" to enable support for futex2, an experimental interface that can be used by proton-tkg and proton 5.13 experimental through Fsync - Can be enabled alongside fsync to use it as a fallback
|
||||
# https://gitlab.collabora.com/tonyk/linux/-/tree/futex2-dev
|
||||
_futex2="true"
|
||||
|
||||
# Set to "true" to enable backported patches to add support for the futex_waitv() syscall, a new interface for fsync. It will appear in mainline at Linux 5.16 release and requires a wine/proton with builtin support for it. It's expected to be available in Valve Proton 6.3 stable soon - https://github.com/ValveSoftware/wine/pull/128
|
||||
# !! Disables futex2 interfaces support !!
|
||||
# https://github.com/andrealmeid/futex_waitv_patches
|
||||
_futex_waitv="false"
|
||||
|
||||
# Set to "true" to enable support for winesync, an experimental replacement for esync - requires patched wine - https://repo.or.cz/linux/zf.git/shortlog/refs/heads/winesync4
|
||||
# ! Can't be used on multiple kernels installed side-by-side, which will require https://aur.archlinux.org/packages/winesync-dkms/ instead of this option !
|
||||
_winesync="false"
|
||||
@@ -190,6 +208,9 @@ _compileroptlevel="2"
|
||||
# - "generic_v4" (depends on GCC11 - to share the package between machines with different CPU µarch supporting at least x86-64-v4
|
||||
_processor_opt="skylake"
|
||||
|
||||
# MuQSS only - Make IRQ threading compulsory (FORCE_IRQ_THREADING) - Default is "false"
|
||||
_irq_threading="false"
|
||||
|
||||
# CacULE only - Enable Response Driven Balancer, an experimental load balancer for CacULE
|
||||
_cacule_rdb="false"
|
||||
|
||||
@@ -206,6 +227,10 @@ _smt_nice="true"
|
||||
# Trust the CPU manufacturer to initialize Linux's CRNG (RANDOM_TRUST_CPU) - Kernel default is "false"
|
||||
_random_trust_cpu="true"
|
||||
|
||||
# MuQSS only - CPU scheduler runqueue sharing - No sharing (RQ_NONE), SMT (hyperthread) siblings (RQ_SMT), Multicore siblings (RQ_MC), Symmetric Multi-Processing (RQ_SMP), NUMA (RQ_ALL)
|
||||
# Valid values are "none", "smt", "mc", "mc-llc"(for zen), "smp", "all" - Kernel default is "smt"
|
||||
_runqueue_sharing=""
|
||||
|
||||
# Timer frequency - "100" "250" "300" "500" "750" "1000" ("2000" is available for cacule cpusched only) - More options available in kernel config prompt when left empty depending on selected cpusched with the default option pointed with a ">" (2000 for cacule, 100 for muqss and 1000 for other cpu schedulers)
|
||||
_timer_freq="500"
|
||||
|
||||
@@ -239,41 +264,14 @@ _custom_pkgbase=""
|
||||
# If left empty, it will use "-tkg-${_cpusched}${_compiler}" where "${_cpusched}" will be replaced by the user chosen scheduler, ${_compiler} will be replaced by "-llvm" if clang is used (nothing for GCC).
|
||||
_kernel_localversion=""
|
||||
|
||||
# Set to "true" to add back missing symbol for AES-NI/AVX support on ZFS - This is a legacy option that can be ignored on 5.10+ kernels - https://github.com/NixOS/nixpkgs/blob/master/pkgs/os-specific/linux/kernel/export_kernel_fpu_functions.patch
|
||||
_zfsfix="true"
|
||||
|
||||
# Set to your maximum number of CPUs (physical + logical cores) - Lower means less overhead - You can set it to "$(nproc)" to use the current host's CPU(s) core count, or leave empty to use default
|
||||
# If you set this to a lower value than you have cores, some cores will be disabled
|
||||
# Default Arch kernel value is 320
|
||||
_NR_CPUS_value=""
|
||||
|
||||
#### LEGACY OPTIONS ####
|
||||
|
||||
# Set to "true" to enable support for fsync, an experimental replacement for esync found in Valve Proton 4.11+ - https://steamcommunity.com/games/221410/announcements/detail/2957094910196249305
|
||||
# Can be enabled alongside _futex_waitv on 5.13+ to use it as a fallback for older Proton builds
|
||||
_fsync="true"
|
||||
|
||||
# Set to "true" to enable backported patches to add support for the futex_waitv() syscall, a new interface for fsync. Upstream as of 5.16 and requires a wine/proton with builtin support for it - https://github.com/ValveSoftware/wine/pull/128
|
||||
# !! Disables futex2 interfaces support !!
|
||||
# https://github.com/andrealmeid/futex_waitv_patches
|
||||
_futex_waitv="true"
|
||||
|
||||
# Set to "true" to enable support for futex2, an experimental interface that can be used by proton-tkg and proton 5.13 experimental through Fsync - Can be enabled alongside fsync to use it as a fallback
|
||||
# https://gitlab.collabora.com/tonyk/linux/-/tree/futex2-dev
|
||||
_futex2="true"
|
||||
|
||||
# Set to "true" to add back missing symbol for AES-NI/AVX support on ZFS - This is a legacy option that can be ignored on 5.10+ kernels - https://github.com/NixOS/nixpkgs/blob/master/pkgs/os-specific/linux/kernel/export_kernel_fpu_functions.patch
|
||||
_zfsfix="true"
|
||||
|
||||
# MuQSS only - CPU scheduler runqueue sharing - No sharing (RQ_NONE), SMT (hyperthread) siblings (RQ_SMT), Multicore siblings (RQ_MC), Symmetric Multi-Processing (RQ_SMP), NUMA (RQ_ALL)
|
||||
# Valid values are "none", "smt", "mc", "mc-llc"(for zen), "smp", "all" - Kernel default is "smt"
|
||||
_runqueue_sharing=""
|
||||
|
||||
# MuQSS only - Make IRQ threading compulsory (FORCE_IRQ_THREADING) - Default is "false"
|
||||
_irq_threading="false"
|
||||
|
||||
# Set to "true" to add multi-generational LRU framework support on kernel 5.18+ - Improves memory pressure handling - https://lore.kernel.org/lkml/20220706220022.968789-1-yuzhao@google.com/
|
||||
# Older kernel versions might have a patch available in the community-patches repo
|
||||
# Upstream as of 6.1
|
||||
# ! This option will be disabled when bcachefs is enabled !
|
||||
_mglru="true"
|
||||
|
||||
#### USER PATCHES ####
|
||||
|
||||
|
@@ -723,7 +723,7 @@ _tkg_srcprep() {
|
||||
elif [ "$_kver" = "518" ]; then
|
||||
rev=2
|
||||
elif [ "$_kver" = "601" ]; then
|
||||
rev=1
|
||||
rev=3
|
||||
else
|
||||
rev=0
|
||||
fi
|
||||
|
@@ -632,10 +632,10 @@ index 976092b7bd45..31d587c16ec1 100644
|
||||
obj-y += build_utility.o
|
||||
diff --git a/kernel/sched/alt_core.c b/kernel/sched/alt_core.c
|
||||
new file mode 100644
|
||||
index 000000000000..572eab74418f
|
||||
index 000000000000..acb8657e811d
|
||||
--- /dev/null
|
||||
+++ b/kernel/sched/alt_core.c
|
||||
@@ -0,0 +1,7961 @@
|
||||
@@ -0,0 +1,7978 @@
|
||||
+/*
|
||||
+ * kernel/sched/alt_core.c
|
||||
+ *
|
||||
@@ -665,7 +665,6 @@ index 000000000000..572eab74418f
|
||||
+#include <linux/init_task.h>
|
||||
+#include <linux/kcov.h>
|
||||
+#include <linux/kprobes.h>
|
||||
+#include <linux/profile.h>
|
||||
+#include <linux/nmi.h>
|
||||
+#include <linux/scs.h>
|
||||
+
|
||||
@@ -706,7 +705,7 @@ index 000000000000..572eab74418f
|
||||
+#define sched_feat(x) (0)
|
||||
+#endif /* CONFIG_SCHED_DEBUG */
|
||||
+
|
||||
+#define ALT_SCHED_VERSION "v6.1-r1"
|
||||
+#define ALT_SCHED_VERSION "v6.1-r3"
|
||||
+
|
||||
+/* rt_prio(prio) defined in include/linux/sched/rt.h */
|
||||
+#define rt_task(p) rt_prio((p)->prio)
|
||||
@@ -815,14 +814,14 @@ index 000000000000..572eab74418f
|
||||
+clear_recorded_preempt_mask(int pr, int low, int high, int cpu)
|
||||
+{
|
||||
+ if (low < pr && pr <= high)
|
||||
+ cpumask_clear_cpu(cpu, sched_preempt_mask + SCHED_QUEUE_BITS - 1 - pr);
|
||||
+ cpumask_clear_cpu(cpu, sched_preempt_mask + SCHED_QUEUE_BITS - pr);
|
||||
+}
|
||||
+
|
||||
+static inline void
|
||||
+set_recorded_preempt_mask(int pr, int low, int high, int cpu)
|
||||
+{
|
||||
+ if (low < pr && pr <= high)
|
||||
+ cpumask_set_cpu(cpu, sched_preempt_mask + SCHED_QUEUE_BITS - 1 - pr);
|
||||
+ cpumask_set_cpu(cpu, sched_preempt_mask + SCHED_QUEUE_BITS - pr);
|
||||
+}
|
||||
+
|
||||
+static atomic_t sched_prio_record = ATOMIC_INIT(0);
|
||||
@@ -1392,8 +1391,8 @@ index 000000000000..572eab74418f
|
||||
+ * Context: rq->lock
|
||||
+ */
|
||||
+#define __SCHED_DEQUEUE_TASK(p, rq, flags) \
|
||||
+ psi_dequeue(p, flags & DEQUEUE_SLEEP); \
|
||||
+ sched_info_dequeue(rq, p); \
|
||||
+ psi_dequeue(p, flags & DEQUEUE_SLEEP); \
|
||||
+ \
|
||||
+ list_del(&p->sq_node); \
|
||||
+ if (list_empty(&rq->queue.heads[p->sq_idx])) \
|
||||
@@ -2030,11 +2029,13 @@ index 000000000000..572eab74418f
|
||||
+
|
||||
+ WARN_ON_ONCE(is_migration_disabled(p));
|
||||
+#endif
|
||||
+ if (task_cpu(p) == new_cpu)
|
||||
+ return;
|
||||
+ trace_sched_migrate_task(p, new_cpu);
|
||||
+ rseq_migrate(p);
|
||||
+ perf_event_task_migrate(p);
|
||||
+
|
||||
+ if (task_cpu(p) != new_cpu)
|
||||
+ {
|
||||
+ rseq_migrate(p);
|
||||
+ perf_event_task_migrate(p);
|
||||
+ }
|
||||
+
|
||||
+ __set_task_cpu(p, new_cpu);
|
||||
+}
|
||||
@@ -5110,15 +5111,15 @@ index 000000000000..572eab74418f
|
||||
+ if (src_rq->nr_running < 2)
|
||||
+ cpumask_clear_cpu(i, &sched_rq_pending_mask);
|
||||
+
|
||||
+ spin_release(&src_rq->lock.dep_map, _RET_IP_);
|
||||
+ do_raw_spin_unlock(&src_rq->lock);
|
||||
+
|
||||
+ rq->nr_running += nr_migrated;
|
||||
+ if (rq->nr_running > 1)
|
||||
+ cpumask_set_cpu(cpu, &sched_rq_pending_mask);
|
||||
+
|
||||
+ cpufreq_update_util(rq, 0);
|
||||
+
|
||||
+ spin_release(&src_rq->lock.dep_map, _RET_IP_);
|
||||
+ do_raw_spin_unlock(&src_rq->lock);
|
||||
+
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
@@ -5147,7 +5148,7 @@ index 000000000000..572eab74418f
|
||||
+}
|
||||
+
|
||||
+static inline struct task_struct *
|
||||
+choose_next_task(struct rq *rq, int cpu, struct task_struct *prev)
|
||||
+choose_next_task(struct rq *rq, int cpu)
|
||||
+{
|
||||
+ struct task_struct *next;
|
||||
+
|
||||
@@ -5334,7 +5335,7 @@ index 000000000000..572eab74418f
|
||||
+
|
||||
+ check_curr(prev, rq);
|
||||
+
|
||||
+ next = choose_next_task(rq, cpu, prev);
|
||||
+ next = choose_next_task(rq, cpu);
|
||||
+ clear_tsk_need_resched(prev);
|
||||
+ clear_preempt_need_resched();
|
||||
+#ifdef CONFIG_SCHED_DEBUG
|
||||
@@ -5764,6 +5765,7 @@ index 000000000000..572eab74418f
|
||||
+ return;
|
||||
+
|
||||
+ rq = __task_access_lock(p, &lock);
|
||||
+ update_rq_clock(rq);
|
||||
+ /*
|
||||
+ * Set under pi_lock && rq->lock, such that the value can be used under
|
||||
+ * either lock.
|
||||
@@ -6643,6 +6645,13 @@ index 000000000000..572eab74418f
|
||||
+ return retval;
|
||||
+}
|
||||
+
|
||||
+#ifdef CONFIG_SMP
|
||||
+int dl_task_check_affinity(struct task_struct *p, const struct cpumask *mask)
|
||||
+{
|
||||
+ return 0;
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
+static int
|
||||
+__sched_setaffinity(struct task_struct *p, const struct cpumask *mask)
|
||||
+{
|
||||
@@ -8027,6 +8036,14 @@ index 000000000000..572eab74418f
|
||||
+
|
||||
+ sched_smp_initialized = true;
|
||||
+}
|
||||
+
|
||||
+static int __init migration_init(void)
|
||||
+{
|
||||
+ sched_cpu_starting(smp_processor_id());
|
||||
+ return 0;
|
||||
+}
|
||||
+early_initcall(migration_init);
|
||||
+
|
||||
+#else
|
||||
+void __init sched_init_smp(void)
|
||||
+{
|
||||
@@ -8636,14 +8653,15 @@ index 000000000000..1212a031700e
|
||||
+{}
|
||||
diff --git a/kernel/sched/alt_sched.h b/kernel/sched/alt_sched.h
|
||||
new file mode 100644
|
||||
index 000000000000..e3b6320a397a
|
||||
index 000000000000..c32403ed82b6
|
||||
--- /dev/null
|
||||
+++ b/kernel/sched/alt_sched.h
|
||||
@@ -0,0 +1,667 @@
|
||||
@@ -0,0 +1,668 @@
|
||||
+#ifndef ALT_SCHED_H
|
||||
+#define ALT_SCHED_H
|
||||
+
|
||||
+#include <linux/context_tracking.h>
|
||||
+#include <linux/profile.h>
|
||||
+#include <linux/psi.h>
|
||||
+#include <linux/stop_machine.h>
|
||||
+#include <linux/syscalls.h>
|
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user