From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.9 required=3.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_1,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id EC8EFC0044D for ; Wed, 11 Mar 2020 19:31:58 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id BC30420736 for ; Wed, 11 Mar 2020 19:31:59 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="DWMg+i0R" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org BC30420736 Authentication-Results: mail.kernel.org; dmarc=fail (p=reject dis=none) header.from=google.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 4063C6B0005; Wed, 11 Mar 2020 15:31:58 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 3B7F06B0006; Wed, 11 Mar 2020 15:31:58 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 2A4936B0007; Wed, 11 Mar 2020 15:31:58 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0238.hostedemail.com [216.40.44.238]) by kanga.kvack.org (Postfix) with ESMTP id 0EFAD6B0005 for ; Wed, 11 Mar 2020 15:31:58 -0400 (EDT) Received: from smtpin24.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay04.hostedemail.com (Postfix) with ESMTP id B0D073CF6 for ; Wed, 11 Mar 2020 19:31:57 +0000 (UTC) X-FDA: 76584076674.24.test86_111489ab6a924 X-HE-Tag: test86_111489ab6a924 X-Filterd-Recvd-Size: 7852 Received: from mail-pg1-f193.google.com (mail-pg1-f193.google.com [209.85.215.193]) by imf15.hostedemail.com (Postfix) with ESMTP for ; Wed, 11 Mar 2020 19:31:57 +0000 (UTC) Received: by mail-pg1-f193.google.com with SMTP id x7so1734623pgh.5 for ; Wed, 11 Mar 2020 12:31:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:from:to:cc:subject:in-reply-to:message-id:references :user-agent:mime-version; bh=nrr0UrVgn5X3zlkkY/AvuhDFOpNyA1sBfPxPwX99Zio=; b=DWMg+i0RW/xutS/C0lrLv5qkdOkRJdJrd7AEzJ+nhuFzo5UDID2I7osmZjKepfTMG4 QQ67+/sCPNIZ7NiaU8mRmDgy1xa+7fBGAeZZZkoTx0ai5DVbYNyxHYdGOZP0auhU1pUF UePGYNNb68RUudvV922Q5HtVehqC2USEIk+jpbQq+gqi7fI8y+o1huJ0sJdj4YlbDaNc a+tkRUGnWS+VXaa4CUwX7hR+D1hdRnZIhTJ92Lgzzk3/jj1uAGlq0dC5KMSpGWJr/Wmn sId2NEwJHNKE/JOvxQjgupkfsriJZ9/JR7Q0YcDQmyz76MrrEKq3+0syQOUAMb6O47t8 CX2Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:in-reply-to:message-id :references:user-agent:mime-version; bh=nrr0UrVgn5X3zlkkY/AvuhDFOpNyA1sBfPxPwX99Zio=; b=g6yADTVXxUJtG6FFy5nfY2WgD3jBj65G3mC51nNVFe3qM4ootRd6MC/sM1LvoHoN3/ tqa0BKhOePnj9z7bg6VMCAkbsiQr6EobG7F2chKFcf96XVukLp8y3j2dW6uddqol0X9y SKVTGHMZOcI+S//ZDbp8tzsGA2jnZUXAiuPPZc3Bpf66ntbIbafsr5Avf6RYLESCj9sQ vupizybV0lTK0vn98aZiZ5MJsEET21D77DbuDUHVLsPLmv/WKnayyKSjKBJfe6reTUDM /IJV5lRfZMakPqlOUBYduAY9ox6N/37/Z491yUyJwwRU9Tfk3kUkxxDP5GE3WhufjE9P AxQg== X-Gm-Message-State: ANhLgQ0i5UQgM9xqal4bXO7pLKHvNnpUx7MR7BT+98wnuL4uqdBS19t9 elBWezLxW8TVSfx8EEWrcFW59Q== X-Google-Smtp-Source: ADFU+vukvfW+3meQvVc7eQJOnbW2y3Dt9sKRma1Xy4nV73Wr4TLb+pJSKHj51H8zu6dSS6TupFT38g== X-Received: by 2002:a62:7f8f:: with SMTP id a137mr4368557pfd.145.1583955115898; Wed, 11 Mar 2020 12:31:55 -0700 (PDT) Received: from [2620:15c:17:3:3a5:23a7:5e32:4598] ([2620:15c:17:3:3a5:23a7:5e32:4598]) by smtp.gmail.com with ESMTPSA id k20sm29707459pfk.123.2020.03.11.12.31.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Mar 2020 12:31:54 -0700 (PDT) Date: Wed, 11 Mar 2020 12:31:53 -0700 (PDT) From: David Rientjes X-X-Sender: rientjes@chino.kir.corp.google.com To: Ivan Teterevkov cc: "corbet@lwn.net" , "akpm@linux-foundation.org" , "mchehab+samsung@kernel.org" , "tglx@linutronix.de" , "jpoimboe@redhat.com" , "pawan.kumar.gupta@linux.intel.com" , "jgross@suse.com" , "oneukum@suse.com" , "linux-doc@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "linux-mm@kvack.org" Subject: Re: [PATCH] mm/vmscan: add vm_swappiness configuration knobs In-Reply-To: Message-ID: References: User-Agent: Alpine 2.21 (DEB 202 2017-01-01) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On Wed, 11 Mar 2020, Ivan Teterevkov wrote: > This patch adds a couple of knobs: > > - The configuration option (CONFIG_VM_SWAPPINESS). > - The command line parameter (vm_swappiness). > > The default value is preserved, but now defined by CONFIG_VM_SWAPPINESS. > > Historically, the default swappiness is set to the well-known value 60, > and this works well for the majority of cases. The vm_swappiness is also > exposed as the kernel parameter that can be changed at runtime too, e.g. > with sysctl. > > This approach might not suit well some configurations, e.g. systemd-based > distros, where systemd is put in charge of the cgroup controllers, > including the memory one. In such cases, the default swappiness 60 > is copied across the cgroup subtrees early at startup, when systemd > is arranging the slices for its services, before the sysctl.conf > or tmpfiles.d/*.conf changes are applied. > Seems like something that can be fully handled by an initscript that would set the sysctl and then iterate the memcg hierarchy propagating the non-default value. I don't think that's too much of an ask if userspace wants to manipulate the swappiness value. Or maybe we can be more clever: have memcg->swappiness store -1 by default unless it is changed by the user explicitly and then have mem_cgroup_swappiness() return vm_swappiness for this value. If the user overwrites it, it's intended. So there are a couple options here but I don't think one of them is to add a new config option or kernel command line option. > One could run a script to traverse the cgroup trees later and set the > desired memory.swappiness individually in each occurrence when the runtime > is set up, but this would require some amount of work to implement > properly. Instead, why not set the default swappiness as early as possible? > > Signed-off-by: Ivan Teterevkov > --- > .../admin-guide/kernel-parameters.txt | 4 ++++ > mm/Kconfig | 10 ++++++++ > mm/vmscan.c | 24 ++++++++++++++++++- > 3 files changed, 37 insertions(+), 1 deletion(-) > > diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt > index c07815d230bc..5d54a4303522 100644 > --- a/Documentation/admin-guide/kernel-parameters.txt > +++ b/Documentation/admin-guide/kernel-parameters.txt > @@ -5317,6 +5317,10 @@ > P Enable page structure init time poisoning > - Disable all of the above options > > + vm_swappiness= [KNL] > + Sets the default vm_swappiness. > + Ranges from 0 to 100, the default value is 60. > + > vmalloc=nn[KMG] [KNL,BOOT] Forces the vmalloc area to have an exact > size of . This can be used to increase the > minimum size (128MB on x86). It can also be used to diff --git a/mm/Kconfig b/mm/Kconfig index ab80933be65f..ec59c19e578e 100644 > --- a/mm/Kconfig > +++ b/mm/Kconfig > @@ -739,4 +739,14 @@ config ARCH_HAS_HUGEPD config MAPPING_DIRTY_HELPERS > bool > > +config VM_SWAPPINESS > + int "Default memory swappiness" > + default 60 > + range 0 100 > + help > + Sets the default vm_swappiness, that could be changed later > + in the runtime, e.g. kernel command line, sysctl, etc. > + > + Higher value means more swappy. Historically, defaults to 60. > + > endmenu > diff --git a/mm/vmscan.c b/mm/vmscan.c > index 876370565455..7d2d3550f698 100644 > --- a/mm/vmscan.c > +++ b/mm/vmscan.c > @@ -163,7 +163,29 @@ struct scan_control { > /* > * From 0 .. 100. Higher means more swappy. > */ > -int vm_swappiness = 60; > +int vm_swappiness = CONFIG_VM_SWAPPINESS; > + > +static int __init swappiness_cmdline(char *str) { > + int val, err; > + > + if (!str) > + return -EINVAL; > + > + err = kstrtoint(str, 10, &val); > + if (err) > + return -EINVAL; > + > + if (val < 0 || val > 100) > + return -EINVAL; > + > + vm_swappiness = val; > + > + return 0; > +} > + > +early_param("vm_swappiness", swappiness_cmdline); > + > /* > * The total number of pages which are beyond the high watermark within all > * zones.