Thread (6 messages) flat view 6 messages, 4 authors, 2020-09-10

Re: [PATCH v3] pseries/drmem: don't cache node id in drmem_lmb struct

From: Scott Cheloha <hidden>
Date: 2020-09-10 18:30:29

On Fri, Aug 21, 2020 at 10:33:10AM +0200, Laurent Dufour wrote:
Le 11/08/2020 à 03:51, Scott Cheloha a écrit :
quoted
[...]
@@ -631,7 +638,7 @@ static int dlpar_memory_remove_by_ic(u32 lmbs_to_remove, u32 drc_index)
  static int dlpar_add_lmb(struct drmem_lmb *lmb)
  {
  	unsigned long block_sz;
-	int rc;
+	int nid, rc;

  	if (lmb->flags & DRCONF_MEM_ASSIGNED)
  		return -EINVAL;
@@ -642,11 +649,13 @@ static int dlpar_add_lmb(struct drmem_lmb *lmb)
  		return rc;
  	}

-	lmb_set_nid(lmb);
  	block_sz = memory_block_size_bytes();

+	/* Find the node id for this address. */
+	nid = memory_add_physaddr_to_nid(lmb->base_addr);
I think we could be more efficient here.
Here is the call stack behind memory_add_physaddr_to_nid():

  memory_add_physaddr_to_nid(lmb->base_addr)
    hot_add_scn_to_nid()
      if (of_find_node_by_path("/ibm,dynamic-reconfiguration-memory")) == true*
      then
	  hot_add_drconf_scn_to_nid()
	    for_each_drmem_lmb() to find the LMB based on lmb->base_addr
	      of_drconf_to_nid_single(found LMB)
		use lmb->aa_index to get the nid.

* that test is necessarily true when called from dlpar_add_lmb()
otherwise the call to update_lmb_associativity_index() would have
failed earlier.

Basically, we have a LMB and we later walk all the LMBs to find that lmb
again.  In the case of dlpar_add_lmb(), it would be more efficient to
directly call of_drconf_to_nid_single(). That function is not exported
from arch/powerpc/mm/numa.c but it may be good to export it through that
patch.
I've posted a patch for this:

https://lore.kernel.org/linuxppc-dev/20200910175637.2865160-1-cheloha@linux.ibm.com/T/#u (local)

The speedup is nice, especially for LMBs at the end of the array.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help