Received: by 10.223.164.202 with SMTP id h10csp2133178wrb; Sat, 18 Nov 2017 13:50:35 -0800 (PST) X-Google-Smtp-Source: AGs4zMYZNHHfhSzMvjtRYELzUimFXLXe069nPAJqTkn6A1n38BUTil1TVd8Zeozu3l4pIeSa0RSX X-Received: by 10.84.248.142 with SMTP id q14mr9206834pll.102.1511041835380; Sat, 18 Nov 2017 13:50:35 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1511041835; cv=none; d=google.com; s=arc-20160816; b=blHVluOy4yBQITIfzIDk+xg++5nPiNzZfnWpu2Ergy5iUWGFP/UHuainMEkwHfTrbo wdEO/yQIZ5ZcKkiGnK2P/BxM2N5dS44qtcH8cbzJPkWW71kR62cZ5NlHvYNbSwtJ3j0c otFjmyiJ2/axqS1aBUb14oyr0OyYXXo9V1JM0OM5xi1XrEjAZhMJKphXysH7WWRkL2Cv DErRo+zmJ57TZvxlgT3tA5wxM1qPQPOkRNeY1Nqo9IAp/52RtJHoUSB9kfkpSzBTTw7o ARXoT4AQH+INugzNnhOQirUy3s+K2BzKeM7GVeSswBV10X14qGqKhxmrYuWSz391L8xk 4BqQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :references:in-reply-to:mime-version:dkim-signature :arc-authentication-results; bh=AyZWqlh0ZNzopVvLhOu+r7TgljlqDxFB1SswQbMYWjA=; b=CSFCXSPIUwGLbupL2J5yS5hIgj+u9zRLczp1k129RaUxTpJDN4YNGnAFdbUrGsqZ2p Sp/+1RS4sezpbOBkpX8owdv81Rs3YynbI4lwhaKxxaHUHZf7K9ARoF29snBASzRRgTLP ssJb9i37mI3Md29dltpsgmWah98Tub3fkTBoqa9P2vjPAaW0hQAClAPS9Xr4ibZAvC/5 E5EMVHvK2lBJ1cSTnLQbvzEvxPjNqw5VmNJGt/ke7+W/aRVmoKpey/pZFTjPReFowgUE T/X0ubmOOHxtOv15SnC0z9p2rQUVRasouEU6ZHtWXba73fMXZrguzpUmXSd9GLFuT3LL ckHg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=fLBw+d2X; 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=NONE 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 u26si5504682pfh.388.2017.11.18.13.50.22; Sat, 18 Nov 2017 13:50:35 -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=fLBw+d2X; 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=NONE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1161364AbdKRC3n (ORCPT + 93 others); Fri, 17 Nov 2017 21:29:43 -0500 Received: from mail-io0-f194.google.com ([209.85.223.194]:33306 "EHLO mail-io0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1161318AbdKRC3f (ORCPT ); Fri, 17 Nov 2017 21:29:35 -0500 Received: by mail-io0-f194.google.com with SMTP id i184so3249675ioa.0; Fri, 17 Nov 2017 18:29:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=AyZWqlh0ZNzopVvLhOu+r7TgljlqDxFB1SswQbMYWjA=; b=fLBw+d2XODEAneMVpkXSrL5LlsGnV61MRLC3cuEKBwMfaasSccjXSAX4wnN6Vn6gUq nsD/8J0uTnzIfISiGuTQzM5xzz9u4JoniDJznMMsh82t6xW3o2Cm3GC7wVp4qkPwPbRH EuK2goaCe8D0LN1WPzL9MiBUcU7bwCRHq46nM9k5xd8+aZ1+0rjzupmStbdoEafz8ru5 /w/REu5Q8Rs9DkNTwNvxy2i3l9qTyiabDbB5Bo6RYlvy3mBKDRySXPcvbdeUqguRKSnT yRag6svKKiAjXuf5b/OofFAtmAGzaZGemZuCUsuqq0T37hAvGSsEraYeADIT4Y5x1d9r U56w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=AyZWqlh0ZNzopVvLhOu+r7TgljlqDxFB1SswQbMYWjA=; b=IThGyzn4hMeFRALS/G6XifkvmJEJmbgouMFRRUcvAa59UuLImWRjaOlLl4DsNoTvO8 kpKIehlpKHM3Vt6Fa+xLK5Ixp7eDIiJbp0LZ9s1dNf8hKzk096Ss0vc5lfkyCb0fiKya 8gD7TJUH4/fAGq4ubV/F2HQK89DLNgw3TyWrAj4x758XB+gBpTTDjuFh5I2qKFXFfAWC +6FqUJ2bIylQsVyLJlBPv7s+nJKFqJHmnOZRBW8VTtNtZe3i4kii2GfXc1Ge8ifb0o2X p8TpMTux32rUFjXUdvaB00xnIoncUnF5eVYB1WBWfLeHC2wUjUz7RuZcCnsWrkr9GKcV b4RQ== X-Gm-Message-State: AJaThX7aZ5l9R4f1tEaNW33CiWuNZYqkS7KsqZp78Fwa2ZGnn8xbITZN dMaFAbLyHl1Xc2F3RqJI0TfqBYUaLdeJXuX4pSw= X-Received: by 10.107.33.207 with SMTP id h198mr1420203ioh.167.1510972174581; Fri, 17 Nov 2017 18:29:34 -0800 (PST) MIME-Version: 1.0 Received: by 10.107.160.73 with HTTP; Fri, 17 Nov 2017 18:29:33 -0800 (PST) In-Reply-To: References: <1510888199-5886-1-git-send-email-laoar.shao@gmail.com> <20171117155509.GA920@castle> <20171117164531.GA23745@castle> From: Yafang Shao Date: Sat, 18 Nov 2017 10:29:33 +0800 Message-ID: Subject: Re: [PATCH] mm/shmem: set default tmpfs size according to memcg limit To: Shakeel Butt Cc: Roman Gushchin , Andrew Morton , Johannes Weiner , Vladimir Davydov , Michal Hocko , Tejun Heo , khlebnikov@yandex-team.ru, mka@chromium.org, Hugh Dickins , Cgroups , Linux MM , LKML Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 2017-11-18 1:49 GMT+08:00 Shakeel Butt : > On Fri, Nov 17, 2017 at 9:41 AM, Yafang Shao wrote: >> 2017-11-18 1:35 GMT+08:00 Shakeel Butt : >>> On Fri, Nov 17, 2017 at 9:09 AM, Yafang Shao wrote: >>>> 2017-11-18 0:45 GMT+08:00 Roman Gushchin : >>>>> On Sat, Nov 18, 2017 at 12:20:40AM +0800, Yafang Shao wrote: >>>>>> 2017-11-17 23:55 GMT+08:00 Roman Gushchin : >>>>>> > On Thu, Nov 16, 2017 at 08:43:17PM -0800, Shakeel Butt wrote: >>>>>> >> On Thu, Nov 16, 2017 at 7:09 PM, Yafang Shao wrote: >>>>>> >> > Currently the default tmpfs size is totalram_pages / 2 if mount tmpfs >>>>>> >> > without "-o size=XXX". >>>>>> >> > When we mount tmpfs in a container(i.e. docker), it is also >>>>>> >> > totalram_pages / 2 regardless of the memory limit on this container. >>>>>> >> > That may easily cause OOM if tmpfs occupied too much memory when swap is >>>>>> >> > off. >>>>>> >> > So when we mount tmpfs in a memcg, the default size should be limited by >>>>>> >> > the memcg memory.limit. >>>>>> >> > >>>>>> >> >>>>>> >> The pages of the tmpfs files are charged to the memcg of allocators >>>>>> >> which can be in memcg different from the memcg in which the mount >>>>>> >> operation happened. So, tying the size of a tmpfs mount where it was >>>>>> >> mounted does not make much sense. >>>>>> > >>>>>> > Also, memory limit is adjustable, >>>>>> >>>>>> Yes. But that's irrelevant. >>>>>> >>>>>> > and using a particular limit value >>>>>> > at a moment of tmpfs mounting doesn't provide any warranties further. >>>>>> > >>>>>> >>>>>> I can not agree. >>>>>> The default size of tmpfs is totalram / 2, the reason we do this is to >>>>>> provide any warranties further IMHO. >>>>>> >>>>>> > Is there a reason why the userspace app which is mounting tmpfs can't >>>>>> > set the size based on memory.limit? >>>>>> >>>>>> That's because of misuse. >>>>>> The application should set size with "-o size=" when mount tmpfs, but >>>>>> not all applications do this. >>>>>> As we can't guarantee that all applications will do this, we should >>>>>> give them a proper default value. >>>>> >>>>> The value you're suggesting is proper only if an app which is mounting >>>>> tmpfs resides in the same memcg >>>> >>>> Yes. >>>> But maybe that's mostly used today? >>>> >>>>> and the memory limit will not be adjusted >>>>> significantly later. >>>> >>>> There's a similar issue for physical memory adjusted by memory hotplug. >>>> So what will happen if the physical memory adjusted significantly later ? >>>> >>>>> Otherwise you can end up with a default value, which >>>>> is worse than totalram/2, for instance, if tmpfs is mounted by some helper, >>>>> which is located in a separate and very limited memcg. >>>> >>>> That may happen. >>>> Maybe we could improve the solution to handle this issue ? >>>> >>>> >>> >>> Let's backtrack, what is the actual concern? If a user/process inside >>> a memcg is allocating pages for a file on a tmpfs mounted without size >>> parameter, you want the OS to return ENOSPC (if allocation is done by >>> write syscall) earlier to not cause the user/process's memcg to OOM. >>> Is that right? >>> >> >> Right. >> >>> First, there is no guarantee to not cause OOM by restricting tmpfs to >>> half the size of memcg limit due to the presence of other memory >>> charged to that memcg. The memcg can OOM even before the tmpfs hits >>> its size. >>> >> >> Just guarantee that the OOM not caused by misuse of tmpfs. >> >>> Second, the users who really care to avoid such scenario should just >>> set the size parameter of tmpfs. >> >> Of couse that is the best way. >> But we can not ensue all applications will do it. >> That's why I introduce a proper defalut value for them. >> > > I think we disagree on the how to get proper default value. Unless you > can restrict that all the memory allocated for a tmpfs mount will be > charged to a specific memcg, you should not just pick limit of the > memcg of the process mounting the tmpfs to set the default of tmpfs > mount. If you can restrict tmpfs charging to a specific memcg then the > limit of that memcg should be used to set the default of the tmpfs > mount. However this feature is not present in the upstream kernel at > the moment (We have this feature in our local kernel and I am planning > to upstream that). That will be fine if you could upstream this feature ASAP :) Thanks Yafang From 1584359972983428848@xxx Sat Nov 18 00:03:34 +0000 2017 X-GM-THRID: 1584307723039976913 X-Gmail-Labels: Inbox,Category Forums,HistoricalUnread