All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ying Huang <ying.huang@intel.com>
To: Tim Chen <tim.c.chen@linux.intel.com>,
	"Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com>,
	linux-mm@kvack.org, akpm@linux-foundation.org
Cc: Wei Xu <weixugc@google.com>, Greg Thelen <gthelen@google.com>,
	Yang Shi <shy828301@gmail.com>,
	Davidlohr Bueso <dave@stgolabs.net>,
	Tim C Chen <tim.c.chen@intel.com>,
	Brice Goglin <brice.goglin@gmail.com>,
	Michal Hocko <mhocko@kernel.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Hesham Almatary <hesham.almatary@huawei.com>,
	Dave Hansen <dave.hansen@intel.com>,
	Jonathan Cameron <Jonathan.Cameron@huawei.com>,
	Alistair Popple <apopple@nvidia.com>,
	Dan Williams <dan.j.williams@intel.com>,
	Feng Tang <feng.tang@intel.com>,
	Jagdish Gediya <jvgediya@linux.ibm.com>,
	Baolin Wang <baolin.wang@linux.alibaba.com>,
	David Rientjes <rientjes@google.com>
Subject: Re: [PATCH v5 4/9] mm/demotion: Build demotion targets based on explicit memory tiers
Date: Wed, 08 Jun 2022 14:52:20 +0800	[thread overview]
Message-ID: <d8ff7d76ac9b67cd0141124e99016ca8992dcacd.camel@intel.com> (raw)
In-Reply-To: <c4678658cdd04d14ced7d0407da32f5fdec19f95.camel@linux.intel.com>

On Tue, 2022-06-07 at 15:51 -0700, Tim Chen wrote:
> On Fri, 2022-06-03 at 19:12 +0530, Aneesh Kumar K.V wrote:
> > 
> > +int next_demotion_node(int node)
> > +{
> > +	struct demotion_nodes *nd;
> > +	int target, nnodes, i;
> > +
> > +	if (!node_demotion)
> > +		return NUMA_NO_NODE;
> > +
> > +	nd = &node_demotion[node];
> > +
> > +	/*
> > +	 * node_demotion[] is updated without excluding this
> > +	 * function from running.
> > +	 *
> > +	 * Make sure to use RCU over entire code blocks if
> > +	 * node_demotion[] reads need to be consistent.
> > +	 */
> > +	rcu_read_lock();
> > +
> > +	nnodes = nodes_weight(nd->preferred);
> > +	if (!nnodes)
> > +		return NUMA_NO_NODE;
> > +
> > +	/*
> > +	 * If there are multiple target nodes, just select one
> > +	 * target node randomly.
> > +	 *
> > +	 * In addition, we can also use round-robin to select
> > +	 * target node, but we should introduce another variable
> > +	 * for node_demotion[] to record last selected target node,
> > +	 * that may cause cache ping-pong due to the changing of
> > +	 * last target node. Or introducing per-cpu data to avoid
> > +	 * caching issue, which seems more complicated. So selecting
> > +	 * target node randomly seems better until now.
> > +	 */
> > +	nnodes = get_random_int() % nnodes;
> > +	target = first_node(nd->preferred);
> > +	for (i = 0; i < nnodes; i++)
> > +		target = next_node(target, nd->preferred);
> 
> We can simplify the above 4 lines.
> 
> 	target = node_random(nd->preferred);
> 
> There's still a loop overhead though :(

To avoid loop overhead, we can use the original implementation of
next_demotion_node.  The performance is much better for the most common
cases, the number of preferred node is 1.

Best Regards,
Huang, Ying

> > 
> > 

> > +
> > +	rcu_read_unlock();
> > +
> > +	return target;
> > +}
> > +
> > 
> > + */
> > +static int __meminit migrate_on_reclaim_callback(struct notifier_block *self,
> > +						 unsigned long action, void *_arg)
> > +{
> > +	struct memory_notify *arg = _arg;
> > +
> > +	/*
> > +	 * Only update the node migration order when a node is
> > +	 * changing status, like online->offline.
> > +	 */
> > +	if (arg->status_change_nid < 0)
> > +		return notifier_from_errno(0);
> > +
> > +	switch (action) {
> > +	case MEM_OFFLINE:
> > +		/*
> > +		 * In case we are moving out of N_MEMORY. Keep the node
> > +		 * in the memory tier so that when we bring memory online,
> > +		 * they appear in the right memory tier. We still need
> > +		 * to rebuild the demotion order.
> > +		 */
> > +		mutex_lock(&memory_tier_lock);
> > +		establish_migration_targets();
> > +		mutex_unlock(&memory_tier_lock);
> > +		break;
> > +	case MEM_ONLINE:
> > +		/*
> > +		 * We ignore the error here, if the node already have the tier
> > +		 * registered, we will continue to use that for the new memory
> > +		 * we are adding here.
> > +		 */
> > +		node_set_memory_tier(arg->status_change_nid, DEFAULT_MEMORY_TIER);
> 
> Should establish_migration_targets() be run here? Otherwise what are the
> demotion targets for this newly onlined node?
> 
> > +		break;
> > +	}
> > +
> > +	return notifier_from_errno(0);
> > +}
> > +
> 
> Tim
> 



  parent reply	other threads:[~2022-06-08  7:22 UTC|newest]

Thread overview: 84+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-03 13:42 [PATCH v5 0/9] mm/demotion: Memory tiers and demotion Aneesh Kumar K.V
2022-06-03 13:42 ` [PATCH v5 1/9] mm/demotion: Add support for explicit memory tiers Aneesh Kumar K.V
2022-06-07 18:43   ` Tim Chen
2022-06-07 20:18     ` Wei Xu
2022-06-08  4:30     ` Aneesh Kumar K V
2022-06-08  6:06       ` Ying Huang
2022-06-08  4:37     ` Aneesh Kumar K V
2022-06-08  6:10       ` Ying Huang
2022-06-08  8:04         ` Aneesh Kumar K V
2022-06-07 21:32   ` Yang Shi
2022-06-08  1:34     ` Ying Huang
2022-06-08 16:37       ` Yang Shi
2022-06-09  6:52         ` Ying Huang
2022-06-08  4:58     ` Aneesh Kumar K V
2022-06-08  6:18       ` Ying Huang
2022-06-08 16:42       ` Yang Shi
2022-06-09  8:17         ` Aneesh Kumar K V
2022-06-09 16:04           ` Yang Shi
2022-06-08 14:11   ` Johannes Weiner
2022-06-08 14:21     ` Aneesh Kumar K V
2022-06-08 15:55     ` Johannes Weiner
2022-06-08 16:13       ` Aneesh Kumar K V
2022-06-08 18:16         ` Johannes Weiner
2022-06-09  2:33           ` Aneesh Kumar K V
2022-06-09 13:55             ` Johannes Weiner
2022-06-09 14:22               ` Jonathan Cameron
2022-06-09 20:41                 ` Johannes Weiner
2022-06-10  6:15                   ` Ying Huang
2022-06-10  9:57                   ` Jonathan Cameron
2022-06-13 14:05                     ` Johannes Weiner
2022-06-13 14:23                       ` Aneesh Kumar K V
2022-06-13 15:50                         ` Johannes Weiner
2022-06-14  6:48                           ` Ying Huang
2022-06-14  8:01                           ` Aneesh Kumar K V
2022-06-14 18:56                             ` Johannes Weiner
2022-06-15  6:23                               ` Aneesh Kumar K V
2022-06-16  1:11                               ` Ying Huang
2022-06-16  3:45                                 ` Wei Xu
2022-06-16  4:47                                   ` Aneesh Kumar K V
2022-06-16  5:51                                     ` Ying Huang
2022-06-17 10:41                                 ` Jonathan Cameron
2022-06-20  1:54                                   ` Huang, Ying
2022-06-14 16:45                       ` Jonathan Cameron
2022-06-21  8:27                         ` Aneesh Kumar K V
2022-06-03 13:42 ` [PATCH v5 2/9] mm/demotion: Expose per node memory tier to sysfs Aneesh Kumar K.V
2022-06-07 20:15   ` Tim Chen
2022-06-08  4:55     ` Aneesh Kumar K V
2022-06-08  6:42       ` Ying Huang
2022-06-08 16:06       ` Tim Chen
2022-06-08 16:15         ` Aneesh Kumar K V
2022-06-03 13:42 ` [PATCH v5 3/9] mm/demotion: Move memory demotion related code Aneesh Kumar K.V
2022-06-06 13:39   ` Bharata B Rao
2022-06-03 13:42 ` [PATCH v5 4/9] mm/demotion: Build demotion targets based on explicit memory tiers Aneesh Kumar K.V
2022-06-07 22:51   ` Tim Chen
2022-06-08  5:02     ` Aneesh Kumar K V
2022-06-08  6:52     ` Ying Huang [this message]
2022-06-08  6:50   ` Ying Huang
2022-06-08  8:19     ` Aneesh Kumar K V
2022-06-08  8:00   ` Ying Huang
2022-06-03 13:42 ` [PATCH v5 5/9] mm/demotion/dax/kmem: Set node's memory tier to MEMORY_TIER_PMEM Aneesh Kumar K.V
2022-06-03 13:42 ` [PATCH v5 6/9] mm/demotion: Add support for removing node from demotion memory tiers Aneesh Kumar K.V
2022-06-07 23:40   ` Tim Chen
2022-06-08  6:59   ` Ying Huang
2022-06-08  8:20     ` Aneesh Kumar K V
2022-06-08  8:23       ` Ying Huang
2022-06-08  8:29         ` Aneesh Kumar K V
2022-06-08  8:34           ` Ying Huang
2022-06-03 13:42 ` [PATCH v5 7/9] mm/demotion: Demote pages according to allocation fallback order Aneesh Kumar K.V
2022-06-03 13:42 ` [PATCH v5 8/9] mm/demotion: Add documentation for memory tiering Aneesh Kumar K.V
2022-06-03 13:42 ` [PATCH v5 9/9] mm/demotion: Update node_is_toptier to work with memory tiers Aneesh Kumar K.V
2022-06-06  3:11   ` Ying Huang
2022-06-06  3:52     ` Aneesh Kumar K V
2022-06-06  7:24       ` Ying Huang
2022-06-06  8:33         ` Aneesh Kumar K V
2022-06-08  7:26           ` Ying Huang
2022-06-08  8:28             ` Aneesh Kumar K V
2022-06-08  8:32               ` Ying Huang
2022-06-08 14:37                 ` Aneesh Kumar K.V
2022-06-08 20:14                   ` Tim Chen
2022-06-10  6:04                   ` Ying Huang
2022-06-06  4:53 ` [PATCH] mm/demotion: Add sysfs ABI documentation Aneesh Kumar K.V
2022-06-08 13:57 ` [PATCH v5 0/9] mm/demotion: Memory tiers and demotion Johannes Weiner
2022-06-08 14:20   ` Aneesh Kumar K V
2022-06-09  8:53     ` Jonathan Cameron

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=d8ff7d76ac9b67cd0141124e99016ca8992dcacd.camel@intel.com \
    --to=ying.huang@intel.com \
    --cc=Jonathan.Cameron@huawei.com \
    --cc=akpm@linux-foundation.org \
    --cc=aneesh.kumar@linux.ibm.com \
    --cc=apopple@nvidia.com \
    --cc=baolin.wang@linux.alibaba.com \
    --cc=brice.goglin@gmail.com \
    --cc=dan.j.williams@intel.com \
    --cc=dave.hansen@intel.com \
    --cc=dave@stgolabs.net \
    --cc=feng.tang@intel.com \
    --cc=gthelen@google.com \
    --cc=hesham.almatary@huawei.com \
    --cc=jvgediya@linux.ibm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mhocko@kernel.org \
    --cc=rientjes@google.com \
    --cc=shy828301@gmail.com \
    --cc=tim.c.chen@intel.com \
    --cc=tim.c.chen@linux.intel.com \
    --cc=weixugc@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.