* [PATCH v4 0/2] refactor sqthread cpu binding logic
@ 2021-09-01 12:43 Hao Xu
[not found] ` <20210901124322.164238-1-haoxu-KPsoFbNs7GizrGE5bRqYAgC/G2K4zDHf@public.gmane.org>
2021-09-02 16:48 ` [PATCH v4 0/2] refactor sqthread cpu binding logic Michal Koutný
0 siblings, 2 replies; 13+ messages in thread
From: Hao Xu @ 2021-09-01 12:43 UTC (permalink / raw)
To: Jens Axboe, Zefan Li, Tejun Heo, Johannes Weiner, Pavel Begunkov
Cc: io-uring, cgroups, Joseph Qi
This patchset is to enhance sqthread cpu binding logic, we didn't
consider cgroup setting before. In container environment, theoretically
sqthread is in its container's task group, it shouldn't occupy cpu out
of its container. Otherwise it may cause some problems, for example:
resource balancer may controll cpu resource allocation by a container's
current cpu usage, here sqthread should be counted in.
v1-->v2
- add helper to do cpu in current-cpuset test
v2-->v3
- split it to 2 patches, first as prep one, second as comsumer
- remove warnning, since cpuset may change anytime, we cannot catch
all cases, so make the behaviour consistent.
v3-->v4
- remove sqthread cpu binding helper since the logic is now very simple
Hao Xu (2):
cpuset: add a helper to check if cpu in cpuset of current task
io_uring: consider cgroup setting when binding sqpoll cpu
fs/io_uring.c | 11 ++++++-----
include/linux/cpuset.h | 7 +++++++
kernel/cgroup/cpuset.c | 11 +++++++++++
3 files changed, 24 insertions(+), 5 deletions(-)
--
2.24.4
^ permalink raw reply [flat|nested] 13+ messages in thread[parent not found: <20210901124322.164238-1-haoxu-KPsoFbNs7GizrGE5bRqYAgC/G2K4zDHf@public.gmane.org>]
* [PATCH 1/2] cpuset: add a helper to check if cpu in cpuset of current task
[not found] ` <20210901124322.164238-1-haoxu-KPsoFbNs7GizrGE5bRqYAgC/G2K4zDHf@public.gmane.org>
@ 2021-09-01 12:43 ` Hao Xu
2021-09-01 12:43 ` [PATCH 2/2] io_uring: consider cgroup setting when binding sqpoll cpu Hao Xu
1 sibling, 0 replies; 13+ messages in thread
From: Hao Xu @ 2021-09-01 12:43 UTC (permalink / raw)
To: Jens Axboe, Zefan Li, Tejun Heo, Johannes Weiner, Pavel Begunkov
Cc: io-uring-u79uwXL29TY76Z2rM5mHXA, cgroups-u79uwXL29TY76Z2rM5mHXA,
Joseph Qi
Check if a cpu is in the cpuset of current task, not guaranteed that
cpu is online.
Signed-off-by: Hao Xu <haoxu-KPsoFbNs7GizrGE5bRqYAgC/G2K4zDHf@public.gmane.org>
---
include/linux/cpuset.h | 7 +++++++
kernel/cgroup/cpuset.c | 11 +++++++++++
2 files changed, 18 insertions(+)
diff --git a/include/linux/cpuset.h b/include/linux/cpuset.h
index 04c20de66afc..fad77c91bc1f 100644
--- a/include/linux/cpuset.h
+++ b/include/linux/cpuset.h
@@ -116,6 +116,8 @@ static inline int cpuset_do_slab_mem_spread(void)
extern bool current_cpuset_is_being_rebound(void);
+extern bool test_cpu_in_current_cpuset(int cpu);
+
extern void rebuild_sched_domains(void);
extern void cpuset_print_current_mems_allowed(void);
@@ -257,6 +259,11 @@ static inline bool current_cpuset_is_being_rebound(void)
return false;
}
+static inline bool test_cpu_in_current_cpuset(int cpu)
+{
+ return false;
+}
+
static inline void rebuild_sched_domains(void)
{
partition_sched_domains(1, NULL, NULL);
diff --git a/kernel/cgroup/cpuset.c b/kernel/cgroup/cpuset.c
index adb5190c4429..a63c27e9430e 100644
--- a/kernel/cgroup/cpuset.c
+++ b/kernel/cgroup/cpuset.c
@@ -1849,6 +1849,17 @@ bool current_cpuset_is_being_rebound(void)
return ret;
}
+bool test_cpu_in_current_cpuset(int cpu)
+{
+ bool ret;
+
+ rcu_read_lock();
+ ret = cpumask_test_cpu(cpu, task_cs(current)->effective_cpus);
+ rcu_read_unlock();
+
+ return ret;
+}
+
static int update_relax_domain_level(struct cpuset *cs, s64 val)
{
#ifdef CONFIG_SMP
--
2.24.4
^ permalink raw reply related [flat|nested] 13+ messages in thread* [PATCH 2/2] io_uring: consider cgroup setting when binding sqpoll cpu
[not found] ` <20210901124322.164238-1-haoxu-KPsoFbNs7GizrGE5bRqYAgC/G2K4zDHf@public.gmane.org>
2021-09-01 12:43 ` [PATCH 1/2] cpuset: add a helper to check if cpu in cpuset of current task Hao Xu
@ 2021-09-01 12:43 ` Hao Xu
[not found] ` <20210901124322.164238-3-haoxu-KPsoFbNs7GizrGE5bRqYAgC/G2K4zDHf@public.gmane.org>
1 sibling, 1 reply; 13+ messages in thread
From: Hao Xu @ 2021-09-01 12:43 UTC (permalink / raw)
To: Jens Axboe, Zefan Li, Tejun Heo, Johannes Weiner, Pavel Begunkov
Cc: io-uring-u79uwXL29TY76Z2rM5mHXA, cgroups-u79uwXL29TY76Z2rM5mHXA,
Joseph Qi
Since sqthread is userspace like thread now, it should respect cgroup
setting, thus we should consider current allowed cpuset when doing
cpu binding for sqthread.
Signed-off-by: Hao Xu <haoxu-KPsoFbNs7GizrGE5bRqYAgC/G2K4zDHf@public.gmane.org>
---
fs/io_uring.c | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/fs/io_uring.c b/fs/io_uring.c
index 7cc458e0b636..fb7890077ede 100644
--- a/fs/io_uring.c
+++ b/fs/io_uring.c
@@ -79,6 +79,7 @@
#include <linux/pagemap.h>
#include <linux/io_uring.h>
#include <linux/tracehook.h>
+#include <linux/cpuset.h>
#define CREATE_TRACE_POINTS
#include <trace/events/io_uring.h>
@@ -7112,11 +7113,9 @@ static int io_sq_thread(void *data)
snprintf(buf, sizeof(buf), "iou-sqp-%d", sqd->task_pid);
set_task_comm(current, buf);
-
- if (sqd->sq_cpu != -1)
+ if (sqd->sq_cpu != -1 && test_cpu_in_current_cpuset(sqd->sq_cpu))
set_cpus_allowed_ptr(current, cpumask_of(sqd->sq_cpu));
- else
- set_cpus_allowed_ptr(current, cpu_online_mask);
+
current->flags |= PF_NO_SETAFFINITY;
mutex_lock(&sqd->lock);
@@ -8310,8 +8309,10 @@ static int io_sq_offload_create(struct io_ring_ctx *ctx,
int cpu = p->sq_thread_cpu;
ret = -EINVAL;
- if (cpu >= nr_cpu_ids || !cpu_online(cpu))
+ if (cpu >= nr_cpu_ids || !cpu_online(cpu) ||
+ !test_cpu_in_current_cpuset(cpu))
goto err_sqpoll;
+
sqd->sq_cpu = cpu;
} else {
sqd->sq_cpu = -1;
--
2.24.4
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH v4 0/2] refactor sqthread cpu binding logic
2021-09-01 12:43 [PATCH v4 0/2] refactor sqthread cpu binding logic Hao Xu
[not found] ` <20210901124322.164238-1-haoxu-KPsoFbNs7GizrGE5bRqYAgC/G2K4zDHf@public.gmane.org>
@ 2021-09-02 16:48 ` Michal Koutný
[not found] ` <20210902164808.GA10014-9OudH3eul5jcvrawFnH+a6VXKuFTiq87@public.gmane.org>
2021-09-03 14:43 ` Hao Xu
1 sibling, 2 replies; 13+ messages in thread
From: Michal Koutný @ 2021-09-02 16:48 UTC (permalink / raw)
To: Hao Xu
Cc: Jens Axboe, Zefan Li, Tejun Heo, Johannes Weiner, Pavel Begunkov,
io-uring, cgroups, Joseph Qi
Hello Hao.
On Wed, Sep 01, 2021 at 08:43:20PM +0800, Hao Xu <haoxu@linux.alibaba.com> wrote:
> This patchset is to enhance sqthread cpu binding logic, we didn't
> consider cgroup setting before. In container environment, theoretically
> sqthread is in its container's task group, it shouldn't occupy cpu out
> of its container.
I see in the discussions that there's struggle to make
set_cpus_allowed_ptr() do what's intended under the given constraints.
IIUC, set_cpus_allowed_ptr() is conventionally used for kernel threads
[1]. But does the sqthread fall into this category? You want to have it
_directly_ associated with a container and its cgroups. It looks to me
more like a userspace thread (from this perspective, not literally). Or
is there a different intention?
It seems to me that reusing the sched_setaffinity() (with all its
checks and race pains/solutions) would be a more universal approach.
(I don't mean calling sched_setaffinity() directly, some parts would
need to be factored separately to this end.) WDYT?
Regards,
Michal
[1] Not only spending their life in kernel but providing some
delocalized kernel service.
^ permalink raw reply [flat|nested] 13+ messages in thread[parent not found: <20210902164808.GA10014-9OudH3eul5jcvrawFnH+a6VXKuFTiq87@public.gmane.org>]
* Re: [PATCH v4 0/2] refactor sqthread cpu binding logic
[not found] ` <20210902164808.GA10014-9OudH3eul5jcvrawFnH+a6VXKuFTiq87@public.gmane.org>
@ 2021-09-02 18:00 ` Jens Axboe
[not found] ` <efd3c387-9c7c-c0d8-1306-f722da2a9ba1-tSWWG44O7X1aa/9Udqfwiw@public.gmane.org>
0 siblings, 1 reply; 13+ messages in thread
From: Jens Axboe @ 2021-09-02 18:00 UTC (permalink / raw)
To: Michal Koutný, Hao Xu
Cc: Zefan Li, Tejun Heo, Johannes Weiner, Pavel Begunkov,
io-uring-u79uwXL29TY76Z2rM5mHXA, cgroups-u79uwXL29TY76Z2rM5mHXA,
Joseph Qi
On 9/2/21 10:48 AM, Michal Koutný wrote:
> Hello Hao.
>
> On Wed, Sep 01, 2021 at 08:43:20PM +0800, Hao Xu <haoxu-KPsoFbNs7GizrGE5bRqYAgC/G2K4zDHf@public.gmane.org> wrote:
>> This patchset is to enhance sqthread cpu binding logic, we didn't
>> consider cgroup setting before. In container environment, theoretically
>> sqthread is in its container's task group, it shouldn't occupy cpu out
>> of its container.
>
> I see in the discussions that there's struggle to make
> set_cpus_allowed_ptr() do what's intended under the given constraints.
>
> IIUC, set_cpus_allowed_ptr() is conventionally used for kernel threads
> [1]. But does the sqthread fall into this category? You want to have it
> _directly_ associated with a container and its cgroups. It looks to me
> more like a userspace thread (from this perspective, not literally). Or
> is there a different intention?
It's an io thread, which is kind of a hybrid - it's a kernel thread in
the sense that it never exits to userspace (ever), but it's a regular
thread in the sense that it's setup like one.
> It seems to me that reusing the sched_setaffinity() (with all its
> checks and race pains/solutions) would be a more universal approach.
> (I don't mean calling sched_setaffinity() directly, some parts would
> need to be factored separately to this end.) WDYT?
We already have this API to set the affinity based on when these were
regular kernel threads, so it needs to work with that too. As such they
are marked PF_NO_SETAFFINITY.
> [1] Not only spending their life in kernel but providing some
> delocalized kernel service.
That's what they do...
--
Jens Axboe
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v4 0/2] refactor sqthread cpu binding logic
2021-09-02 16:48 ` [PATCH v4 0/2] refactor sqthread cpu binding logic Michal Koutný
[not found] ` <20210902164808.GA10014-9OudH3eul5jcvrawFnH+a6VXKuFTiq87@public.gmane.org>
@ 2021-09-03 14:43 ` Hao Xu
1 sibling, 0 replies; 13+ messages in thread
From: Hao Xu @ 2021-09-03 14:43 UTC (permalink / raw)
To: Michal Koutný
Cc: Jens Axboe, Zefan Li, Tejun Heo, Johannes Weiner, Pavel Begunkov,
io-uring, cgroups, Joseph Qi
在 2021/9/3 上午12:48, Michal Koutný 写道:
> Hello Hao.
>
> On Wed, Sep 01, 2021 at 08:43:20PM +0800, Hao Xu <haoxu@linux.alibaba.com> wrote:
>> This patchset is to enhance sqthread cpu binding logic, we didn't
>> consider cgroup setting before. In container environment, theoretically
>> sqthread is in its container's task group, it shouldn't occupy cpu out
>> of its container.
>
> I see in the discussions that there's struggle to make
> set_cpus_allowed_ptr() do what's intended under the given constraints.
>
> IIUC, set_cpus_allowed_ptr() is conventionally used for kernel threads
> [1]. But does the sqthread fall into this category? You want to have it
> _directly_ associated with a container and its cgroups. It looks to me
sqthread is in it's creator's task group, so it is like a userspace
thread from this perspective. When it comes to container environemt
sqthread naturely belongs to a container which also contains its creator
And it has same cgroup setting with it's creator by default.
> more like a userspace thread (from this perspective, not literally). Or
> is there a different intention?
>
> It seems to me that reusing the sched_setaffinity() (with all its
> checks and race pains/solutions) would be a more universal approach.
> (I don't mean calling sched_setaffinity() directly, some parts would
> need to be factored separately to this end.) WDYT?
>
>
> Regards,
> Michal
>
> [1] Not only spending their life in kernel but providing some
> delocalized kernel service.
>
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v3 0/2] refactor sqthread cpu binding logic
@ 2021-09-01 10:18 Hao Xu
2021-09-01 10:18 ` [PATCH 1/2] cpuset: add a helper to check if cpu in cpuset of current task Hao Xu
0 siblings, 1 reply; 13+ messages in thread
From: Hao Xu @ 2021-09-01 10:18 UTC (permalink / raw)
To: Jens Axboe, Zefan Li, Tejun Heo, Johannes Weiner, Pavel Begunkov
Cc: io-uring-u79uwXL29TY76Z2rM5mHXA, cgroups-u79uwXL29TY76Z2rM5mHXA,
Joseph Qi
This patchset is to enhance sqthread cpu binding logic, we didn't
consider cgroup setting before. In container environment, theoretically
sqthread is in its container's task group, it shouldn't occupy cpu out
of its container. Otherwise it may cause some problems, for example:
resource balancer may controll cpu resource allocation by a container's
current cpu usage, here sqthread should be counted in.
v1-->v2
- add helper to do cpu in current-cpuset test
v2-->v3
- split it to 2 patches, first as prep one, second as comsumer
- remove warnning, since cpuset may change anytime, we cannot catch
all cases, so make the behaviour consistent.
Hao Xu (2):
cpuset: add a helper to check if cpu in cpuset of current task
io_uring: consider cgroup setting when binding sqpoll cpu
fs/io_uring.c | 19 ++++++++++++++-----
include/linux/cpuset.h | 7 +++++++
kernel/cgroup/cpuset.c | 11 +++++++++++
3 files changed, 32 insertions(+), 5 deletions(-)
--
2.24.4
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH 1/2] cpuset: add a helper to check if cpu in cpuset of current task
2021-09-01 10:18 [PATCH v3 " Hao Xu
@ 2021-09-01 10:18 ` Hao Xu
0 siblings, 0 replies; 13+ messages in thread
From: Hao Xu @ 2021-09-01 10:18 UTC (permalink / raw)
To: Jens Axboe, Zefan Li, Tejun Heo, Johannes Weiner, Pavel Begunkov
Cc: io-uring, cgroups, Joseph Qi
Check if a cpu is in the cpuset of current task, not guaranteed that
cpu is online.
Signed-off-by: Hao Xu <haoxu@linux.alibaba.com>
---
include/linux/cpuset.h | 7 +++++++
kernel/cgroup/cpuset.c | 11 +++++++++++
2 files changed, 18 insertions(+)
diff --git a/include/linux/cpuset.h b/include/linux/cpuset.h
index 04c20de66afc..fad77c91bc1f 100644
--- a/include/linux/cpuset.h
+++ b/include/linux/cpuset.h
@@ -116,6 +116,8 @@ static inline int cpuset_do_slab_mem_spread(void)
extern bool current_cpuset_is_being_rebound(void);
+extern bool test_cpu_in_current_cpuset(int cpu);
+
extern void rebuild_sched_domains(void);
extern void cpuset_print_current_mems_allowed(void);
@@ -257,6 +259,11 @@ static inline bool current_cpuset_is_being_rebound(void)
return false;
}
+static inline bool test_cpu_in_current_cpuset(int cpu)
+{
+ return false;
+}
+
static inline void rebuild_sched_domains(void)
{
partition_sched_domains(1, NULL, NULL);
diff --git a/kernel/cgroup/cpuset.c b/kernel/cgroup/cpuset.c
index adb5190c4429..a63c27e9430e 100644
--- a/kernel/cgroup/cpuset.c
+++ b/kernel/cgroup/cpuset.c
@@ -1849,6 +1849,17 @@ bool current_cpuset_is_being_rebound(void)
return ret;
}
+bool test_cpu_in_current_cpuset(int cpu)
+{
+ bool ret;
+
+ rcu_read_lock();
+ ret = cpumask_test_cpu(cpu, task_cs(current)->effective_cpus);
+ rcu_read_unlock();
+
+ return ret;
+}
+
static int update_relax_domain_level(struct cpuset *cs, s64 val)
{
#ifdef CONFIG_SMP
--
2.24.4
^ permalink raw reply related [flat|nested] 13+ messages in thread
end of thread, other threads:[~2021-09-09 12:34 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-09-01 12:43 [PATCH v4 0/2] refactor sqthread cpu binding logic Hao Xu
[not found] ` <20210901124322.164238-1-haoxu-KPsoFbNs7GizrGE5bRqYAgC/G2K4zDHf@public.gmane.org>
2021-09-01 12:43 ` [PATCH 1/2] cpuset: add a helper to check if cpu in cpuset of current task Hao Xu
2021-09-01 12:43 ` [PATCH 2/2] io_uring: consider cgroup setting when binding sqpoll cpu Hao Xu
[not found] ` <20210901124322.164238-3-haoxu-KPsoFbNs7GizrGE5bRqYAgC/G2K4zDHf@public.gmane.org>
2021-09-01 16:41 ` Tejun Heo
2021-09-01 16:42 ` Tejun Heo
[not found] ` <YS+tPq1eiQLx4P3M-NiLfg/pYEd1N0TnZuCh8vA@public.gmane.org>
2021-09-03 15:04 ` Hao Xu
[not found] ` <c49d9b26-1c74-316a-c933-e6964695a286-KPsoFbNs7GizrGE5bRqYAgC/G2K4zDHf@public.gmane.org>
2021-09-07 16:54 ` Tejun Heo
[not found] ` <YTeZUnshr+mgf5GS-NiLfg/pYEd1N0TnZuCh8vA@public.gmane.org>
2021-09-07 19:28 ` Hao Xu
2021-09-02 16:48 ` [PATCH v4 0/2] refactor sqthread cpu binding logic Michal Koutný
[not found] ` <20210902164808.GA10014-9OudH3eul5jcvrawFnH+a6VXKuFTiq87@public.gmane.org>
2021-09-02 18:00 ` Jens Axboe
[not found] ` <efd3c387-9c7c-c0d8-1306-f722da2a9ba1-tSWWG44O7X1aa/9Udqfwiw@public.gmane.org>
2021-09-09 12:34 ` Michal Koutný
2021-09-03 14:43 ` Hao Xu
-- strict thread matches above, loose matches on Subject: below --
2021-09-01 10:18 [PATCH v3 " Hao Xu
2021-09-01 10:18 ` [PATCH 1/2] cpuset: add a helper to check if cpu in cpuset of current task Hao Xu
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox