Received: by 2002:a05:6a10:5bc5:0:0:0:0 with SMTP id os5csp2708481pxb; Tue, 12 Oct 2021 11:50:03 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxgyqe4QP/lD6pBhL6VCYBkAbXlf4FyVxnUk9jOc3FziNxBXkE65dob3YjblgANoXLrmRKx X-Received: by 2002:a63:9a12:: with SMTP id o18mr15493266pge.419.1634064602759; Tue, 12 Oct 2021 11:50:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1634064602; cv=none; d=google.com; s=arc-20160816; b=OSgSfhePhHAl/OeHH1WvCRXNtR2C2o5VPuPCQr6u4ogaj4OYNqP/hqd939c1QzpTEu 7pwHeuqH9ztBMH2E3hTxRrNDTBQWRMAv3wij1uqofSII2YP9dyIOmUS4fbqAa/McBs9c taRykmuB/p6qNHUp4NtSE3Vvcn+MrPReZYMfSMz/rD7OH5R0Sz4daL+bqA80lMVOY4DA IRBXJ0UVbQ20P71udmsaOySu4YFPKX69+9Q9he2QHCIg3lAPtZcf7C4DpqPF7MfM7UnV tQqK1TSrqe4a2i1ZWxlijI1z8PnfYK9+n+PIuSZgcfbb7/y+73SPt6R9TGssdlqOtYPu Tl7A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:content-language :in-reply-to:mime-version:user-agent:date:message-id:from:references :cc:to:subject:dkim-signature; bh=64IcsFb8bBS4pFgFI9KVjfapZy7rEeNKQF8dCkvviYY=; b=nyp32vTnS0Fd44EHQUX7+FDP2uct7IwcGJKv8Gut+OmY/KvUCaaH9JukbgiCtEjkE3 MyMmFFh2FvxTqRnPHF8mGeZyQzgSXeEDjPlR54Ic7tc9m7gEiF/zchdBAny+HQuecsMK Yc+YrkbHM7lvfhL5NCbKZ4+Fa8zIMc73a9Kxl9L+tWXC+4EXfLFwm63nPhD4MoLr+t8o GOkeTOKUCwpgoiGS2ePEacchHJcmymijM8CZQzqjdsSFSxT6nkCcfmWrl54/pehgGVup 01nbUom4if1VMaaqzUCnMjtELgfs4u8TsUE7EDnBVI3MPtbC5YpZUXqjiX6Y7bJa31BQ JISw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=relay header.b=pcmeKt+O; 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=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=virtuozzo.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id 9si14410969pfl.96.2021.10.12.11.49.49; Tue, 12 Oct 2021 11:50:02 -0700 (PDT) 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=@virtuozzo.com header.s=relay header.b=pcmeKt+O; 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=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=virtuozzo.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235422AbhJLSte (ORCPT + 99 others); Tue, 12 Oct 2021 14:49:34 -0400 Received: from relay.sw.ru ([185.231.240.75]:43718 "EHLO relay.sw.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233972AbhJLStd (ORCPT ); Tue, 12 Oct 2021 14:49:33 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=virtuozzo.com; s=relay; h=Content-Type:MIME-Version:Date:Message-ID:From: Subject; bh=64IcsFb8bBS4pFgFI9KVjfapZy7rEeNKQF8dCkvviYY=; b=pcmeKt+OWhafIWGl+ Rsq0UqWHt6l2z4rGEpWKXORZXiSDMKTtmftnTOedW5rwjcVI2qepA2vleNRBTivfqynFbNdjJVz9i rxsu0SoUkl2/uSmisuOWf21E9oDhshP6OrjfrNC1n8SV04Qxku1PBM1OKoscx4JNdBmVKnrZn6siY =; Received: from [172.29.1.17] by relay.sw.ru with esmtp (Exim 4.94.2) (envelope-from ) id 1maMml-005pmF-PE; Tue, 12 Oct 2021 21:45:59 +0300 Subject: Re: [PATCH mm v3] memcg: enable memory accounting in __alloc_pages_bulk To: Michal Hocko Cc: Johannes Weiner , Vladimir Davydov , Andrew Morton , Shakeel Butt , Mel Gorman , Roman Gushchin , Uladzislau Rezki , Vlastimil Babka , cgroups@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, kernel@openvz.org References: <0baa2b26-a41b-acab-b75d-72ec241f5151@virtuozzo.com> <60df0efd-f458-a13c-7c89-749bdab21d1d@virtuozzo.com> From: Vasily Averin Message-ID: <3467508f-0f0f-fc28-c973-ad9f0eeb9818@virtuozzo.com> Date: Tue, 12 Oct 2021 21:45:38 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.13.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 12.10.2021 18:36, Michal Hocko wrote: > On Tue 12-10-21 17:58:21, Vasily Averin wrote: >> Enable memory accounting for bulk page allocator. > > ENOCHANGELOG > > And I have to say I am not very happy about the solution. It adds a very > tricky code where it splits different charging steps apart. > > Would it be just too inefficient to charge page-by-page once all pages > are already taken away from the pcp lists? This bulk should be small so > this shouldn't really cause massive problems. I mean something like > > diff --git a/mm/page_alloc.c b/mm/page_alloc.c > index b37435c274cf..8bcd69195ef5 100644 > --- a/mm/page_alloc.c > +++ b/mm/page_alloc.c > @@ -5308,6 +5308,10 @@ unsigned long __alloc_pages_bulk(gfp_t gfp, int preferred_nid, > > local_unlock_irqrestore(&pagesets.lock, flags); > > + if (memcg_kmem_enabled() && (gfp & __GFP_ACCOUNT)) { > + /* charge pages here */ > + } > + > __count_zid_vm_events(PGALLOC, zone_idx(zone), nr_account); > zone_statistics(ac.preferred_zoneref->zone, zone, nr_account); > In general it looks like we can do it. We can traverse via filled page_array or page_list. For page_array we need to check is the page already accounted (incoming array can contain some pages already, both in the beginning and in middle) For each taken page we can try to charge it. If it was charges successfully -- we will process next page in list/array. When charge fails we need to remove rest of pages from list/array and somehow release them. At present I do not understand how to do it correctly -- perhaps just call free_page() ? Finally, we'll need to adjust nr_account and nr_populated properly. I'll try to implement this tomorrow. Thank you, Vasily Averin