Received: by 2002:a05:6358:53a8:b0:117:f937:c515 with SMTP id z40csp5931982rwe; Tue, 18 Apr 2023 13:57:17 -0700 (PDT) X-Google-Smtp-Source: AKy350YInpuD6W9KSIKtymbpYyieYP9ZHo6VhI3QurFriZgUQCQTy9v3kgvOW/WaOKUaolQ86E5X X-Received: by 2002:a05:6a20:d68f:b0:f0:98df:d0ab with SMTP id it15-20020a056a20d68f00b000f098dfd0abmr903086pzb.17.1681851437023; Tue, 18 Apr 2023 13:57:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681851437; cv=none; d=google.com; s=arc-20160816; b=ItvGH8JX+zZxrmFxL6+Vey8yggHl8g1Y3tHVnHyPQcx/uxACp+D/fYybjMJXRVZstJ CgmGizF6stKOe/fLu8x09epO+COHlyKFFIao5/mfnIGnV/3jUc8Y9IFFCd0c7IK9QfN8 0U/u/mPXfWGDY4RVgN1NbQKj6mKaNCkGYyWH3wRLO7I/s1mhIZDEam7n0V4Nupx7d4k3 47nVTeaQh1T9PUic5W+j/y9FK5kAqIjURihqsnXtgqcqc3VF76U4b6I2Tf0nevZtVwzt 0R6MY0xVMu5RFNzjXcUJH1DBLaE0HJKjBnVJya6+ULJYso2Hdm3ju/4EnwW/H8Rtvdyw g0sQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from:sender :dkim-signature; bh=g1wusuTviJzFnYrvF5N6mC+TqPux3bAWpP9Y7s3wD8Y=; b=ifT22b037wcF1LbhL1WiUqazoQCwUUOcSnYNzCdkXkIlQEd+RJNs++pegJv7GnQopV nCJoE0bmw8ItY3zVeDQd+tfGd9AkExyCeBQjXa+IS8YgUxX4uWwCaGWR+6es+hI8JoAE yX0Tzdod3/kyRGeO7nqxcxDByvHSBXtU0wcUCZrt7/aW92BdvEtpCp1vc8cgaPMAkjVs u615bBI6voNOnzZVo/8TahNeqDPZYPU6XdDDkcklHShC33PVhUAQTD0R2WF6YaL53sEe c0PTOeBdJo6m+GEaEaX6Rey51Sv87bqE1uOWjH0S4xo0+0x6+rAldeyW/wgM07TBw2+o keiw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20221208 header.b="DF/9vGOv"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id s190-20020a632cc7000000b0051b0d0897c4si15021445pgs.818.2023.04.18.13.56.49; Tue, 18 Apr 2023 13:57:16 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20221208 header.b="DF/9vGOv"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232787AbjDRUwM (ORCPT + 99 others); Tue, 18 Apr 2023 16:52:12 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50286 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232740AbjDRUwL (ORCPT ); Tue, 18 Apr 2023 16:52:11 -0400 Received: from mail-pj1-x1030.google.com (mail-pj1-x1030.google.com [IPv6:2607:f8b0:4864:20::1030]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4F98BA0 for ; Tue, 18 Apr 2023 13:52:09 -0700 (PDT) Received: by mail-pj1-x1030.google.com with SMTP id 98e67ed59e1d1-247048f86c7so1350862a91.2 for ; Tue, 18 Apr 2023 13:52:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1681851129; x=1684443129; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:from:to:cc:subject:date :message-id:reply-to; bh=g1wusuTviJzFnYrvF5N6mC+TqPux3bAWpP9Y7s3wD8Y=; b=DF/9vGOvXBl/6rB2kFsLQ7h9jjj/MWltLPFLWWY+rErkU4SiE9fLPZApTSDsUiK1TH ozLsH7V7NZp3BzIK9t83rVPiY54OLKc1TctLwCdU9WnLJDgfdEf3WPNH/78R6EYDVA1L OyY6yQipPxhH1UJM9IqP2etFI8FnTNp+YLWvU7KIBuKqvhtVmxD2gVGd6v0BmA3TH1lA IhKPVh6IP3BlkdR542LDSkG3H0Z3GJ62pnj7g038ou6VQCm4xwSBeIv6JqFQeMjaz2Y3 hROyq6XZwvodyPd8XREhh59oL2Mds7p6Rw+p1RvzQ6eTriw0VT4ujS48CyvQKmmnN9FP uQCg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1681851129; x=1684443129; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=g1wusuTviJzFnYrvF5N6mC+TqPux3bAWpP9Y7s3wD8Y=; b=cLzvFK9fCkMfziP9yPkwR8Ho+UsrHxg9cZ+nSoy58pLF6yMjti4VYohw7Y0IPp0Hdq 7vqWB1LpPYq8VF7VhuQUQhCErgZ/7YLWlnHL3cP+92iutj3YuOjN8vIqCEVK9DSp+P8n Y53Cgly8EvhurB/VKkw65gVPJgXSDqRfffcx/AHoobvnmIzWeIIbIZ3MHg1mneTu+KJU Ckcw3bryh0+FwEsmnNNiqwD3PN/3x8o8j0inXMdVuPNUl+L3NSEXzazebaebaFV4v2rp F/8UTKOus1jw2tjVjZcHRlVbs5b/h+NDcSYsVKGfLRZkiNkXw8ZxD0CWMQeiGsvC9gMp rmpg== X-Gm-Message-State: AAQBX9cE9r1iciZ46ZB2azovNOTuAWklxFptw9XTfwDTxjHg8FVk5Hej NYfxLeETfXEdr0fzdGNVijc= X-Received: by 2002:a17:90a:e7c5:b0:247:1c17:77eb with SMTP id kb5-20020a17090ae7c500b002471c1777ebmr815743pjb.27.1681851128519; Tue, 18 Apr 2023 13:52:08 -0700 (PDT) Received: from localhost (2603-800c-1a02-1bae-a7fa-157f-969a-4cde.res6.spectrum.com. [2603:800c:1a02:1bae:a7fa:157f:969a:4cde]) by smtp.gmail.com with ESMTPSA id l23-20020a17090aaa9700b00231227781d5sm26466pjq.2.2023.04.18.13.52.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Apr 2023 13:52:08 -0700 (PDT) Sender: Tejun Heo From: Tejun Heo To: jiangshanlai@gmail.com Cc: torvalds@linux-foundation.org, peterz@infradead.org, linux-kernel@vger.kernel.org, kernel-team@meta.com, Tejun Heo Subject: [PATCH 1/5] workqueue, sched: Notify workqueue of scheduling of RUNNING tasks Date: Tue, 18 Apr 2023 10:51:55 -1000 Message-Id: <20230418205159.724789-2-tj@kernel.org> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230418205159.724789-1-tj@kernel.org> References: <20230418205159.724789-1-tj@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-1.5 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_EF,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org When a workqueue kworker goes to sleep, wq_worker_sleeping() is called so that workqueue can manage concurrency. This patch renames wq_worker_sleeping() to wq_worker_stopping() can calls it whenever a kworker is scheduled out whether it's going to sleep or not. Workqueue will use the schedule-out event of running tasks to automatically detect CPU hogging work items and exclude them from concurrency management so that they can't stall other work items. This patch just moves the task_is_running() test from sched_submit_work() to wq_worker_stopping(). No behavior change is intended. While at it, remove the already outdated comment which doesn't cover the io_wq case. Signed-off-by: Tejun Heo Cc: Lai Jiangshan Cc: Peter Zijlstra --- kernel/sched/core.c | 18 ++++++------------ kernel/workqueue.c | 13 ++++++++----- kernel/workqueue_internal.h | 2 +- 3 files changed, 15 insertions(+), 18 deletions(-) diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 0d18c3969f90..1d83ff00d587 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -6650,22 +6650,16 @@ void __noreturn do_task_dead(void) static inline void sched_submit_work(struct task_struct *tsk) { - unsigned int task_flags; + unsigned int task_flags = tsk->flags; + + if (task_flags & PF_WQ_WORKER) + wq_worker_stopping(tsk); if (task_is_running(tsk)) return; - task_flags = tsk->flags; - /* - * If a worker goes to sleep, notify and ask workqueue whether it - * wants to wake up a task to maintain concurrency. - */ - if (task_flags & (PF_WQ_WORKER | PF_IO_WORKER)) { - if (task_flags & PF_WQ_WORKER) - wq_worker_sleeping(tsk); - else - io_wq_worker_sleeping(tsk); - } + if (task_flags & PF_IO_WORKER) + io_wq_worker_sleeping(tsk); /* * spinlock and rwlock must not flush block requests. This will diff --git a/kernel/workqueue.c b/kernel/workqueue.c index b8b541caed48..6199fbf10cec 100644 --- a/kernel/workqueue.c +++ b/kernel/workqueue.c @@ -886,17 +886,20 @@ void wq_worker_running(struct task_struct *task) } /** - * wq_worker_sleeping - a worker is going to sleep - * @task: task going to sleep + * wq_worker_stopping - a worker is stopping + * @task: task stopping * - * This function is called from schedule() when a busy worker is - * going to sleep. + * This function is called from schedule() when a busy worker is going off the + * CPU. */ -void wq_worker_sleeping(struct task_struct *task) +void wq_worker_stopping(struct task_struct *task) { struct worker *worker = kthread_data(task); struct worker_pool *pool; + if (task_is_running(task)) + return; + /* * Rescuers, which may not have all the fields set up like normal * workers, also reach here, let's not access anything before diff --git a/kernel/workqueue_internal.h b/kernel/workqueue_internal.h index e00b1204a8e9..b3b4b2b41d93 100644 --- a/kernel/workqueue_internal.h +++ b/kernel/workqueue_internal.h @@ -75,7 +75,7 @@ static inline struct worker *current_wq_worker(void) * sched/ and workqueue.c. */ void wq_worker_running(struct task_struct *task); -void wq_worker_sleeping(struct task_struct *task); +void wq_worker_stopping(struct task_struct *task); work_func_t wq_worker_last_func(struct task_struct *task); #endif /* _KERNEL_WORKQUEUE_INTERNAL_H */ -- 2.40.0