All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sasha Khapyorsky <sashak-smomgflXvOZWk0Htik3J/w@public.gmane.org>
To: Ira Weiny <weiny2-i2BcT+NCU+M@public.gmane.org>
Cc: "linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
	<linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
Subject: Re: Found one reason libibnetdisc is slower than subnet_discover
Date: Mon, 25 Jan 2010 17:19:28 +0200	[thread overview]
Message-ID: <20100125151928.GN13519@me> (raw)
In-Reply-To: <20100121181418.a9e955bb.weiny2-i2BcT+NCU+M@public.gmane.org>

On 18:14 Thu 21 Jan     , Ira Weiny wrote:
> From: Ira Weiny <weiny2-ig7AzVSIIG5IWGcSWN6Auu1ftBKYq+Ku@public.gmane.org>
> Date: Thu, 21 Jan 2010 17:13:37 -0800
> Subject: [PATCH] optimize query_node
> 
>    recognize when we have found a switch we have already processed and skip the
>    SwitchInfo and NodeDescription queries.
> 
> Signed-off-by: Ira Weiny <weiny2-ig7AzVSIIG5IWGcSWN6Auu1ftBKYq+Ku@public.gmane.org>
> ---
>  infiniband-diags/libibnetdisc/src/ibnetdisc.c |   45 +++++++++++++++----------
>  1 files changed, 27 insertions(+), 18 deletions(-)
> 
> diff --git a/infiniband-diags/libibnetdisc/src/ibnetdisc.c b/infiniband-diags/libibnetdisc/src/ibnetdisc.c
> index d0c97a1..fa0dbe4 100644
> --- a/infiniband-diags/libibnetdisc/src/ibnetdisc.c
> +++ b/infiniband-diags/libibnetdisc/src/ibnetdisc.c
> @@ -101,19 +101,30 @@ static int query_node_info(struct ibmad_port *ibmad_port,
>  	return 0;
>  }
>  
> +static ibnd_node_t *find_existing_node(ibnd_fabric_t * fabric,
> +				       uint64_t guid)
> +{
> +	int hash = HASHGUID(guid) % HTSZ;
> +	ibnd_node_t *node;
> +
> +	for (node = fabric->nodestbl[hash]; node; node = node->htnext)
> +		if (node->guid == guid)
> +			return node;
> +
> +	return NULL;
> +}
> +
>  static int query_node(struct ibmad_port *ibmad_port, ibnd_fabric_t * fabric,
>  		      ibnd_node_t * node, ibnd_port_t * port,
>  		      ib_portid_t * portid)
>  {
>  	int rc = 0;
>  	void *nd = node->nodedesc;
> +	ibnd_node_t *existing;
>  
>  	if ((rc = query_node_info(ibmad_port, fabric, node, portid)) != 0)
>  		return rc;
>  
> -	if (!smp_query_via(nd, portid, IB_ATTR_NODE_DESC, 0, 0, ibmad_port))
> -		return -1;
> -
>  	if ((rc = query_port_info(ibmad_port, portid, 0, port)) != 0)
>  		return rc;
>  
> @@ -121,7 +132,7 @@ static int query_node(struct ibmad_port *ibmad_port, ibnd_fabric_t * fabric,
>  	port->guid = mad_get_field64(node->info, 0, IB_NODE_PORT_GUID_F);
>  
>  	if (node->type != IB_NODE_SWITCH)
> -		return 0;
> +		goto query_nd;

Is this change related to the patch?

In any case why should we repeat NodeDesription query for non switch
nodes?

Sasha

>  
>  	node->smalid = port->base_lid;
>  	node->smalmc = port->lmc;
> @@ -135,6 +146,12 @@ static int query_node(struct ibmad_port *ibmad_port, ibnd_fabric_t * fabric,
>  	port->base_lid = (uint16_t) node->smalid;	/* LID is still defined by port 0 */
>  	port->lmc = (uint8_t) node->smalmc;
>  
> +	if ((existing = find_existing_node(fabric, node->guid)) != NULL) {
> +		/* probably don't even need this memcpy */
> +		memcpy(node, existing, sizeof *node);
> +		return (0);
> +	}
> +
>  	if (!smp_query_via(node->switchinfo, portid, IB_ATTR_SWITCH_INFO, 0, 0,
>  			   ibmad_port))
>  		node->smaenhsp0 = 0;	/* assume base SP0 */
> @@ -144,6 +161,11 @@ static int query_node(struct ibmad_port *ibmad_port, ibnd_fabric_t * fabric,
>  
>  	IBND_DEBUG("portid %s: got switch node %" PRIx64 " '%s'\n",
>  		   portid2str(portid), node->guid, node->nodedesc);
> +
> +query_nd:
> +	if (!smp_query_via(nd, portid, IB_ATTR_NODE_DESC, 0, 0, ibmad_port))
> +		return -1;
> +
>  	return 0;
>  }
>  
> @@ -208,19 +230,6 @@ static void dump_endnode(ib_portid_t * path, char *prompt,
>  	       port->base_lid + (1 << port->lmc) - 1, node->nodedesc);
>  }
>  
> -static ibnd_node_t *find_existing_node(ibnd_fabric_t * fabric,
> -				       ibnd_node_t * new)
> -{
> -	int hash = HASHGUID(new->guid) % HTSZ;
> -	ibnd_node_t *node;
> -
> -	for (node = fabric->nodestbl[hash]; node; node = node->htnext)
> -		if (node->guid == new->guid)
> -			return node;
> -
> -	return NULL;
> -}
> -
>  ibnd_node_t *ibnd_find_node_guid(ibnd_fabric_t * fabric, uint64_t guid)
>  {
>  	int hash = HASHGUID(guid) % HTSZ;
> @@ -459,7 +468,7 @@ static int get_remote_node(struct ibmad_port *ibmad_port,
>  		return 1;	/* positive == non-fatal error */
>  	}
>  
> -	oldnode = find_existing_node(fabric, &node_buf);
> +	oldnode = find_existing_node(fabric, node_buf.guid);
>  	if (oldnode)
>  		remotenode = oldnode;
>  	else if (!(remotenode = create_node(fabric, scan, &node_buf, path,
> -- 
> 1.5.4.5
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

  parent reply	other threads:[~2010-01-25 15:19 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-01-22  2:14 Found one reason libibnetdisc is slower than subnet_discover Ira Weiny
     [not found] ` <20100121181418.a9e955bb.weiny2-i2BcT+NCU+M@public.gmane.org>
2010-01-22 18:11   ` And I found the other reason (Re: Found one reason libibnetdisc is slower than subnet_discover) Ira Weiny
     [not found]     ` <20100122101113.16c6bd20.weiny2-i2BcT+NCU+M@public.gmane.org>
2010-01-24 10:56       ` Sasha Khapyorsky
2010-01-25 15:19   ` Sasha Khapyorsky [this message]
2010-01-25 17:09     ` Found one reason libibnetdisc is slower than subnet_discover Ira Weiny
     [not found]       ` <20100125090958.fa63adb6.weiny2-i2BcT+NCU+M@public.gmane.org>
2010-01-25 17:28         ` Sasha Khapyorsky
2010-01-25 17:43           ` Ira Weiny

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=20100125151928.GN13519@me \
    --to=sashak-smomgflxvozwk0htik3j/w@public.gmane.org \
    --cc=linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=weiny2-i2BcT+NCU+M@public.gmane.org \
    /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.