[PVFS2-CVS] commit by pcarns in pvfs2/src/io/bmi/bmi_gm: bmi-gm.c

Phil Carns pcarns at parl.clemson.edu
Thu Sep 23 22:04:32 EDT 2004


Whoops- I also happened to bump up the maximum message size in GM from 
256K to 512K.  I didn't check that part in on purpose, but I think it is 
for the best anyway so I will leave it for now.

-Phil

CVS commit program wrote:
> Update of /projects/cvsroot/pvfs2/src/io/bmi/bmi_gm
> In directory parlweb:/tmp/cvs-serv7383/src/io/bmi/bmi_gm
> 
> Modified Files:
> 	bmi-gm.c 
> Log Message:
> fix performance bug in bmi_gm module: make sure to account for fact that
> completed msgs may enter queue outside of testcontext() call, otherwise we
> may sleep unecessarily
> - same fix probably needs to be applied to other gm test methods as well,
>   will address shortly
> 
> 
> Index: bmi-gm.c
> ===================================================================
> RCS file: /projects/cvsroot/pvfs2/src/io/bmi/bmi_gm/bmi-gm.c,v
> diff -p -u -r1.57 -r1.58
> --- bmi-gm.c	28 Jul 2004 14:32:40 -0000	1.57
> +++ bmi-gm.c	23 Sep 2004 23:43:18 -0000	1.58
> @@ -268,7 +268,7 @@ enum
>      GM_IMMED_SIZE = 14,
>      GM_CTRL_LENGTH = sizeof(struct ctrl_msg),
>      GM_MODE_IMMED_LIMIT = 0,
> -    GM_MODE_REND_LIMIT = 262144,	/* 256K */
> +    GM_MODE_REND_LIMIT = 524288,	/* 512K */
>      GM_MODE_UNEXP_LIMIT = 16384	/* 16K */
>  };
>  static gm_size_t GM_IMMED_LENGTH;
> @@ -1699,7 +1699,30 @@ int BMI_gm_testcontext(int incount,
>      int ret = -1;
>      method_op_p query_op = NULL;
>  
> +    *outcount = 0;
> +
>      gen_mutex_lock(&interface_mutex);
> +
> +    /* check queue before doing anything */
> +    while((*outcount < incount) && (query_op = 
> +	op_list_shownext(completion_array[context_id])))
> +    {
> +	assert(query_op->context_id == context_id);
> +	op_list_remove(query_op);
> +	error_code_array[*outcount] = query_op->error_code;
> +	actual_size_array[*outcount] = query_op->actual_size;
> +	out_id_array[*outcount] = query_op->op_id;
> +	if(user_ptr_array != NULL)
> +	    user_ptr_array[*outcount] = query_op->user_ptr;
> +	dealloc_gm_method_op(query_op);
> +	(*outcount)++;
> +    }
> +    if(*outcount)
> +    {
> +        gen_mutex_unlock(&interface_mutex);
> +        return(0);
> +    }
> +
>      /* do some ``real work'' here */
>      ret = gm_do_work(max_idle_time_ms*1000);
>      if (ret < 0)
> @@ -1708,8 +1731,7 @@ int BMI_gm_testcontext(int incount,
>  	return (ret);
>      }
>  
> -    *outcount = 0;
> -
> +    /* check queue again */
>      while((*outcount < incount) && (query_op = 
>  	op_list_shownext(completion_array[context_id])))
>      {
> 
> _______________________________________________
> PVFS2-CVS mailing list
> PVFS2-CVS at beowulf-underground.org
> http://www.beowulf-underground.org/mailman/listinfo/pvfs2-cvs



More information about the PVFS2-CVS mailing list