Received: by 2002:a05:6a10:2785:0:0:0:0 with SMTP id ia5csp3195478pxb; Tue, 12 Jan 2021 08:34:39 -0800 (PST) X-Google-Smtp-Source: ABdhPJxdvWXHECQ9UZkdppYAQlEE0q2p6p03Np4AHPan1VnUR2i61Rz7Jcnm2yWykgmqZu8H1/Ks X-Received: by 2002:a17:906:848:: with SMTP id f8mr3715792ejd.404.1610469279153; Tue, 12 Jan 2021 08:34:39 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1610469279; cv=none; d=google.com; s=arc-20160816; b=rYfCyWnunV9aG4VuQ4WfIY3930m/oGPObgh2Z9Vn+FCn/+hM483FTVQklhQsa3yuyF YQaPDr1HgsIU5OWoVKFW6Yi6Hyk390eAyPQJfvFw+5U5dJ15GMOu5qKG0JN7CCrYPEk0 3c6jKBdj/AxaejDrQKIvhcCuGeTsU/cbKADcWEug2HIFDL6P5jicjWICxZO2FMnW87qc O/WaPMI8wwnj6FaKumRYx4UyhHkF3QBxe6Wl91TjRrzCwBPTr0exHV+lZpKKt5zBo2ZB gKdAbIysT8HSMykA8GzZRI275DiiP8cdPa3IfiFc+c4QzYgN4aIc9KcHF7MQqaRMnXai cOiw== 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 :message-id:date:subject:cc:to:from:dkim-signature; bh=aSfbgJHMgHLM9rzB5N8TPqwylQdBK6aN3u6pmU/8Jk4=; b=jwqYEIp48KOLjWccjcWBN4btW0UYuxdlB4NulxCbP4Iq90opY5q/AR+Kv/QVKULNnr F82ctI6PgrgS1GE40zys9XkYKfr09zewRMN4MpXMr4TWg8z5M8HSoYB0yZcoOKEAceeh 5HfgvVim731Joe+I98XUvBeapZOiQNpCOPBYei26Cp/IdGYqqTVVCQMPsfcbjSV4fgjQ /LPvVL/AqlpwA2C4bkeH+eMD/8/JcbfWx5J+s9GMSVp/obleBsPseNnL9SSGDuEe0X18 b+nNHMQaf/79gUeDx6+8+sfPgNS2RlzPPsX1CONqKEvkltLTEGKpIi6odFd2DD9RXv1o MKqQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@cmpxchg-org.20150623.gappssmtp.com header.s=20150623 header.b=XRtRi+np; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=cmpxchg.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id ho43si1305155ejc.421.2021.01.12.08.34.14; Tue, 12 Jan 2021 08:34:39 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-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=@cmpxchg-org.20150623.gappssmtp.com header.s=20150623 header.b=XRtRi+np; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=cmpxchg.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387507AbhALQdT (ORCPT + 99 others); Tue, 12 Jan 2021 11:33:19 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35392 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388991AbhALQdT (ORCPT ); Tue, 12 Jan 2021 11:33:19 -0500 Received: from mail-qk1-x736.google.com (mail-qk1-x736.google.com [IPv6:2607:f8b0:4864:20::736]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AB7CEC061575 for ; Tue, 12 Jan 2021 08:32:38 -0800 (PST) Received: by mail-qk1-x736.google.com with SMTP id p14so2340088qke.6 for ; Tue, 12 Jan 2021 08:32:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cmpxchg-org.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=aSfbgJHMgHLM9rzB5N8TPqwylQdBK6aN3u6pmU/8Jk4=; b=XRtRi+npxUhv1aIaFonEpF9d9xK4DvoowayUJ3B3qkBd1aLaEH2E7JKQzu/AV9pDOT fIETBbFsDj6lgUWnkEQOnMgb7rUD27wGjJ5x5wHlEWIAsCLQgmMLTbbFJKgO6jhO5aFm 4xwavol2Mz98x5eMv0tqfMrRy+KoNbmEtxmNcHHm2cFTepKbx9AmChWp/aH65taw8I7q MYxPRcAhTffnCW9cbjoc4FdWKHgpDC4bT+m0LLWJAmr4sKbd8tpTA4wO5kOY8VehxlL7 tABlka6b/ikymYrABypNGD7TfR74nzqfsrYHaT9I0xbrxyLhmu4wIAZH3UjsqchkNTx6 2fuA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=aSfbgJHMgHLM9rzB5N8TPqwylQdBK6aN3u6pmU/8Jk4=; b=o7SrsWAayzeW+o6ux3X3CRnb8I7pGhy/V3nxzIFOjGINVWIl2vfhfNl/OGRt2MtlM9 hFCbpG/8xCwuDQx1/00YbKJ9h8UhjVpAwiJCnZDMC53ezI82onWJgXphjJ2XkM7PrYAN FSRE94wSavW1Y0xFx26l7c0uRtXA2QHbY+V/G76/E2FbJrnekkAi4SonY6+NBV14IBtA 3BReD+rv0ylKC3hYONNWeJw244Wq/p5ShLaQY6HgIOA5/Jwm2hC+fzSQ/UvCjJb2+tGe Rvt8P+WZWa5EcmXgJTOit+OSBEk/uHpXVfz3raDwlVZ5lWXpxjj7ThjE93hyYiQhsFtq c6LA== X-Gm-Message-State: AOAM531lsQNkjWA0OwVEMqmfwkuS772pUPhlPpewA75cY/h7HdisEjws MVVxM3uykvX0v6gXUBvA03P57Q== X-Received: by 2002:a37:aace:: with SMTP id t197mr89781qke.175.1610469157955; Tue, 12 Jan 2021 08:32:37 -0800 (PST) Received: from localhost ([2620:10d:c091:480::1:1fb4]) by smtp.gmail.com with ESMTPSA id m190sm1530954qkb.42.2021.01.12.08.32.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Jan 2021 08:32:37 -0800 (PST) From: Johannes Weiner To: Andrew Morton Cc: Tejun Heo , Roman Gushchin , Michal Hocko , linux-mm@kvack.org, cgroups@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-team@fb.com Subject: [PATCH] mm: memcontrol: prevent starvation when writing memory.high Date: Tue, 12 Jan 2021 11:30:11 -0500 Message-Id: <20210112163011.127833-1-hannes@cmpxchg.org> X-Mailer: git-send-email 2.30.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org When a value is written to a cgroup's memory.high control file, the write() context first tries to reclaim the cgroup to size before putting the limit in place for the workload. Concurrent charges from the workload can keep such a write() looping in reclaim indefinitely. In the past, a write to memory.high would first put the limit in place for the workload, then do targeted reclaim until the new limit has been met - similar to how we do it for memory.max. This wasn't prone to the described starvation issue. However, this sequence could cause excessive latencies in the workload, when allocating threads could be put into long penalty sleeps on the sudden memory.high overage created by the write(), before that had a chance to work it off. Now that memory_high_write() performs reclaim before enforcing the new limit, reflect that the cgroup may well fail to converge due to concurrent workload activity. Bail out of the loop after a few tries. Fixes: 536d3bf261a2 ("mm: memcontrol: avoid workload stalls when lowering memory.high") Cc: # 5.8+ Reported-by: Tejun Heo Signed-off-by: Johannes Weiner --- mm/memcontrol.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 605f671203ef..63a8d47c1cd3 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -6275,7 +6275,6 @@ static ssize_t memory_high_write(struct kernfs_open_file *of, for (;;) { unsigned long nr_pages = page_counter_read(&memcg->memory); - unsigned long reclaimed; if (nr_pages <= high) break; @@ -6289,10 +6288,10 @@ static ssize_t memory_high_write(struct kernfs_open_file *of, continue; } - reclaimed = try_to_free_mem_cgroup_pages(memcg, nr_pages - high, - GFP_KERNEL, true); + try_to_free_mem_cgroup_pages(memcg, nr_pages - high, + GFP_KERNEL, true); - if (!reclaimed && !nr_retries--) + if (!nr_retries--) break; } -- 2.30.0