Commit 53fcfa07 authored by Guan Jing's avatar Guan Jing Committed by Hui Tang
Browse files

sched: Add can_migrate_task hook

hulk inclusion
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/I9GZAQ


CVE: NA

--------------------------------

Add bpf hook for 'can_migrate_task', which allow user to
decide whether exit or not load_balance early.

Signed-off-by: default avatarGuan Jing <guanjing6@huawei.com>
Signed-off-by: default avatarHui Tang <tanghui20@huawei.com>
parent f23e7844
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -2406,5 +2406,15 @@ struct sched_affine_ctx {
	KABI_RESERVE(3)
	KABI_RESERVE(4)
};

struct sched_migrate_node {
	int src_cpu;
	int dst_cpu;

	KABI_RESERVE(1)
	KABI_RESERVE(2)
	KABI_RESERVE(3)
	KABI_RESERVE(4)
};
#endif
#endif
+2 −0
Original line number Diff line number Diff line
@@ -10,3 +10,5 @@ BPF_SCHED_HOOK(void, (void) 0, cfs_dequeue_task, struct rq *rq, struct task_stru
BPF_SCHED_HOOK(int, -1, cfs_select_rq, struct sched_migrate_ctx *ctx)
BPF_SCHED_HOOK(int, -1, cfs_wake_affine, struct sched_affine_ctx *ctx)
BPF_SCHED_HOOK(int, -1, cfs_select_rq_exit, struct sched_migrate_ctx *ctx)
BPF_SCHED_HOOK(int, -1, cfs_can_migrate_task, struct task_struct *p,
	struct sched_migrate_node *migrate_node)
+14 −0
Original line number Diff line number Diff line
@@ -9486,9 +9486,23 @@ static
int can_migrate_task(struct task_struct *p, struct lb_env *env)
{
	int tsk_cache_hot;
#ifdef CONFIG_BPF_SCHED
	struct sched_migrate_node migrate_node;
	int ret;
#endif

	lockdep_assert_rq_held(env->src_rq);

#ifdef CONFIG_BPF_SCHED
	if (bpf_sched_enabled()) {
		migrate_node.src_cpu = env->src_cpu;
		migrate_node.dst_cpu = env->dst_cpu;
		ret = bpf_sched_cfs_can_migrate_task(p, &migrate_node);
		if (ret > 0)
			return ret - 1;
	}
#endif

	/*
	 * We do not migrate tasks that are:
	 * 1) throttled_lb_pair, or
+2 −0
Original line number Diff line number Diff line
@@ -444,6 +444,7 @@ class PrinterHelpers(Printer):
            'struct cpumask_op_args',
            'struct sched_migrate_ctx',
            'struct sched_affine_ctx',
            'struct sched_migrate_node',
    ]
    known_types = {
            '...',
@@ -496,6 +497,7 @@ class PrinterHelpers(Printer):
            'struct cpumask_op_args',
            'struct sched_migrate_ctx',
            'struct sched_affine_ctx',
            'struct sched_migrate_node',
    }
    mapped_types = {
            'u8': '__u8',