lkml.org 
[lkml]   [2021]   [Apr]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip: sched/core] sched: Move SCHED_DEBUG sysctl to debugfs
    The following commit has been merged into the sched/core branch of tip:

    Commit-ID: 8a99b6833c884fa0e7919030d93fecedc69fc625
    Gitweb: https://git.kernel.org/tip/8a99b6833c884fa0e7919030d93fecedc69fc625
    Author: Peter Zijlstra <peterz@infradead.org>
    AuthorDate: Wed, 24 Mar 2021 11:43:21 +01:00
    Committer: Peter Zijlstra <peterz@infradead.org>
    CommitterDate: Fri, 16 Apr 2021 17:06:34 +02:00

    sched: Move SCHED_DEBUG sysctl to debugfs

    Stop polluting sysctl with undocumented knobs that really are debug
    only, move them all to /debug/sched/ along with the existing
    /debug/sched_* files that already exist.

    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Tested-by: Valentin Schneider <valentin.schneider@arm.com>
    Link: https://lkml.kernel.org/r/20210412102001.287610138@infradead.org
    ---
    include/linux/sched/sysctl.h | 8 +--
    kernel/sched/core.c | 4 +-
    kernel/sched/debug.c | 74 +++++++++++++++++++++++++--
    kernel/sched/fair.c | 9 +---
    kernel/sched/sched.h | 2 +-
    kernel/sysctl.c | 96 +-----------------------------------
    6 files changed, 80 insertions(+), 113 deletions(-)

    diff --git a/include/linux/sched/sysctl.h b/include/linux/sched/sysctl.h
    index 3c31ba8..0a3f346 100644
    --- a/include/linux/sched/sysctl.h
    +++ b/include/linux/sched/sysctl.h
    @@ -26,10 +26,11 @@ int proc_dohung_task_timeout_secs(struct ctl_table *table, int write,
    enum { sysctl_hung_task_timeout_secs = 0 };
    #endif

    +extern unsigned int sysctl_sched_child_runs_first;
    +
    extern unsigned int sysctl_sched_latency;
    extern unsigned int sysctl_sched_min_granularity;
    extern unsigned int sysctl_sched_wakeup_granularity;
    -extern unsigned int sysctl_sched_child_runs_first;

    enum sched_tunable_scaling {
    SCHED_TUNABLESCALING_NONE,
    @@ -37,7 +38,7 @@ enum sched_tunable_scaling {
    SCHED_TUNABLESCALING_LINEAR,
    SCHED_TUNABLESCALING_END,
    };
    -extern enum sched_tunable_scaling sysctl_sched_tunable_scaling;
    +extern unsigned int sysctl_sched_tunable_scaling;

    extern unsigned int sysctl_numa_balancing_scan_delay;
    extern unsigned int sysctl_numa_balancing_scan_period_min;
    @@ -47,9 +48,6 @@ extern unsigned int sysctl_numa_balancing_scan_size;
    #ifdef CONFIG_SCHED_DEBUG
    extern __read_mostly unsigned int sysctl_sched_migration_cost;
    extern __read_mostly unsigned int sysctl_sched_nr_migrate;
    -
    -int sched_proc_update_handler(struct ctl_table *table, int write,
    - void *buffer, size_t *length, loff_t *ppos);
    #endif

    /*
    diff --git a/kernel/sched/core.c b/kernel/sched/core.c
    index 7d031da..bac30db 100644
    --- a/kernel/sched/core.c
    +++ b/kernel/sched/core.c
    @@ -5504,9 +5504,11 @@ static const struct file_operations sched_dynamic_fops = {
    .release = single_release,
    };

    +extern struct dentry *debugfs_sched;
    +
    static __init int sched_init_debug_dynamic(void)
    {
    - debugfs_create_file("sched_preempt", 0644, NULL, NULL, &sched_dynamic_fops);
    + debugfs_create_file("sched_preempt", 0644, debugfs_sched, NULL, &sched_dynamic_fops);
    return 0;
    }
    late_initcall(sched_init_debug_dynamic);
    diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c
    index 4b49cc2..2093b90 100644
    --- a/kernel/sched/debug.c
    +++ b/kernel/sched/debug.c
    @@ -169,15 +169,81 @@ static const struct file_operations sched_feat_fops = {
    .release = single_release,
    };

    +#ifdef CONFIG_SMP
    +
    +static ssize_t sched_scaling_write(struct file *filp, const char __user *ubuf,
    + size_t cnt, loff_t *ppos)
    +{
    + char buf[16];
    +
    + if (cnt > 15)
    + cnt = 15;
    +
    + if (copy_from_user(&buf, ubuf, cnt))
    + return -EFAULT;
    +
    + if (kstrtouint(buf, 10, &sysctl_sched_tunable_scaling))
    + return -EINVAL;
    +
    + if (sched_update_scaling())
    + return -EINVAL;
    +
    + *ppos += cnt;
    + return cnt;
    +}
    +
    +static int sched_scaling_show(struct seq_file *m, void *v)
    +{
    + seq_printf(m, "%d\n", sysctl_sched_tunable_scaling);
    + return 0;
    +}
    +
    +static int sched_scaling_open(struct inode *inode, struct file *filp)
    +{
    + return single_open(filp, sched_scaling_show, NULL);
    +}
    +
    +static const struct file_operations sched_scaling_fops = {
    + .open = sched_scaling_open,
    + .write = sched_scaling_write,
    + .read = seq_read,
    + .llseek = seq_lseek,
    + .release = single_release,
    +};
    +
    +#endif /* SMP */
    +
    __read_mostly bool sched_debug_enabled;

    +struct dentry *debugfs_sched;
    +
    static __init int sched_init_debug(void)
    {
    - debugfs_create_file("sched_features", 0644, NULL, NULL,
    - &sched_feat_fops);
    + struct dentry __maybe_unused *numa;

    - debugfs_create_bool("sched_debug", 0644, NULL,
    - &sched_debug_enabled);
    + debugfs_sched = debugfs_create_dir("sched", NULL);
    +
    + debugfs_create_file("features", 0644, debugfs_sched, NULL, &sched_feat_fops);
    + debugfs_create_bool("debug_enabled", 0644, debugfs_sched, &sched_debug_enabled);
    +
    + debugfs_create_u32("latency_ns", 0644, debugfs_sched, &sysctl_sched_latency);
    + debugfs_create_u32("min_granularity_ns", 0644, debugfs_sched, &sysctl_sched_min_granularity);
    + debugfs_create_u32("wakeup_granularity_ns", 0644, debugfs_sched, &sysctl_sched_wakeup_granularity);
    +
    +#ifdef CONFIG_SMP
    + debugfs_create_file("tunable_scaling", 0644, debugfs_sched, NULL, &sched_scaling_fops);
    + debugfs_create_u32("migration_cost_ns", 0644, debugfs_sched, &sysctl_sched_migration_cost);
    + debugfs_create_u32("nr_migrate", 0644, debugfs_sched, &sysctl_sched_nr_migrate);
    +#endif
    +
    +#ifdef CONFIG_NUMA_BALANCING
    + numa = debugfs_create_dir("numa_balancing", debugfs_sched);
    +
    + debugfs_create_u32("scan_delay_ms", 0644, numa, &sysctl_numa_balancing_scan_delay);
    + debugfs_create_u32("scan_period_min_ms", 0644, numa, &sysctl_numa_balancing_scan_period_min);
    + debugfs_create_u32("scan_period_max_ms", 0644, numa, &sysctl_numa_balancing_scan_period_max);
    + debugfs_create_u32("scan_size_mb", 0644, numa, &sysctl_numa_balancing_scan_size);
    +#endif

    return 0;
    }
    diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
    index 9b8ae02..b3ea14c 100644
    --- a/kernel/sched/fair.c
    +++ b/kernel/sched/fair.c
    @@ -49,7 +49,7 @@ static unsigned int normalized_sysctl_sched_latency = 6000000ULL;
    *
    * (default SCHED_TUNABLESCALING_LOG = *(1+ilog(ncpus))
    */
    -enum sched_tunable_scaling sysctl_sched_tunable_scaling = SCHED_TUNABLESCALING_LOG;
    +unsigned int sysctl_sched_tunable_scaling = SCHED_TUNABLESCALING_LOG;

    /*
    * Minimal preemption granularity for CPU-bound tasks:
    @@ -634,15 +634,10 @@ struct sched_entity *__pick_last_entity(struct cfs_rq *cfs_rq)
    * Scheduling class statistics methods:
    */

    -int sched_proc_update_handler(struct ctl_table *table, int write,
    - void *buffer, size_t *lenp, loff_t *ppos)
    +int sched_update_scaling(void)
    {
    - int ret = proc_dointvec_minmax(table, write, buffer, lenp, ppos);
    unsigned int factor = get_update_sysctl_factor();

    - if (ret || !write)
    - return ret;
    -
    sched_nr_latency = DIV_ROUND_UP(sysctl_sched_latency,
    sysctl_sched_min_granularity);

    diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h
    index 7e7e936..123ff3b 100644
    --- a/kernel/sched/sched.h
    +++ b/kernel/sched/sched.h
    @@ -1568,6 +1568,8 @@ static inline void unregister_sched_domain_sysctl(void)
    }
    #endif

    +extern int sched_update_scaling(void);
    +
    extern void flush_smp_call_function_from_idle(void);

    #else /* !CONFIG_SMP: */
    diff --git a/kernel/sysctl.c b/kernel/sysctl.c
    index 17f1cc9..4bff44d 100644
    --- a/kernel/sysctl.c
    +++ b/kernel/sysctl.c
    @@ -184,17 +184,6 @@ static enum sysctl_writes_mode sysctl_writes_strict = SYSCTL_WRITES_STRICT;
    int sysctl_legacy_va_layout;
    #endif

    -#ifdef CONFIG_SCHED_DEBUG
    -static int min_sched_granularity_ns = 100000; /* 100 usecs */
    -static int max_sched_granularity_ns = NSEC_PER_SEC; /* 1 second */
    -static int min_wakeup_granularity_ns; /* 0 usecs */
    -static int max_wakeup_granularity_ns = NSEC_PER_SEC; /* 1 second */
    -#ifdef CONFIG_SMP
    -static int min_sched_tunable_scaling = SCHED_TUNABLESCALING_NONE;
    -static int max_sched_tunable_scaling = SCHED_TUNABLESCALING_END-1;
    -#endif /* CONFIG_SMP */
    -#endif /* CONFIG_SCHED_DEBUG */
    -
    #ifdef CONFIG_COMPACTION
    static int min_extfrag_threshold;
    static int max_extfrag_threshold = 1000;
    @@ -1659,91 +1648,6 @@ static struct ctl_table kern_table[] = {
    .mode = 0644,
    .proc_handler = proc_dointvec,
    },
    -#ifdef CONFIG_SCHED_DEBUG
    - {
    - .procname = "sched_min_granularity_ns",
    - .data = &sysctl_sched_min_granularity,
    - .maxlen = sizeof(unsigned int),
    - .mode = 0644,
    - .proc_handler = sched_proc_update_handler,
    - .extra1 = &min_sched_granularity_ns,
    - .extra2 = &max_sched_granularity_ns,
    - },
    - {
    - .procname = "sched_latency_ns",
    - .data = &sysctl_sched_latency,
    - .maxlen = sizeof(unsigned int),
    - .mode = 0644,
    - .proc_handler = sched_proc_update_handler,
    - .extra1 = &min_sched_granularity_ns,
    - .extra2 = &max_sched_granularity_ns,
    - },
    - {
    - .procname = "sched_wakeup_granularity_ns",
    - .data = &sysctl_sched_wakeup_granularity,
    - .maxlen = sizeof(unsigned int),
    - .mode = 0644,
    - .proc_handler = sched_proc_update_handler,
    - .extra1 = &min_wakeup_granularity_ns,
    - .extra2 = &max_wakeup_granularity_ns,
    - },
    -#ifdef CONFIG_SMP
    - {
    - .procname = "sched_tunable_scaling",
    - .data = &sysctl_sched_tunable_scaling,
    - .maxlen = sizeof(enum sched_tunable_scaling),
    - .mode = 0644,
    - .proc_handler = sched_proc_update_handler,
    - .extra1 = &min_sched_tunable_scaling,
    - .extra2 = &max_sched_tunable_scaling,
    - },
    - {
    - .procname = "sched_migration_cost_ns",
    - .data = &sysctl_sched_migration_cost,
    - .maxlen = sizeof(unsigned int),
    - .mode = 0644,
    - .proc_handler = proc_dointvec,
    - },
    - {
    - .procname = "sched_nr_migrate",
    - .data = &sysctl_sched_nr_migrate,
    - .maxlen = sizeof(unsigned int),
    - .mode = 0644,
    - .proc_handler = proc_dointvec,
    - },
    -#endif /* CONFIG_SMP */
    -#ifdef CONFIG_NUMA_BALANCING
    - {
    - .procname = "numa_balancing_scan_delay_ms",
    - .data = &sysctl_numa_balancing_scan_delay,
    - .maxlen = sizeof(unsigned int),
    - .mode = 0644,
    - .proc_handler = proc_dointvec,
    - },
    - {
    - .procname = "numa_balancing_scan_period_min_ms",
    - .data = &sysctl_numa_balancing_scan_period_min,
    - .maxlen = sizeof(unsigned int),
    - .mode = 0644,
    - .proc_handler = proc_dointvec,
    - },
    - {
    - .procname = "numa_balancing_scan_period_max_ms",
    - .data = &sysctl_numa_balancing_scan_period_max,
    - .maxlen = sizeof(unsigned int),
    - .mode = 0644,
    - .proc_handler = proc_dointvec,
    - },
    - {
    - .procname = "numa_balancing_scan_size_mb",
    - .data = &sysctl_numa_balancing_scan_size,
    - .maxlen = sizeof(unsigned int),
    - .mode = 0644,
    - .proc_handler = proc_dointvec_minmax,
    - .extra1 = SYSCTL_ONE,
    - },
    -#endif /* CONFIG_NUMA_BALANCING */
    -#endif /* CONFIG_SCHED_DEBUG */
    #ifdef CONFIG_SCHEDSTATS
    {
    .procname = "sched_schedstats",
    \
     
     \ /
      Last update: 2021-04-16 17:56    [W:4.683 / U:0.100 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site