Received: by 2002:a25:c593:0:0:0:0:0 with SMTP id v141csp1539020ybe; Mon, 2 Sep 2019 23:20:56 -0700 (PDT) X-Google-Smtp-Source: APXvYqwL0JB7MZvDVdO0swREY5rSAwpwRc4LLHx5uCYDesjGAhbTOEHqVhA2dxtfm7Qe/Fq6OphN X-Received: by 2002:a17:90b:948:: with SMTP id dw8mr669083pjb.48.1567491656881; Mon, 02 Sep 2019 23:20:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1567491656; cv=none; d=google.com; s=arc-20160816; b=nES0TMFuMoZGv21SdtXLCSk5rP8VaIrbx9bJSUFTU6+2W3W0lvt1s0PxWLAB7nheKh OHCeoJ5Uo1GMiySnOd+sEoKF7XALCdzpsh49+bWj5iaHNMC9Hej/pSB44fxBkbtcBJL8 1+aAxKrz9ZwfZ7BqwHzI0EqcnkptYoO2aO3uLuqKePWAMEH7dp4SZUwFGhhN9ba6ibvy KfWCktXeItnzZ0lk7RdjDSYUbRBmtfpr/kBvqRtjpJZQ2GeLliYNoIxmF2xnA3GjoooP DS569jeU7ELuCvuMaEckGXA53+dJOLFS8JA7glYJcCxHIulT3tx32/YcKFqDYr+8fxXV QwNQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject:dkim-signature; bh=vpywQY0jhYCtLj16pKTZzrclmKJxpqH5sO++tsorcW0=; b=TwZ+0wZAqdSli6ZRSu4164t3mOXBniguLrssUCCr7B/q7n+gIgbPoeEQD1ZIWPEngW JKzEGP8SmqMzA36BabTWa7PhrYBdMscTSWNeMui0h213PFh/lidP3VZOcDvJc+fX9erU LYnMQDzHgJF/JNGoJzI8hEp4ZrFG6aTem7JegClczRodzRV1H4MGbQ7/7AF9NUelx+IQ Z0omCmUQLOxMPk365h1qOZUPA+SukcMFoqklIrISzbls+TIM4OSGWtS/2+XcYCDGplC0 2p9b4MHKgO0NPN4d1wwB7UzVK6aNELZ//H38jJProLO8U7Srr2ZKMC3/UlWEF11Vi1in GelA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@c-s.fr header.s=mail header.b=MLogrkjT; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id j3si14443713pld.431.2019.09.02.23.20.40; Mon, 02 Sep 2019 23:20:56 -0700 (PDT) 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=@c-s.fr header.s=mail header.b=MLogrkjT; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726452AbfICGTm (ORCPT + 99 others); Tue, 3 Sep 2019 02:19:42 -0400 Received: from pegase1.c-s.fr ([93.17.236.30]:18832 "EHLO pegase1.c-s.fr" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725848AbfICGTl (ORCPT ); Tue, 3 Sep 2019 02:19:41 -0400 Received: from localhost (mailhub1-int [192.168.12.234]) by localhost (Postfix) with ESMTP id 46Mxcq0v7nzB09ZC; Tue, 3 Sep 2019 08:19:39 +0200 (CEST) Authentication-Results: localhost; dkim=pass reason="1024-bit key; insecure key" header.d=c-s.fr header.i=@c-s.fr header.b=MLogrkjT; dkim-adsp=pass; dkim-atps=neutral X-Virus-Scanned: Debian amavisd-new at c-s.fr Received: from pegase1.c-s.fr ([192.168.12.234]) by localhost (pegase1.c-s.fr [192.168.12.234]) (amavisd-new, port 10024) with ESMTP id q27xp8ZHa-je; Tue, 3 Sep 2019 08:19:39 +0200 (CEST) Received: from messagerie.si.c-s.fr (messagerie.si.c-s.fr [192.168.25.192]) by pegase1.c-s.fr (Postfix) with ESMTP id 46Mxcp6v03z9vBnX; Tue, 3 Sep 2019 08:19:38 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=c-s.fr; s=mail; t=1567491579; bh=vpywQY0jhYCtLj16pKTZzrclmKJxpqH5sO++tsorcW0=; h=Subject:To:Cc:References:From:Date:In-Reply-To:From; b=MLogrkjT5XOSI5cZayVsFTMCcSoCuHf36ABgH/ikEzCiH2/FPIB9FWVSFOLz4UQhK HSIteJrIO9Uh4EL7RssqI+2ia25i4v8EQDp/PA3dj2u+1a9/I0BLYTsE+NwQuxa9t0 D7v7bsXUQULUZAhTwvluxL9d+EpRFhNrNed6e3jg= Received: from localhost (localhost [127.0.0.1]) by messagerie.si.c-s.fr (Postfix) with ESMTP id D15A28B7A3; Tue, 3 Sep 2019 08:19:39 +0200 (CEST) X-Virus-Scanned: amavisd-new at c-s.fr Received: from messagerie.si.c-s.fr ([127.0.0.1]) by localhost (messagerie.si.c-s.fr [127.0.0.1]) (amavisd-new, port 10023) with ESMTP id xkPFnxZYp08y; Tue, 3 Sep 2019 08:19:39 +0200 (CEST) Received: from [192.168.4.90] (unknown [192.168.4.90]) by messagerie.si.c-s.fr (Postfix) with ESMTP id A71078B761; Tue, 3 Sep 2019 08:19:38 +0200 (CEST) Subject: Re: [PATCH v2 4/6] powerpc: Chunk calls to flush_dcache_range in arch_*_memory To: Alastair D'Silva , alastair@d-silva.org Cc: Benjamin Herrenschmidt , Paul Mackerras , Michael Ellerman , Thomas Gleixner , Greg Kroah-Hartman , Qian Cai , Nicholas Piggin , Allison Randal , Andrew Morton , Michal Hocko , Mike Rapoport , David Hildenbrand , linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org References: <20190903052407.16638-1-alastair@au1.ibm.com> <20190903052407.16638-5-alastair@au1.ibm.com> From: Christophe Leroy Message-ID: <3bde4dbc-5176-0df5-a0bf-993eef2a333b@c-s.fr> Date: Tue, 3 Sep 2019 08:19:38 +0200 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 MIME-Version: 1.0 In-Reply-To: <20190903052407.16638-5-alastair@au1.ibm.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: fr Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Le 03/09/2019 à 07:23, Alastair D'Silva a écrit : > From: Alastair D'Silva > > When presented with large amounts of memory being hotplugged > (in my test case, ~890GB), the call to flush_dcache_range takes > a while (~50 seconds), triggering RCU stalls. > > This patch breaks up the call into 1GB chunks, calling > cond_resched() inbetween to allow the scheduler to run. > > Signed-off-by: Alastair D'Silva > --- > arch/powerpc/mm/mem.c | 18 ++++++++++++++++-- > 1 file changed, 16 insertions(+), 2 deletions(-) > > diff --git a/arch/powerpc/mm/mem.c b/arch/powerpc/mm/mem.c > index cd540123874d..854aaea2c6ae 100644 > --- a/arch/powerpc/mm/mem.c > +++ b/arch/powerpc/mm/mem.c > @@ -104,11 +104,14 @@ int __weak remove_section_mapping(unsigned long start, unsigned long end) > return -ENODEV; > } > > +#define FLUSH_CHUNK_SIZE SZ_1G Maybe the name is a bit long for a local define. See if we could reduce code line splits below by shortening this name. > + > int __ref arch_add_memory(int nid, u64 start, u64 size, > struct mhp_restrictions *restrictions) > { > unsigned long start_pfn = start >> PAGE_SHIFT; > unsigned long nr_pages = size >> PAGE_SHIFT; > + u64 i; > int rc; > > resize_hpt_for_hotplug(memblock_phys_mem_size()); > @@ -120,7 +123,12 @@ int __ref arch_add_memory(int nid, u64 start, u64 size, > start, start + size, rc); > return -EFAULT; > } > - flush_dcache_range(start, start + size); > + > + for (i = 0; i < size; i += FLUSH_CHUNK_SIZE) { > + flush_dcache_range(start + i, > + min(start + size, start + i + FLUSH_CHUNK_SIZE)); My eyes don't like it. What about for (; i < size; i += FLUSH_CHUNK_SIZE) { int len = min(size - i, FLUSH_CHUNK_SIZE); flush_dcache_range(start + i, start + i + len); cond_resched(); } or end = start + size; for (; start < end; start += FLUSH_CHUNK_SIZE, size -= FLUSH_CHUNK_SIZE) { int len = min(size, FLUSH_CHUNK_SIZE); flush_dcache_range(start, start + len); cond_resched(); } > + cond_resched(); > + } > > return __add_pages(nid, start_pfn, nr_pages, restrictions); > } > @@ -131,13 +139,19 @@ void __ref arch_remove_memory(int nid, u64 start, u64 size, > unsigned long start_pfn = start >> PAGE_SHIFT; > unsigned long nr_pages = size >> PAGE_SHIFT; > struct page *page = pfn_to_page(start_pfn) + vmem_altmap_offset(altmap); > + u64 i; > int ret; > > __remove_pages(page_zone(page), start_pfn, nr_pages, altmap); > > /* Remove htab bolted mappings for this section of memory */ > start = (unsigned long)__va(start); > - flush_dcache_range(start, start + size); > + for (i = 0; i < size; i += FLUSH_CHUNK_SIZE) { > + flush_dcache_range(start + i, > + min(start + size, start + i + FLUSH_CHUNK_SIZE)); > + cond_resched(); > + } > + This piece of code looks pretty similar to the one before. Can we refactor into a small helper ? > ret = remove_section_mapping(start, start + size); > WARN_ON_ONCE(ret); > > Christophe