From patchwork Mon Jul 20 15:38:11 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Greg KH X-Patchwork-Id: 237530 Delivered-To: patch@linaro.org Received: by 2002:a92:d244:0:0:0:0:0 with SMTP id v4csp2121739ilg; Mon, 20 Jul 2020 09:17:43 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzFSWeeMcD0f3TaRuilMD07rQHGwF8Kk/rMj8bmDRHreIK56Rf5Aaq7nU8AT4lgXz2d2A4l X-Received: by 2002:a17:906:dbcf:: with SMTP id yc15mr20595986ejb.222.1595261863004; Mon, 20 Jul 2020 09:17:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1595261862; cv=none; d=google.com; s=arc-20160816; b=FNy9tGFxEMisgiLGtI71Wjzdm52MHygLAI7WPNV4oH+qBkoglKe7QPZDFnF4jPbXH2 XfPiWECGGhs0MkCVCm5Najatpzjx7f6m98RTZxBbbWveMvaYYntntf0/nbfdKD4Ds0Pu Kba2yLTrTWhpakEaAyUblZPWBYaRrXdxoIMchloTawL5azRizVUiH+0ycSdBZzjq0wFL fFHnBszELT7j54/L4yjBRyaKaggpOWEmdc5ANRbhXhPUlmwFbxuK6PuMmWGh/x+cxrO9 dV8Y35BiOwfq8vIZBOkpNVUqfwxLENHLNtwItIWiKDQ+vm+ZDzWptlUoyV0VMPT8UtcU iSbg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=3QHO9T0w8Lf1K6ugMzl9qTwaq8AT4nccnNrySGh9WvU=; b=t3VeXWVujQAHANZdYTV7wEBhie/bgwz5mpOQrz6OA+VN7eFP4HqlrARyr4tPziujHa Tbv+mCM6+kUpzW3bAl0cSD0THCPMTjmQiqMn3ljOPN6xF4Maq9ipUIcTaAcV6sE6utyr 4AkO11SuKgmO13zPyf1uB2HiP613InPg8l2jIFugwENJFblvtboWokftez85JiPIaM1f 7Cs8TkKJ5W2r97MTnS6TaYPMlUzsQXf74m+64xVun/sSm51DFdDOWh6JqlKjxUBC1bPq xk/bl71ie9WOZiZsLSzSgiO5j0N6+bwaLYH00U/HaNRHoehHrFLf3G5wpmRcmiJyzzUa P16A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=jV6qWQxJ; spf=pass (google.com: domain of stable-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id cn25si10282270edb.68.2020.07.20.09.17.42; Mon, 20 Jul 2020 09:17:42 -0700 (PDT) Received-SPF: pass (google.com: domain of stable-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=jV6qWQxJ; spf=pass (google.com: domain of stable-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387843AbgGTQP0 (ORCPT + 15 others); Mon, 20 Jul 2020 12:15:26 -0400 Received: from mail.kernel.org ([198.145.29.99]:56284 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388410AbgGTQPZ (ORCPT ); Mon, 20 Jul 2020 12:15:25 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 52CDF20656; Mon, 20 Jul 2020 16:15:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1595261724; bh=JPEzLH6tKL+WMDuIPV6rnfvXsiGH+MU8f5d/RrU/mdU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=jV6qWQxJjbtpWQxUffQXqYE0HJkIZse2luGdK5apWavP772u1YGdu7/7EOqbzdqAG yTaRFlfEE2nNuCdYpBUs2d76uDyYWxqwA07jUXcSEjQxZKal5F/VqpRNUccHBKDxrh zE/u5kEFhjqCx5c9qa/pOwnXL8CJUBw4DPsY0Ir8= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Vincent Guittot , "Peter Zijlstra (Intel)" , Valentin Schneider , Dietmar Eggemann Subject: [PATCH 5.7 220/244] sched/fair: handle case of task_h_load() returning 0 Date: Mon, 20 Jul 2020 17:38:11 +0200 Message-Id: <20200720152836.312927779@linuxfoundation.org> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200720152825.863040590@linuxfoundation.org> References: <20200720152825.863040590@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Vincent Guittot commit 01cfcde9c26d8555f0e6e9aea9d6049f87683998 upstream. task_h_load() can return 0 in some situations like running stress-ng mmapfork, which forks thousands of threads, in a sched group on a 224 cores system. The load balance doesn't handle this correctly because env->imbalance never decreases and it will stop pulling tasks only after reaching loop_max, which can be equal to the number of running tasks of the cfs. Make sure that imbalance will be decreased by at least 1. misfit task is the other feature that doesn't handle correctly such situation although it's probably more difficult to face the problem because of the smaller number of CPUs and running tasks on heterogenous system. We can't simply ensure that task_h_load() returns at least one because it would imply to handle underflow in other places. Signed-off-by: Vincent Guittot Signed-off-by: Peter Zijlstra (Intel) Reviewed-by: Valentin Schneider Reviewed-by: Dietmar Eggemann Tested-by: Dietmar Eggemann Cc: # v4.4+ Link: https://lkml.kernel.org/r/20200710152426.16981-1-vincent.guittot@linaro.org Signed-off-by: Greg Kroah-Hartman --- kernel/sched/fair.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -4033,7 +4033,11 @@ static inline void update_misfit_status( return; } - rq->misfit_task_load = task_h_load(p); + /* + * Make sure that misfit_task_load will not be null even if + * task_h_load() returns 0. + */ + rq->misfit_task_load = max_t(unsigned long, task_h_load(p), 1); } #else /* CONFIG_SMP */ @@ -7633,7 +7637,14 @@ static int detach_tasks(struct lb_env *e switch (env->migration_type) { case migrate_load: - load = task_h_load(p); + /* + * Depending of the number of CPUs and tasks and the + * cgroup hierarchy, task_h_load() can return a null + * value. Make sure that env->imbalance decreases + * otherwise detach_tasks() will stop only after + * detaching up to loop_max tasks. + */ + load = max_t(unsigned long, task_h_load(p), 1); if (sched_feat(LB_MIN) && load < 16 && !env->sd->nr_balance_failed)