Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp3461197pxb; Mon, 25 Jan 2021 17:32:40 -0800 (PST) X-Google-Smtp-Source: ABdhPJwqy9L1hv4uuhUquBdKa6eXz0O1DXBl1wCzQ433tOCEz5xqSTyTZp07o2E1uKKWck38WBVj X-Received: by 2002:a17:906:688c:: with SMTP id n12mr2089121ejr.111.1611624760523; Mon, 25 Jan 2021 17:32:40 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1611624760; cv=none; d=google.com; s=arc-20160816; b=hALxzIDQNBu8dfOHs/L2LeMkCeUypdRe5gkAeYWI/xSUqfxrgJz/IgJnEeyD7ccXyK BJTwjkCZDBshJ45Sv5cfI9kQTOvFw6QUQH+qQc5XP/SZwFR5FPhbj0n2GOpLNTaFbTCV x8FIRuYILiNgMzb1zNBiZtRu6f/2p3Xbw5UEXrPfZA8zs7IiaXrmz6XoJDLiOCqKZ/gU 46+VXYr8aU7tzOSULlHulzO+C/NqwPuKHAuTjFybAzCqdpnhljWOrxo5y9pUP303E5CY cQTnGmbafnSzNjHbAIMwqRIPs8c7y6nZohZU/G1rf8ViNc6KFqvc0gY9Uhz0svsbb9Dk zbTQ== 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:subject:from :references:cc:to; bh=v21qZBlliEJYy8MKIJB+Z0GyjtaiQJFpoKKya3zqyzs=; b=kWWL83WUciOVSmV7vXy4Mo7JowjmLgRMWlPm0OXLPxEZhwx+BpP4ZqfSCBTHsukqUr MJmibxmkuLjfLKcBmieuTkxota91hmdNVDNlVz8yQ/3KoMHtzohGMFWr9Xad2gzPyriF MAkTm6O8X62B7pUQuqLxgo2EACd3zB0/5Oll/F3fPEgj6/M7eKQiXeimpapQ/ZnMS92D /vBdLdIzamQHhqbU+aouEWZObdY6K1/ATJmzFOvQvONT5hop9xD+yQdc9H57k2qDuElR I1/A74OSGlsXPmfsvzrnvTmhNcj40o1sUoQkcV/0eDWG7xN4PTRxWTyOvIV2p1ggkpwH Wz1Q== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id j15si7946032edw.310.2021.01.25.17.32.16; Mon, 25 Jan 2021 17:32:40 -0800 (PST) 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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729075AbhAYNsT (ORCPT + 99 others); Mon, 25 Jan 2021 08:48:19 -0500 Received: from mx2.suse.de ([195.135.220.15]:43740 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729054AbhAYNoU (ORCPT ); Mon, 25 Jan 2021 08:44:20 -0500 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.221.27]) by mx2.suse.de (Postfix) with ESMTP id 5330DB9A3; Mon, 25 Jan 2021 11:20:15 +0000 (UTC) To: Vincent Guittot , Bharata B Rao Cc: Christoph Lameter , linux-kernel , linux-mm@kvack.org, David Rientjes , Joonsoo Kim , Andrew Morton , guro@fb.com, Shakeel Butt , Johannes Weiner , aneesh.kumar@linux.ibm.com, Jann Horn , Michal Hocko , Catalin Marinas , Will Deacon References: <20201118082759.1413056-1-bharata@linux.ibm.com> <20210121053003.GB2587010@in.ibm.com> <786571e7-b9a2-4cdb-06d5-aa4a4b439b7e@suse.cz> <20210123051607.GC2587010@in.ibm.com> From: Vlastimil Babka Subject: Re: [RFC PATCH v0] mm/slub: Let number of online CPUs determine the slub page order Message-ID: <66652406-25e4-a9e7-45a1-8ad14d2e8a36@suse.cz> Date: Mon, 25 Jan 2021 12:20:14 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.6.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 1/23/21 1:32 PM, Vincent Guittot wrote: >> PowerPC PowerNV Host: (160 cpus) >> num_online_cpus 1 num_present_cpus 160 num_possible_cpus 160 nr_cpu_ids 160 >> >> PowerPC pseries KVM guest: (-smp 16,maxcpus=160) >> num_online_cpus 1 num_present_cpus 16 num_possible_cpus 160 nr_cpu_ids 160 >> >> That's what I see on powerpc, hence I thought num_present_cpus() could >> be the correct one to use in slub page order calculation. > > num_present_cpus() is set to 1 on arm64 until secondaries cpus boot > > arm64 224cpus acpi host: > num_online_cpus 1 num_present_cpus 1 num_possible_cpus 224 nr_cpu_ids 224 > arm64 8cpus DT host: > num_online_cpus 1 num_present_cpus 1 num_possible_cpus 8 nr_cpu_ids 8 > arm64 8cpus qemu-system-aarch64 (-smp 8,maxcpus=256) > num_online_cpus 1 num_present_cpus 1 num_possible_cpus 8 nr_cpu_ids 8 I would have expected num_present_cpus to be 224, 8, 8, respectively. > Then present and online increase to num_possible_cpus once all cpus are booted > >> >> > >> > What about heuristic: >> > - num_online_cpus() > 1 - we trust that and use it >> > - otherwise nr_cpu_ids >> > Would that work? Too arbitrary? >> >> Looking at the following snippet from include/linux/cpumask.h, it >> appears that num_present_cpus() should be reasonable compromise >> between online and possible/nr_cpus_ids to use here. >> >> /* >> * The following particular system cpumasks and operations manage >> * possible, present, active and online cpus. >> * >> * cpu_possible_mask- has bit 'cpu' set iff cpu is populatable >> * cpu_present_mask - has bit 'cpu' set iff cpu is populated >> * cpu_online_mask - has bit 'cpu' set iff cpu available to scheduler >> * cpu_active_mask - has bit 'cpu' set iff cpu available to migration >> * >> * If !CONFIG_HOTPLUG_CPU, present == possible, and active == online. >> * >> * The cpu_possible_mask is fixed at boot time, as the set of CPU id's >> * that it is possible might ever be plugged in at anytime during the >> * life of that system boot. The cpu_present_mask is dynamic(*), >> * representing which CPUs are currently plugged in. And >> * cpu_online_mask is the dynamic subset of cpu_present_mask, >> * indicating those CPUs available for scheduling. >> * >> * If HOTPLUG is enabled, then cpu_possible_mask is forced to have >> * all NR_CPUS bits set, otherwise it is just the set of CPUs that >> * ACPI reports present at boot. >> * >> * If HOTPLUG is enabled, then cpu_present_mask varies dynamically, >> * depending on what ACPI reports as currently plugged in, otherwise >> * cpu_present_mask is just a copy of cpu_possible_mask. >> * >> * (*) Well, cpu_present_mask is dynamic in the hotplug case. If not >> * hotplug, it's a copy of cpu_possible_mask, hence fixed at boot. >> */ >> >> So for host systems, present is (usually) equal to possible and for > > But "cpu_present_mask varies dynamically, depending on what ACPI > reports as currently plugged in" > > So it should varies when secondaries cpus are booted Hm, but booting the secondaries is just a software (kernel) action? They are already physically there, so it seems to me as if the cpu_present_mask is not populated correctly on arm64, and it's just a mirror of cpu_online_mask?