Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp1894594imu; Thu, 24 Jan 2019 03:57:31 -0800 (PST) X-Google-Smtp-Source: ALg8bN6x4i+bar0N2gMILWWmvJg7nSMVcnM5SiAXzpK25WJOt8fHHtUP8AIpSIooClV9HXj0YVgz X-Received: by 2002:a63:6604:: with SMTP id a4mr5671496pgc.118.1548331051526; Thu, 24 Jan 2019 03:57:31 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1548331051; cv=none; d=google.com; s=arc-20160816; b=H5hpyvrxD2DVOZZtU4uHUVp6Qapl8T6JUAjjTBQ0UmjuyaMpAZs5D5Mhf+0p+RM+5S 0ssmM3f1aBDYFFLqvdzCH4KpzrsFr8Ta6HbWpDVz2zvWjdgyM2meG9rmnKBiq/aWaPc4 CoyCZMw5OtWugJWNLDyGmM0gDmi67VP9oVDPnkJ0MR9POxO2xRZZR3p/9TLy6G8l3O/0 TRoPDlSUnATo0J6rbXoGe/u0TxcWlpWpm0SeCwDEHWTMu04AP11RKikcnuhbZQHUBHvK t573kcXY6uNYJ91UQ8BlyxAjh0PkHE/TKTFKlw2aLiYrcI0lnw2zztIBXoV3cJUmcXSD xMHw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature; bh=LH2WfGm9JecgWZzx+vTKmh903j2Nkd/dyKUicbvBqL4=; b=qnqrj1Etd/p+S352jpd0jYIpLHumiEmEbPaWeWI+28nogI6aN1KbRkhDyOay6OSg2o ZLBZSP2uyWFhtj8Z6Zh4hup6yFd4xrXMvHaowqJV8PgpOHqRVqyiFyHjr49HlUMqzVuG VS67cQuHejsnjWkLXXgV6HhdNgmwSRWaE9xEZq8g2X3Ti4nSlziFUxVQjh3jCGjEQOQg kOfgmCj4kIPTKHnS5krsWkEz6WKInf1ZKWsnKozqgj7lNe5M+v3lophKdc76eTJREt/X 0UbMdmIxZEk2f0CEw8Evh4gsH+Rx0fs46yuwfdZDZT/gSs5wUr+10/6ksOKqQPc22o3W Qb6w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=otCEUxy9; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id n3si22896737pld.36.2019.01.24.03.57.16; Thu, 24 Jan 2019 03:57:31 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=otCEUxy9; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727781AbfAXL5I (ORCPT + 99 others); Thu, 24 Jan 2019 06:57:08 -0500 Received: from mail-lf1-f68.google.com ([209.85.167.68]:41301 "EHLO mail-lf1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727616AbfAXL5H (ORCPT ); Thu, 24 Jan 2019 06:57:07 -0500 Received: by mail-lf1-f68.google.com with SMTP id c16so4086189lfj.8 for ; Thu, 24 Jan 2019 03:57:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=LH2WfGm9JecgWZzx+vTKmh903j2Nkd/dyKUicbvBqL4=; b=otCEUxy9/8LsDspYMLhrFYV4Mt3MDXaRGgPVnH3raQohrhx3IENSURFXhFQYXzsedz F4TmLxi9rxVeDu/K5mpRe8tNOBqwW8/6DW+raTEvmAFy7JbwWK3yRgLNxgAoAOd0FHUm bcVS1WGX45Lcog/DowgR6A3GWH+Gwcaqv7DRM1arVX9Qx7UV6yAaHTWg8BwBLAqLTa4L v9WHSo3jdFFj5HAV+vhUWLeL1L0oKOYodltmV+WWkjeOYwX90wwLc5AxpiP/IzMuWLt/ okbN9C5tHA7QCOtBkHtA0+7N6IBrwXy+ImLXQDRTHirzyTzuG9ZtF/8/bfru/NNQ/O37 f7bw== 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:in-reply-to :references; bh=LH2WfGm9JecgWZzx+vTKmh903j2Nkd/dyKUicbvBqL4=; b=RuJe+ej4O7K+exmEGcAptJFHOi+kLOMp4uvMAwCHZEm3TfMG0szkgmrwCNq/xCGk6/ Xc1yGnowZaVZcjJnU9M1RfmiVpWpV5o7bs2VwyDWEKl+E79RrKLMrhuy/HotLER5Uwp+ NbBPB003xcX3/lLfbgy3hHlH6pgoTTz2ynINHvwJsUWqi/nmVwfu7BwSTqSZQsdmFsFm QqnJxWZcs8nvwuooKEzJu5ZWMXtg+ZTsFquTW0Uv/g/8pEYfOdoDZSvIZhO7+ONZ8iIY ayvz4fHDk8sqWbrawnuvV+R0JoKahDJZMLha20QgLBasxNyVI1xhD2mOa138o1SUOUV3 aAPQ== X-Gm-Message-State: AJcUukcgTzp04IIRydomz23qL6ymfy1FCa7EEa9NSZpm3FL3iBgvghg9 DIWCxdjg3bGz687zwr+b1xw= X-Received: by 2002:a19:2106:: with SMTP id h6mr4947446lfh.29.1548331024917; Thu, 24 Jan 2019 03:57:04 -0800 (PST) Received: from pc636.semobile.internal ([37.139.158.167]) by smtp.gmail.com with ESMTPSA id w202sm920226lff.31.2019.01.24.03.57.03 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 24 Jan 2019 03:57:04 -0800 (PST) From: "Uladzislau Rezki (Sony)" To: Andrew Morton , Michal Hocko , Matthew Wilcox , linux-mm@kvack.org Cc: LKML , Thomas Garnier , Oleksiy Avramchenko , Steven Rostedt , Joel Fernandes , Thomas Gleixner , Ingo Molnar , Tejun Heo , "Uladzislau Rezki (Sony)" Subject: [PATCH v1 2/2] mm: add priority threshold to __purge_vmap_area_lazy() Date: Thu, 24 Jan 2019 12:56:48 +0100 Message-Id: <20190124115648.9433-3-urezki@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190124115648.9433-1-urezki@gmail.com> References: <20190124115648.9433-1-urezki@gmail.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org commit 763b218ddfaf ("mm: add preempt points into __purge_vmap_area_lazy()") introduced some preempt points, one of those is making an allocation more prioritized over lazy free of vmap areas. Prioritizing an allocation over freeing does not work well all the time, i.e. it should be rather a compromise. 1) Number of lazy pages directly influence on busy list length thus on operations like: allocation, lookup, unmap, remove, etc. 2) Under heavy stress of vmalloc subsystem i run into a situation when memory usage gets increased hitting out_of_memory -> panic state due to completely blocking of logic that frees vmap areas in the __purge_vmap_area_lazy() function. Establish a threshold passing which the freeing is prioritized back over allocation creating a balance between each other. Signed-off-by: Uladzislau Rezki (Sony) --- mm/vmalloc.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/mm/vmalloc.c b/mm/vmalloc.c index fb4fb5fcee74..abe83f885069 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c @@ -661,23 +661,27 @@ static bool __purge_vmap_area_lazy(unsigned long start, unsigned long end) struct llist_node *valist; struct vmap_area *va; struct vmap_area *n_va; - bool do_free = false; + int resched_threshold; lockdep_assert_held(&vmap_purge_lock); valist = llist_del_all(&vmap_purge_list); + if (unlikely(valist == NULL)) + return false; + + /* + * TODO: to calculate a flush range without looping. + * The list can be up to lazy_max_pages() elements. + */ llist_for_each_entry(va, valist, purge_list) { if (va->va_start < start) start = va->va_start; if (va->va_end > end) end = va->va_end; - do_free = true; } - if (!do_free) - return false; - flush_tlb_kernel_range(start, end); + resched_threshold = (int) lazy_max_pages() << 1; spin_lock(&vmap_area_lock); llist_for_each_entry_safe(va, n_va, valist, purge_list) { @@ -685,7 +689,9 @@ static bool __purge_vmap_area_lazy(unsigned long start, unsigned long end) __free_vmap_area(va); atomic_sub(nr, &vmap_lazy_nr); - cond_resched_lock(&vmap_area_lock); + + if (atomic_read(&vmap_lazy_nr) < resched_threshold) + cond_resched_lock(&vmap_area_lock); } spin_unlock(&vmap_area_lock); return true; -- 2.11.0