sched_ext: Add sysrq-S which disables the BPF scheduler
This enables the admin to abort the BPF scheduler and revert to CFS anytime. Signed-off-by: Tejun Heo <tj@kernel.org> Reviewed-by: David Vernet <dvernet@meta.com> Acked-by: Josh Don <joshdon@google.com> Acked-by: Hao Luo <haoluo@google.com> Acked-by: Barret Rhoden <brho@google.com>
This commit is contained in:
parent
2a52ca7c98
commit
79e104400f
@ -531,6 +531,7 @@ static const struct sysrq_key_op *sysrq_key_table[62] = {
|
||||
NULL, /* P */
|
||||
NULL, /* Q */
|
||||
&sysrq_replay_logs_op, /* R */
|
||||
/* S: May be registered by sched_ext for resetting */
|
||||
NULL, /* S */
|
||||
NULL, /* T */
|
||||
NULL, /* U */
|
||||
|
@ -32,6 +32,7 @@
|
||||
#include <linux/suspend.h>
|
||||
#include <linux/tsacct_kern.h>
|
||||
#include <linux/vtime.h>
|
||||
#include <linux/sysrq.h>
|
||||
#include <linux/percpu-rwsem.h>
|
||||
|
||||
#include <uapi/linux/sched/types.h>
|
||||
|
@ -20,6 +20,7 @@ enum scx_exit_kind {
|
||||
SCX_EXIT_UNREG = 64, /* user-space initiated unregistration */
|
||||
SCX_EXIT_UNREG_BPF, /* BPF-initiated unregistration */
|
||||
SCX_EXIT_UNREG_KERN, /* kernel-initiated unregistration */
|
||||
SCX_EXIT_SYSRQ, /* requested by 'S' sysrq */
|
||||
|
||||
SCX_EXIT_ERROR = 1024, /* runtime error, error msg contains details */
|
||||
SCX_EXIT_ERROR_BPF, /* ERROR but triggered through scx_bpf_error() */
|
||||
@ -2776,6 +2777,8 @@ static const char *scx_exit_reason(enum scx_exit_kind kind)
|
||||
return "Scheduler unregistered from BPF";
|
||||
case SCX_EXIT_UNREG_KERN:
|
||||
return "Scheduler unregistered from the main kernel";
|
||||
case SCX_EXIT_SYSRQ:
|
||||
return "disabled by sysrq-S";
|
||||
case SCX_EXIT_ERROR:
|
||||
return "runtime error";
|
||||
case SCX_EXIT_ERROR_BPF:
|
||||
@ -3526,6 +3529,21 @@ static struct bpf_struct_ops bpf_sched_ext_ops = {
|
||||
* System integration and init.
|
||||
*/
|
||||
|
||||
static void sysrq_handle_sched_ext_reset(u8 key)
|
||||
{
|
||||
if (scx_ops_helper)
|
||||
scx_ops_disable(SCX_EXIT_SYSRQ);
|
||||
else
|
||||
pr_info("sched_ext: BPF scheduler not yet used\n");
|
||||
}
|
||||
|
||||
static const struct sysrq_key_op sysrq_sched_ext_reset_op = {
|
||||
.handler = sysrq_handle_sched_ext_reset,
|
||||
.help_msg = "reset-sched-ext(S)",
|
||||
.action_msg = "Disable sched_ext and revert all tasks to CFS",
|
||||
.enable_mask = SYSRQ_ENABLE_RTNICE,
|
||||
};
|
||||
|
||||
void __init init_sched_ext_class(void)
|
||||
{
|
||||
s32 cpu, v;
|
||||
@ -3549,6 +3567,8 @@ void __init init_sched_ext_class(void)
|
||||
init_dsq(&rq->scx.local_dsq, SCX_DSQ_LOCAL);
|
||||
INIT_LIST_HEAD(&rq->scx.runnable_list);
|
||||
}
|
||||
|
||||
register_sysrq_key('S', &sysrq_sched_ext_reset_op);
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user