Unverified Commit f898c7c8 authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!3734 Introduce qos smt expeller for co-location

Merge Pull Request from: @ci-robot 
 
PR sync from: Xia Fukun <xiafukun@huawei.com>
https://mailweb.openeuler.org/hyperkitty/list/kernel@openeuler.org/message/CJ5ZSYP5576QUBRPOTWXLQ3REARI2AIK/ 
We introduce the qos smt expeller, which lets
online tasks to expel offline tasks on the smt sibling cpus,
and exclusively occupy CPU resources.In this way we are
able to improve QOS of online tasks in co-location.

Guan Jing (8):
  sched: Introduce qos smt expeller for co-location
  sched: Implement the function of qos smt expeller
  sched: Add statistics for qos smt expeller
  sched: Add tracepoint for qos smt expeller
  config: Enable CONFIG_QOS_SCHED_SMT_EXPELLER
  sched/fair: Start tracking qos_offline tasks count in cfs_rq
  sched/fair: Introduce QOS_SMT_EXPELL priority reversion mechanism
  sched/fair: Add cmdline nosmtexpell


-- 
2.34.1
 
https://gitee.com/openeuler/kernel/issues/I8O3MY 
 
Link:https://gitee.com/openeuler/kernel/pulls/3734

 

Reviewed-by: default avatarLiu Chao <liuchao173@huawei.com>
Reviewed-by: default avatarZhang Jianhua <chris.zjh@huawei.com>
Reviewed-by: default avatarZucheng Zheng <zhengzucheng@huawei.com>
Signed-off-by: default avatarZheng Zengkai <zhengzengkai@huawei.com>
parents 590489fe a62d532d
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -168,6 +168,7 @@ CONFIG_CGROUP_SCHED=y
CONFIG_QOS_SCHED=y
CONFIG_QOS_SCHED_PRIO_LB=y
CONFIG_FAIR_GROUP_SCHED=y
CONFIG_QOS_SCHED_SMT_EXPELLER=y
CONFIG_CFS_BANDWIDTH=y
CONFIG_RT_GROUP_SCHED=y
CONFIG_SCHED_MM_CID=y
+1 −0
Original line number Diff line number Diff line
@@ -190,6 +190,7 @@ CONFIG_CGROUP_SCHED=y
CONFIG_QOS_SCHED=y
CONFIG_QOS_SCHED_PRIO_LB=y
CONFIG_FAIR_GROUP_SCHED=y
CONFIG_QOS_SCHED_SMT_EXPELLER=y
CONFIG_CFS_BANDWIDTH=y
CONFIG_RT_GROUP_SCHED=y
CONFIG_SCHED_MM_CID=y
+12 −0
Original line number Diff line number Diff line
@@ -548,6 +548,11 @@ struct sched_statistics {
	u64				nr_wakeups_preferred_cpus;
	u64				nr_wakeups_force_preferred_cpus;
#endif

#ifdef CONFIG_QOS_SCHED_SMT_EXPELLER
	u64				nr_qos_smt_send_ipi;
	u64				nr_qos_smt_expelled;
#endif
#endif /* CONFIG_SCHEDSTATS */
} ____cacheline_aligned;

@@ -2021,9 +2026,16 @@ extern char *__get_task_comm(char *to, size_t len, struct task_struct *tsk);
	__get_task_comm(buf, sizeof(buf), tsk);		\
})

#ifdef CONFIG_QOS_SCHED_SMT_EXPELLER
void qos_smt_check_need_resched(void);
#endif

#ifdef CONFIG_SMP
static __always_inline void scheduler_ipi(void)
{
#ifdef CONFIG_QOS_SCHED_SMT_EXPELLER
	qos_smt_check_need_resched();
#endif
	/*
	 * Fold TIF_NEED_RESCHED into the preempt_count; anybody setting
	 * TIF_NEED_RESCHED remotely (for the first time) will also send
+55 −0
Original line number Diff line number Diff line
@@ -268,6 +268,61 @@ TRACE_EVENT(sched_switch,
		__entry->next_comm, __entry->next_pid, __entry->next_prio)
);

#ifdef CONFIG_QOS_SCHED_SMT_EXPELLER
/*
 * Tracepoint for a offline task being resched:
 */
TRACE_EVENT(sched_qos_smt_expel,

	TP_PROTO(struct task_struct *sibling_p, int qos_smt_status),

	TP_ARGS(sibling_p, qos_smt_status),

	TP_STRUCT__entry(
		__array(	char,	sibling_comm,	TASK_COMM_LEN	)
		__field(	pid_t,	sibling_pid			)
		__field(	int,	sibling_qos_status		)
		__field(	int,	sibling_cpu			)
	),

	TP_fast_assign(
		memcpy(__entry->sibling_comm, sibling_p->comm, TASK_COMM_LEN);
		__entry->sibling_pid		= sibling_p->pid;
		__entry->sibling_qos_status	= qos_smt_status;
		__entry->sibling_cpu		= task_cpu(sibling_p);
	),

	TP_printk("sibling_comm=%s sibling_pid=%d sibling_qos_status=%d sibling_cpu=%d",
		  __entry->sibling_comm, __entry->sibling_pid, __entry->sibling_qos_status,
		  __entry->sibling_cpu)
);

/*
 * Tracepoint for a offline task being expelled:
 */
TRACE_EVENT(sched_qos_smt_expelled,

	TP_PROTO(struct task_struct *p, int qos_smt_status),

	TP_ARGS(p, qos_smt_status),

	TP_STRUCT__entry(
		__array(	char,	comm,	TASK_COMM_LEN	)
		__field(	pid_t,	pid			)
		__field(	int,	qos_status		)
	),

	TP_fast_assign(
		memcpy(__entry->comm, p->comm, TASK_COMM_LEN);
		__entry->pid		= p->pid;
		__entry->qos_status	= qos_smt_status;
	),

	TP_printk("comm=%s pid=%d qos_status=%d",
		  __entry->comm, __entry->pid, __entry->qos_status)
);
#endif

/*
 * Tracepoint for a task being migrated:
 */
+9 −0
Original line number Diff line number Diff line
@@ -1031,6 +1031,15 @@ config QOS_SCHED

	  If in doubt, say N.

config QOS_SCHED_SMT_EXPELLER
	bool "Qos smt expeller"
	depends on SCHED_SMT
	depends on QOS_SCHED
	default n
	help
	  This feature enable online tasks to expel offline tasks
	  on the smt sibling cpus, and exclusively occupy CPU resources.

config QOS_SCHED_PRIO_LB
	bool "Priority load balance for Qos scheduler"
	depends on QOS_SCHED
Loading