From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 31842C46467 for ; Wed, 11 Jan 2023 02:16:41 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id ABC838E0002; Tue, 10 Jan 2023 21:16:40 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id A6C928E0001; Tue, 10 Jan 2023 21:16:40 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 910078E0002; Tue, 10 Jan 2023 21:16:40 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 7D12A8E0001 for ; Tue, 10 Jan 2023 21:16:40 -0500 (EST) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 4FCE01A06D1 for ; Wed, 11 Jan 2023 02:16:40 +0000 (UTC) X-FDA: 80340904560.25.62FD49F Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by imf06.hostedemail.com (Postfix) with ESMTP id 3495D180003 for ; Wed, 11 Jan 2023 02:16:38 +0000 (UTC) Authentication-Results: imf06.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=F7jtE+B8; spf=pass (imf06.hostedemail.com: domain of ying.huang@intel.com designates 134.134.136.20 as permitted sender) smtp.mailfrom=ying.huang@intel.com; dmarc=pass (policy=none) header.from=intel.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1673403398; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=3CxDuoR799q0AMKbLsiDWvWcnZeOikCHNFZcuZd4+dE=; b=4PkffjTKjkpm82tlTxswnLBdAVzFzDEG4sBkkOys7uLb9q0rnj0qjv2AmRUUk0L8t8Cc8g UTPsjhOZiXG7aDhmegZcIagS7eb3m13Ep20Z8YiPLRntEUYzQNzC8MlPel2x5vscxktOGz O5SadQOQvypv5bGyZl1UFLQE0/+CMZM= ARC-Authentication-Results: i=1; imf06.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=F7jtE+B8; spf=pass (imf06.hostedemail.com: domain of ying.huang@intel.com designates 134.134.136.20 as permitted sender) smtp.mailfrom=ying.huang@intel.com; dmarc=pass (policy=none) header.from=intel.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1673403398; a=rsa-sha256; cv=none; b=gtPyfvMxbA/CntxM5wzKP6gTUs9LkA9aU9QMCh33GCEATMfyKCZ7Ew016LUR8ZuguZ3Go7 TUkshHyxSQ2lrn/wUkPpTig9d/EXu7b3fz58Qw2MPsZtS3QY96GEOKAadJgZG2+wJkjOT4 qSHyxfJR1PWrEfptiwCncGsORQNj76M= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1673403398; x=1704939398; h=from:to:cc:subject:references:date:in-reply-to: message-id:mime-version; bh=j0qLwbFlLqZ4rZRMTGUjGc7UB3n+UMvYcWq80priuAI=; b=F7jtE+B8LFT0AKqaGKtKQNSk0Llb02QgrEvoiQM75+x3AyrQPMIdD9gL LcqJzLPAL6ZTGahHV54GTiUIBLlXS3JVv2NjytflsCKGLIFRdfRzSIo/m uJVmpZg73KfppdWcS+QFkJfRvC9/k8Mg60sWng6Aw3BFscIz1WdWv7Wrt jynkgTPyOVRyJZvjzkGwe05uNHyZJssaDLRUrAG8a1TAGdOtF3+qSu8yV zmvPJPnGCNXNvhKtD40Pt/3Y3kpnUnKoymCK1KoqzQKkQKpmuMay5OZvX hZjq0XtfdWTcuJqxUnx+8oAcPCR5DxSs0Lj2o0juFKpqgWxeFoXGJOweC Q==; X-IronPort-AV: E=McAfee;i="6500,9779,10586"; a="311121294" X-IronPort-AV: E=Sophos;i="5.96,315,1665471600"; d="scan'208";a="311121294" Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Jan 2023 18:16:36 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10586"; a="657270453" X-IronPort-AV: E=Sophos;i="5.96,315,1665471600"; d="scan'208";a="657270453" Received: from yhuang6-desk2.sh.intel.com (HELO yhuang6-desk2.ccr.corp.intel.com) ([10.238.208.55]) by orsmga002-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Jan 2023 18:16:32 -0800 From: "Huang, Ying" To: Baolin Wang Cc: Andrew Morton , , , Alistair Popple , Zi Yan , Yang Shi , Oscar Salvador , Matthew Wilcox , Bharata B Rao , haoxin Subject: Re: [PATCH -v2 1/9] migrate_pages: organize stats with struct migrate_pages_stats References: <20230110075327.590514-1-ying.huang@intel.com> <20230110075327.590514-2-ying.huang@intel.com> <9d27d10c-ba9a-045d-c170-fa3c4d6ea416@linux.alibaba.com> Date: Wed, 11 Jan 2023 10:15:40 +0800 In-Reply-To: <9d27d10c-ba9a-045d-c170-fa3c4d6ea416@linux.alibaba.com> (Baolin Wang's message of "Tue, 10 Jan 2023 18:03:09 +0800") Message-ID: <87a62p4y0j.fsf@yhuang6-desk2.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 X-Rspamd-Queue-Id: 3495D180003 X-Stat-Signature: rzu7mfdjbho9tfqag4icrw9rdxqefum7 X-Rspam-User: X-Rspamd-Server: rspam08 X-HE-Tag: 1673403398-589406 X-HE-Meta: U2FsdGVkX186KTQCHPrxdFtHvc81ta6Pu+aDhs0tyXX6BMHJ1eWV2QPiIR5+KYRNCIKkjQqk0ZgPR4pPWBAbUwUj1QdqmqttSaxz2koV9Wx/O4ZUmvj+iSxpXUbV9XmSv9lQnwdJOh4clmZiC6udlaaVqsGSonFTqsdtQSzF2in5yO5+Ghzib1xiOVofeEptpLOXjY0FxENpN3610fzQOlxYjUeDmrotdVFMPQFRwuiPyrYbnI6wSzLj//0wxSQrSs0OOe3beUIn55NFXHMHJ/pBbx8Uqf8LtAwelWQkCZipFA2BKcKJvUm3gz5d4dmiqlpH8LXiaY1QsJkzt51ZE12alHMwHMEY1kNbFwFGPwxYMRhcrq7pIl4tpSH208qlwj5jboa02gnMAUUI6XKtvPhknqCGnAiLjsRIbmQJhEADgqt61Vfoo0mNNs9tsgG87RlGh9h4NrbYYdb2nY42dgS6gXL00HKs7kIrYvcro3FhNh0Y/w1KvMXKVa3Kk2O2nIyCTS+EnCgoFLSUs2+DsRDD8kxKL7jOf5hDvIZYrgIPiUnJD8zrnndYxZG9QCkQp+pi8mgp4oPlDBeUF7+9vURY5b+PV4qcrQ47cUKB4VJaLcOLaVaOeJdHhMkLnU0MJKi+tYKCBd1TrXJ1md7KkD5sjStnzMbXtocLItdoZbmPw79yJOaZARbYuPleXE8QJflRdnORjBI2oO4VgxGZKq480Qn2RkolyUSGZhEXtR0R3XCraHgMx5Z4Ew3Ej/bF+O7a//GZYaLMXTmwhlp0W/Rv33YmPZWNyzUINNi3yAA+k4PnyjOBG2w3f60276zHV5KT3IN2kxRs+ORgKhjXYh06SOqkxuy6+dU7LT+1K518dIeekPsWEkTTjFczAyOE4RYGlyKvoo7/OJdHqghtdx+sQ6fKYhkS X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Baolin Wang writes: > On 1/10/2023 3:53 PM, Huang Ying wrote: >> Define struct migrate_pages_stats to organize the various statistics >> in migrate_pages(). This makes it easier to collect and consume the >> statistics in multiple functions. This will be needed in the >> following patches in the series. >> Signed-off-by: "Huang, Ying" >> Reviewed-by: Alistair Popple >> Reviewed-by: Zi Yan >> Cc: Yang Shi >> Cc: Baolin Wang >> Cc: Oscar Salvador >> Cc: Matthew Wilcox >> Cc: Bharata B Rao >> Cc: haoxin >> --- >> mm/migrate.c | 60 +++++++++++++++++++++++++++++----------------------- >> 1 file changed, 34 insertions(+), 26 deletions(-) >> diff --git a/mm/migrate.c b/mm/migrate.c >> index a4d3fc65085f..d21de40861a0 100644 >> --- a/mm/migrate.c >> +++ b/mm/migrate.c >> @@ -1396,6 +1396,16 @@ static inline int try_split_folio(struct folio *folio, struct list_head *split_f >> return rc; >> } >> +struct migrate_pages_stats { >> + int nr_succeeded; /* Normal pages and THP migrated successfully, in units >> + of base pages */ >> + int nr_failed_pages; /* Normal pages and THP failed to be migrated, in units >> + of base pages. Untried pages aren't counted */ > > I think above 2 fields also contain the number of hugetlb > pages. Otherwise looks good to me. Yes. Good catch, will update the patch. > Reviewed-by: Baolin Wang Thanks! Best Regards, Huang, Ying > >> + int nr_thp_succeeded; /* THP migrated successfully */ >> + int nr_thp_failed; /* THP failed to be migrated */ >> + int nr_thp_split; /* THP split before migrating */ >> +}; >> + >> /* >> * migrate_pages - migrate the folios specified in a list, to the free folios >> * supplied as the target for the page migration >> @@ -1430,13 +1440,8 @@ int migrate_pages(struct list_head *from, new_page_t get_new_page, >> int large_retry = 1; >> int thp_retry = 1; >> int nr_failed = 0; >> - int nr_failed_pages = 0; >> int nr_retry_pages = 0; >> - int nr_succeeded = 0; >> - int nr_thp_succeeded = 0; >> int nr_large_failed = 0; >> - int nr_thp_failed = 0; >> - int nr_thp_split = 0; >> int pass = 0; >> bool is_large = false; >> bool is_thp = false; >> @@ -1446,9 +1451,11 @@ int migrate_pages(struct list_head *from, new_page_t get_new_page, >> LIST_HEAD(split_folios); >> bool nosplit = (reason == MR_NUMA_MISPLACED); >> bool no_split_folio_counting = false; >> + struct migrate_pages_stats stats; >> trace_mm_migrate_pages_start(mode, reason); >> + memset(&stats, 0, sizeof(stats)); >> split_folio_migration: >> for (pass = 0; pass < 10 && (retry || large_retry); pass++) { >> retry = 0; >> @@ -1502,9 +1509,9 @@ int migrate_pages(struct list_head *from, new_page_t get_new_page, >> /* Large folio migration is unsupported */ >> if (is_large) { >> nr_large_failed++; >> - nr_thp_failed += is_thp; >> + stats.nr_thp_failed += is_thp; >> if (!try_split_folio(folio, &split_folios)) { >> - nr_thp_split += is_thp; >> + stats.nr_thp_split += is_thp; >> break; >> } >> /* Hugetlb migration is unsupported */ >> @@ -1512,7 +1519,7 @@ int migrate_pages(struct list_head *from, new_page_t get_new_page, >> nr_failed++; >> } >> - nr_failed_pages += nr_pages; >> + stats.nr_failed_pages += nr_pages; >> list_move_tail(&folio->lru, &ret_folios); >> break; >> case -ENOMEM: >> @@ -1522,13 +1529,13 @@ int migrate_pages(struct list_head *from, new_page_t get_new_page, >> */ >> if (is_large) { >> nr_large_failed++; >> - nr_thp_failed += is_thp; >> + stats.nr_thp_failed += is_thp; >> /* Large folio NUMA faulting doesn't split to retry. */ >> if (!nosplit) { >> int ret = try_split_folio(folio, &split_folios); >> if (!ret) { >> - nr_thp_split += is_thp; >> + stats.nr_thp_split += is_thp; >> break; >> } else if (reason == MR_LONGTERM_PIN && >> ret == -EAGAIN) { >> @@ -1546,7 +1553,7 @@ int migrate_pages(struct list_head *from, new_page_t get_new_page, >> nr_failed++; >> } >> - nr_failed_pages += nr_pages + >> nr_retry_pages; >> + stats.nr_failed_pages += nr_pages + nr_retry_pages; >> /* >> * There might be some split folios of fail-to-migrate large >> * folios left in split_folios list. Move them back to migration >> @@ -1556,7 +1563,7 @@ int migrate_pages(struct list_head *from, new_page_t get_new_page, >> list_splice_init(&split_folios, from); >> /* nr_failed isn't updated for not used */ >> nr_large_failed += large_retry; >> - nr_thp_failed += thp_retry; >> + stats.nr_thp_failed += thp_retry; >> goto out; >> case -EAGAIN: >> if (is_large) { >> @@ -1568,8 +1575,8 @@ int migrate_pages(struct list_head *from, new_page_t get_new_page, >> nr_retry_pages += nr_pages; >> break; >> case MIGRATEPAGE_SUCCESS: >> - nr_succeeded += nr_pages; >> - nr_thp_succeeded += is_thp; >> + stats.nr_succeeded += nr_pages; >> + stats.nr_thp_succeeded += is_thp; >> break; >> default: >> /* >> @@ -1580,20 +1587,20 @@ int migrate_pages(struct list_head *from, new_page_t get_new_page, >> */ >> if (is_large) { >> nr_large_failed++; >> - nr_thp_failed += is_thp; >> + stats.nr_thp_failed += is_thp; >> } else if (!no_split_folio_counting) { >> nr_failed++; >> } >> - nr_failed_pages += nr_pages; >> + stats.nr_failed_pages += nr_pages; >> break; >> } >> } >> } >> nr_failed += retry; >> nr_large_failed += large_retry; >> - nr_thp_failed += thp_retry; >> - nr_failed_pages += nr_retry_pages; >> + stats.nr_thp_failed += thp_retry; >> + stats.nr_failed_pages += nr_retry_pages; >> /* >> * Try to migrate split folios of fail-to-migrate large folios, no >> * nr_failed counting in this round, since all split folios of a >> @@ -1626,16 +1633,17 @@ int migrate_pages(struct list_head *from, new_page_t get_new_page, >> if (list_empty(from)) >> rc = 0; >> - count_vm_events(PGMIGRATE_SUCCESS, nr_succeeded); >> - count_vm_events(PGMIGRATE_FAIL, nr_failed_pages); >> - count_vm_events(THP_MIGRATION_SUCCESS, nr_thp_succeeded); >> - count_vm_events(THP_MIGRATION_FAIL, nr_thp_failed); >> - count_vm_events(THP_MIGRATION_SPLIT, nr_thp_split); >> - trace_mm_migrate_pages(nr_succeeded, nr_failed_pages, nr_thp_succeeded, >> - nr_thp_failed, nr_thp_split, mode, reason); >> + count_vm_events(PGMIGRATE_SUCCESS, stats.nr_succeeded); >> + count_vm_events(PGMIGRATE_FAIL, stats.nr_failed_pages); >> + count_vm_events(THP_MIGRATION_SUCCESS, stats.nr_thp_succeeded); >> + count_vm_events(THP_MIGRATION_FAIL, stats.nr_thp_failed); >> + count_vm_events(THP_MIGRATION_SPLIT, stats.nr_thp_split); >> + trace_mm_migrate_pages(stats.nr_succeeded, stats.nr_failed_pages, >> + stats.nr_thp_succeeded, stats.nr_thp_failed, >> + stats.nr_thp_split, mode, reason); >> if (ret_succeeded) >> - *ret_succeeded = nr_succeeded; >> + *ret_succeeded = stats.nr_succeeded; >> return rc; >> }