Received: by 2002:a05:6a10:17d3:0:0:0:0 with SMTP id hz19csp2625234pxb; Tue, 13 Apr 2021 06:31:10 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxH62CbmhjlckkkPfpJsR4QCzAjMRvqlchdJ17UBdbdGNgVEd49dyz+NsHg/RcIhn/g06AS X-Received: by 2002:a17:906:23e9:: with SMTP id j9mr31036421ejg.78.1618320669775; Tue, 13 Apr 2021 06:31:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1618320669; cv=none; d=google.com; s=arc-20160816; b=flkNmnHCL9ukMX5mkbrFHf5a8hqRId1nUS1whymryaSIAaIIhirXI59kjTZ6vSLMhL 1zEw6DA+XdHrU/Houch4f+DqPp2MoX5VyCHjboymNQAgsAZMW3GUNiV4EUDkxEBkMbcO TA5qCAt4xcLcjWZJpOkXJZJle6Dxhvo+uSUECI4sj1wSN4eNC7qu8vewI69GohklNrkH oXykGlKxG/zyCZOWHCz55qFRrBODIBFb1w06nNvRt7kVfY/hoT+zxKbdAdSNkeGPq8Sj dEuw3lZ9q8P8TEpZnhWVJb7u77/0rzstOtPwSOef5h6dqQA6QNFJKtjMt3KTORDN1gBR upCg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:user-agent:message-id:in-reply-to :date:references:subject:cc:to:from:ironport-sdr:ironport-sdr; bh=dYMDX4pqvSQhVmn2DIvlekx1KyiwroVgQEKLQ3J4NrA=; b=LxWK5X2mSCve8AZitWpbEQ+ROYeuE21FfMnkkGzXUPy9grpEGUcbUA1zjXv/bcTthb tdPS1HR3VpPFy/aKRnZ7YfDM4DcNJvvYFAKmSARywnliUcmxb7BgiOVI75dPMa/E5wTV 1vD6BPCt7JXLsQ2r3URG/jhssa9yGT+gX6E2ieDWQ+lsUNCZC9/8ptcwxoQ0dKMxZtYk srpfGwi607DL2hPsgH+3iX1p/Iu7bMITsN91byjGQx3B+hMtm6VZTc637AyjJGscvzG7 GEWo/U8v6q46ieLwu97fiZURbDmJh9qMmj+y0cIwiOS1v6f/88fbU3R9nmg136xqLfTM rddQ== 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id u13si1995734ejt.333.2021.04.13.06.30.44; Tue, 13 Apr 2021 06:31:09 -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; 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=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S245530AbhDMFmi (ORCPT + 99 others); Tue, 13 Apr 2021 01:42:38 -0400 Received: from mga04.intel.com ([192.55.52.120]:2914 "EHLO mga04.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S244605AbhDMFmh (ORCPT ); Tue, 13 Apr 2021 01:42:37 -0400 IronPort-SDR: qsVY+7nl9HQxBQ1PM/njLKxl+65RzMqpja4UM0DVbbczoKuKDYbf/VkOYW0u0Bubwmy0GpG4QJ pcE/hrz3gEkA== X-IronPort-AV: E=McAfee;i="6200,9189,9952"; a="192211495" X-IronPort-AV: E=Sophos;i="5.82,218,1613462400"; d="scan'208";a="192211495" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Apr 2021 22:42:17 -0700 IronPort-SDR: UKRwfh2efy9jyGOy3A/hqjQ90jNbvPNZik/Ndpr1hzPHZ9Os5pcCQIu5xABnmnMeADDjmQtAIv 771eerl2mxhQ== X-IronPort-AV: E=Sophos;i="5.82,218,1613462400"; d="scan'208";a="417713417" Received: from yhuang6-desk1.sh.intel.com (HELO yhuang6-desk1.ccr.corp.intel.com) ([10.239.13.1]) by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Apr 2021 22:42:13 -0700 From: "Huang, Ying" To: Yu Zhao Cc: Mel Gorman , Linux-MM , Andrew Morton , linux-kernel , Hillf Danton , Johannes Weiner , Joonsoo Kim , Matthew Wilcox , Michal Hocko , Roman Gushchin , Vlastimil Babka , Wei Yang , Yang Shi Subject: Re: [RFC] mm: activate access-more-than-once page via NUMA balancing References: <20210324083209.527427-1-ying.huang@intel.com> <20210324103104.GN15768@suse.de> <87a6qrj1hy.fsf@yhuang6-desk1.ccr.corp.intel.com> <20210325115721.GS15768@suse.de> <87o8f6h1ve.fsf@yhuang6-desk1.ccr.corp.intel.com> Date: Tue, 13 Apr 2021 13:42:10 +0800 In-Reply-To: (Yu Zhao's message of "Sat, 10 Apr 2021 16:25:49 -0600") Message-ID: <87k0p6u4el.fsf@yhuang6-desk1.ccr.corp.intel.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=ascii Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Yu Zhao writes: > On Fri, Mar 26, 2021 at 12:21 AM Huang, Ying wrote: >> >> Mel Gorman writes: >> >> > On Thu, Mar 25, 2021 at 12:33:45PM +0800, Huang, Ying wrote: >> >> > I caution against this patch. >> >> > >> >> > It's non-deterministic for a number of reasons. As it requires NUMA >> >> > balancing to be enabled, the pageout behaviour of a system changes when >> >> > NUMA balancing is active. If this led to pages being artificially and >> >> > inappropriately preserved, NUMA balancing could be disabled for the >> >> > wrong reasons. It only applies to pages that have no target node so >> >> > memory policies affect which pages are activated differently. Similarly, >> >> > NUMA balancing does not scan all VMAs and some pages may never trap a >> >> > NUMA fault as a result. The timing of when an address space gets scanned >> >> > is driven by the locality of pages and so the timing of page activation >> >> > potentially becomes linked to whether pages are local or need to migrate >> >> > (although not right now for this patch as it only affects pages with a >> >> > target nid of NUMA_NO_NODE). In other words, changes in NUMA balancing >> >> > that affect migration potentially affect the aging rate. Similarly, >> >> > the activate rate of a process with a single thread and multiple threads >> >> > potentially have different activation rates. >> >> > >> >> > Finally, the NUMA balancing scan algorithm is sub-optimal. It potentially >> >> > scans the entire address space even though only a small number of pages >> >> > are scanned. This is particularly problematic when a process has a lot >> >> > of threads because threads are redundantly scanning the same regions. If >> >> > NUMA balancing ever introduced range tracking of faulted pages to limit >> >> > how much scanning it has to do, it would inadvertently cause a change in >> >> > page activation rate. >> >> > >> >> > NUMA balancing is about page locality, it should not get conflated with >> >> > page aging. >> >> >> >> I understand your concerns about binding the NUMA balancing and page >> >> reclaiming. The requirement of the page locality and page aging is >> >> different, so the policies need to be different. This is the wrong part >> >> of the patch. >> >> >> >> From another point of view, it's still possible to share some underlying >> >> mechanisms (and code) between them. That is, scanning the page tables >> >> to make pages unaccessible and capture the page accesses via the page >> >> fault. >> > >> > Potentially yes but not necessarily recommended for page aging. NUMA >> > balancing has to be careful about the rate it scans pages to avoid >> > excessive overhead so it's driven by locality. The scanning happens >> > within a tasks context so during that time, the task is not executing >> > its normal work and it incurs the overhead for faults. Generally, this >> > is not too much overhead because pages get migrated locally, the scan >> > rate drops and so does the overhead. >> > >> > However, if you want to drive page aging, that is constant so the rate >> > could not be easily adapted in a way that would be deterministic. >> > >> >> Now these page accessing information is used for the page >> >> locality. Do you think it's a good idea to use these information for >> >> the page aging too (but with a different policy as you pointed out)? >> >> >> > >> > I'm not completely opposed to it but I think the overhead it would >> > introduce could be severe. Worse, if a workload fits in memory and there >> > is limited to no memory pressure, it's all overhead for no gain. Early >> > generations of NUMA balancing had to find a balance to sure the gains >> > from locality exceeded the cost of measuring locality and doing the same >> > for page aging in some ways is even more challenging. >> >> Yes. I will think more about it from the overhead vs. gain point of >> view. Thanks a lot for your sharing on that. >> >> >> From yet another point of view :-), in current NUMA balancing >> >> implementation, it's assumed that the node private pages can fit in the >> >> accessing node. But this may be not always true. Is it a valid >> >> optimization to migrate the hot private pages first? >> >> >> > >> > I'm not sure how the hotness of pages could be ranked. At the time of a >> > hinting fault, the page is by definition active now because it was been >> > accessed. Prioritising what pages to migrate based on the number of faults >> > that have been trapped would have to be stored somewhere. >> >> Yes. We need to store some information about that. In an old version >> of the patchset which uses NUMA balancing to promote hot pages from the >> PMEM to DRAM, we have designed a method to measure the hotness of the >> pages. The basic idea is as follows, >> >> - When the page table of a process is scanned, the latest N scanning >> address ranges and scan times are recorded in a ring buffer of >> mm_struct. >> >> - In hint page fault handler, the ring buffer is search with the fault >> address, to get the scan time. >> >> Then the hint page fault latency of the page is defined as, >> >> hint page fault latency = fault time - scan time >> >> The shorter the hint page fault latency, the hotter the page. >> >> Then we need a way to determine the hot/cold threshold. We used a rate >> limit based threshold adjustment method. If the number of pages that >> pass the threshold is much more than the rate limit, then we will lower >> the threshold (more stricter), or vice versa. > > Sorry for the late reply. I do see where you are coming from and I > agree in principle. The aging and the NUMA balancing should be talking > to each other, and IMO, it is easier for the aging to help the numa > balancing because it has to do the legwork anway. > > My idea is to make the page table scanning in the multigenerational > LRU NUMA policy aware -- I don't have any concrete plan yet. But in > general, it can range from mildly skewing the aging of pages from > wrong nodes so they become preferable during eviction to aggressively > working against those pages like queue_pages_pte_range() does. As Mel has pointed out, the policy of the page aging and locality is different. So it's not easy to combine them simply. And it appears that we can get some page hotness estimation from NUMA balancing hint page fault latency already. Best Regards, Huang, Ying