Re: [PATCH] opensm: Add per module logging support

2012-06-05 Thread Hal Rosenstock
On 6/4/2012 8:28 PM, Jim Foraker wrote:
> 
> On Wed, 2012-05-30 at 14:30 -0700, Hal Rosenstock wrote:
>> Add _v2 APIs for osm_log, osm_log_is_active, and osm_log_msg_box
>> Also, add these to libopensm.map
>> Add _V2 forms of the various OSM_LOG macros
>  Why are the _V2 macros necessary?  It appears that the calling
> semantics/effect are the same, so why create new macros instead of
> reusing the old ones?  In particular, it seems like you could move the
> FILE_ID defines above the #includes, and then in osm_log.h say things
> like:
> 
> #ifdef FILE_ID
> #define OSM_LOG_ENTER( OSM_LOG_PTR ) \
> osm_log_v2( OSM_LOG_PTR, OSM_LOG_FUNCS, FILE_ID, \
> "%s: [\n", __func__);
> #else
> #define OSM_LOG_ENTER( OSM_LOG_PTR ) \
> osm_log( OSM_LOG_PTR, OSM_LOG_FUNCS, \
>  "%s: [\n", __func__);
> #endif

Good idea; I'll rework the patch.

>  Or just define FILE_ID everywhere (it seems to be missing from many
> of the libvendor files) 

Most of libvendor files are historical and on verge of deprecation so it
wasn't worth the effort there.

> and make OSM_LOG* always call the v2 functions.

> It seems like this would drastically reduce the patch's footprint.

If by footprint, you mean changed lines of code (rather than object code
size), then yes, this makes sense.

>>
>> All of above pass additional parameter to identify module.
>> Each module defines a unique FILE_ID from 0-254.
>> 255 is reserved to indicate "name not found".
>> FILE_ID must match index in osm_subnet.c:module_name_str
>> table. Note also currently that subnet's
>> per_mod_log_tbl is 128 entries (which is enough
>> more than the number of modules).
>>  
>  Why are there so many magic numbers here?

There are 2 magic numbers. One is to use 255 as not found rather than
explicit status. 128 is to limit the array size but that can be
eliminated at the cost of the array size being larger.

> It seems like
> per_mod_log_tbl's size could be defined in terms of the final value in
> osm_file_ids_enum (ie, you could add a OSM_FILE_LAST_ENTRY to the enum).
> If find_module_name() is changed to return an int (which is what
> osm_log_v2() already uses as file_id's type, so consistency would be
> improved), it could return -1 on failure, making the limit at 255
> irrelevant as well.

Yes, that is an alternative to using 255 as indicating this.

>  Also, how is this expected to work with plugins?  Will plugins be
> expected to use their own logging?

Plugins still use the original/coarse logging or their own logging. In
order to use the per module logging, they'd need to reserve file IDs.

>  Would it be desirable to put FILE_ID (or better yet, module name)
> into the log messages as well?  This would make it a bit easier to find
> where the relevant code is.  We could then phase out the "ERR XXYY"
> scheme, particularly since the XX numbers do not seem to correlate at
> all with FILE_ID.

If we decide to change the ERR logs to include name all we need is __FILE__.

If we want to keep current ERR XXYY scheme, for modules with FILE_ID
that could be used as the XX in ERR XXYY. The issues with doing this are
with original logging uses where that's not the case and any conflict
between FILE_ID as the XX in the ERR and the current ERR XXs used now.
Anyhow, this seems like a follow on patch and needs more discussion/thought.

-- Hal

>  Jim
> 
>>
>> Use version 2 API (osm_log_v2) and macros (OSM_LOG_V2_)
>> in OpenSM client code
>>
>> Added options to enable/disable per module logging and
>> it's configuration file
>>
>> Config file format
>> Set of lines with module name and logging level as follows:
>> 
>> where:
>> module name is file name including .c
>> separator is either = , space, or tab
>> logging level is the same levels as used in the coarse/overall logging
>> as follows:
>>
>>  BITLOG LEVEL ENABLED
>>     -
>>  0x01 - ERROR (error messages)
>>  0x02 - INFO (basic messages, low volume)
>>  0x04 - VERBOSE (interesting stuff, moderate volume)
>>  0x08 - DEBUG (diagnostic, high volume)
>>  0x10 - FUNCS (function entry/exit, very high volume)
>>  0x20 - FRAMES (dumps all SMP and GMP frames)
>>  0x40 - ROUTING (dump FDB routing information)
>>  0x80 - currently unused
>>
>> Add parsing of the configuration file into table of log levels
>> indexed by FILE_ID
>>
>> Added osm_get_log_per_module routine to obtain the configured info
>> for a supplied module name. This is a new library function.
>>
>> Signed-off-by: Hal Rosenstock 
>> ---
>> As this patch is too large for email, please find this @
>> https://www.openfabrics.org/~halr/0001-opensm-Add-per-module-logging-support.patch
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
>> the body of a message to majord...@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in

Re: [PATCH] opensm: Add per module logging support

2012-06-04 Thread Jim Foraker

On Wed, 2012-05-30 at 14:30 -0700, Hal Rosenstock wrote:
> Add _v2 APIs for osm_log, osm_log_is_active, and osm_log_msg_box
> Also, add these to libopensm.map
> Add _V2 forms of the various OSM_LOG macros
 Why are the _V2 macros necessary?  It appears that the calling
semantics/effect are the same, so why create new macros instead of
reusing the old ones?  In particular, it seems like you could move the
FILE_ID defines above the #includes, and then in osm_log.h say things
like:

#ifdef FILE_ID
#define OSM_LOG_ENTER( OSM_LOG_PTR ) \
osm_log_v2( OSM_LOG_PTR, OSM_LOG_FUNCS, FILE_ID, \
"%s: [\n", __func__);
#else
#define OSM_LOG_ENTER( OSM_LOG_PTR ) \
osm_log( OSM_LOG_PTR, OSM_LOG_FUNCS, \
 "%s: [\n", __func__);
#endif

 Or just define FILE_ID everywhere (it seems to be missing from many
of the libvendor files) and make OSM_LOG* always call the v2 functions.
It seems like this would drastically reduce the patch's footprint.

> 
> All of above pass additional parameter to identify module.
> Each module defines a unique FILE_ID from 0-254.
> 255 is reserved to indicate "name not found".
> FILE_ID must match index in osm_subnet.c:module_name_str
> table. Note also currently that subnet's
> per_mod_log_tbl is 128 entries (which is enough
> more than the number of modules).
>  
 Why are there so many magic numbers here?  It seems like
per_mod_log_tbl's size could be defined in terms of the final value in
osm_file_ids_enum (ie, you could add a OSM_FILE_LAST_ENTRY to the enum).
If find_module_name() is changed to return an int (which is what
osm_log_v2() already uses as file_id's type, so consistency would be
improved), it could return -1 on failure, making the limit at 255
irrelevant as well.
 Also, how is this expected to work with plugins?  Will plugins be
expected to use their own logging?
 Would it be desirable to put FILE_ID (or better yet, module name)
into the log messages as well?  This would make it a bit easier to find
where the relevant code is.  We could then phase out the "ERR XXYY"
scheme, particularly since the XX numbers do not seem to correlate at
all with FILE_ID.

 Jim

> 
> Use version 2 API (osm_log_v2) and macros (OSM_LOG_V2_)
> in OpenSM client code
> 
> Added options to enable/disable per module logging and
> it's configuration file
> 
> Config file format
> Set of lines with module name and logging level as follows:
> 
> where:
> module name is file name including .c
> separator is either = , space, or tab
> logging level is the same levels as used in the coarse/overall logging
> as follows:
> 
>  BITLOG LEVEL ENABLED
>     -
>  0x01 - ERROR (error messages)
>  0x02 - INFO (basic messages, low volume)
>  0x04 - VERBOSE (interesting stuff, moderate volume)
>  0x08 - DEBUG (diagnostic, high volume)
>  0x10 - FUNCS (function entry/exit, very high volume)
>  0x20 - FRAMES (dumps all SMP and GMP frames)
>  0x40 - ROUTING (dump FDB routing information)
>  0x80 - currently unused
> 
> Add parsing of the configuration file into table of log levels
> indexed by FILE_ID
> 
> Added osm_get_log_per_module routine to obtain the configured info
> for a supplied module name. This is a new library function.
> 
> Signed-off-by: Hal Rosenstock 
> ---
> As this patch is too large for email, please find this @
> https://www.openfabrics.org/~halr/0001-opensm-Add-per-module-logging-support.patch
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
> the body of a message to majord...@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] opensm: Add per module logging support

2012-05-30 Thread Hal Rosenstock
On 5/30/2012 7:03 PM, Ira Weiny wrote:
> On Wed, 30 May 2012 17:30:50 -0400
> Hal Rosenstock  wrote:
> 
>>
>> Add _v2 APIs for osm_log, osm_log_is_active, and osm_log_msg_box
>> Also, add these to libopensm.map
>> Add _V2 forms of the various OSM_LOG macros
>>
>> All of above pass additional parameter to identify module.
>> Each module defines a unique FILE_ID from 0-254.
>> 255 is reserved to indicate "name not found".
>> FILE_ID must match index in osm_subnet.c:module_name_str
>> table. Note also currently that subnet's
>> per_mod_log_tbl is 128 entries (which is enough
>> more than the number of modules).
> 
> This is a great idea for debugging but do you really need to define the 
> "FILE_ID's"?  Could you use the __FILE__ macro to do a lookup?  Or do you 
> think that would affect performance?

That was the first implementation and the performance impact was too much.

> Also do you really think that 255 files is enough id's to reserve?

Yes but it's hard to predict the future. We're only at 88 now. We've
only added a few per year and this leaves >160 more.

-- Hal

> Ira
> 
>>
>> Use version 2 API (osm_log_v2) and macros (OSM_LOG_V2_)
>> in OpenSM client code
>>
>> Added options to enable/disable per module logging and
>> it's configuration file
>>
>> Config file format
>> Set of lines with module name and logging level as follows:
>> 
>> where:
>> module name is file name including .c
>> separator is either = , space, or tab
>> logging level is the same levels as used in the coarse/overall logging
>> as follows:
>>
>>  BITLOG LEVEL ENABLED
>>     -
>>  0x01 - ERROR (error messages)
>>  0x02 - INFO (basic messages, low volume)
>>  0x04 - VERBOSE (interesting stuff, moderate volume)
>>  0x08 - DEBUG (diagnostic, high volume)
>>  0x10 - FUNCS (function entry/exit, very high volume)
>>  0x20 - FRAMES (dumps all SMP and GMP frames)
>>  0x40 - ROUTING (dump FDB routing information)
>>  0x80 - currently unused
>>
>> Add parsing of the configuration file into table of log levels
>> indexed by FILE_ID
>>
>> Added osm_get_log_per_module routine to obtain the configured info
>> for a supplied module name. This is a new library function.
>>
>> Signed-off-by: Hal Rosenstock 
>> ---
>> As this patch is too large for email, please find this @
>> https://www.openfabrics.org/~halr/0001-opensm-Add-per-module-logging-support.patch
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
>> the body of a message to majord...@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] opensm: Add per module logging support

2012-05-30 Thread Ira Weiny
On Wed, 30 May 2012 17:30:50 -0400
Hal Rosenstock  wrote:

> 
> Add _v2 APIs for osm_log, osm_log_is_active, and osm_log_msg_box
> Also, add these to libopensm.map
> Add _V2 forms of the various OSM_LOG macros
> 
> All of above pass additional parameter to identify module.
> Each module defines a unique FILE_ID from 0-254.
> 255 is reserved to indicate "name not found".
> FILE_ID must match index in osm_subnet.c:module_name_str
> table. Note also currently that subnet's
> per_mod_log_tbl is 128 entries (which is enough
> more than the number of modules).

This is a great idea for debugging but do you really need to define the 
"FILE_ID's"?  Could you use the __FILE__ macro to do a lookup?  Or do you think 
that would affect performance?

Also do you really think that 255 files is enough id's to reserve?

Ira

> 
> Use version 2 API (osm_log_v2) and macros (OSM_LOG_V2_)
> in OpenSM client code
> 
> Added options to enable/disable per module logging and
> it's configuration file
> 
> Config file format
> Set of lines with module name and logging level as follows:
> 
> where:
> module name is file name including .c
> separator is either = , space, or tab
> logging level is the same levels as used in the coarse/overall logging
> as follows:
> 
>  BITLOG LEVEL ENABLED
>     -
>  0x01 - ERROR (error messages)
>  0x02 - INFO (basic messages, low volume)
>  0x04 - VERBOSE (interesting stuff, moderate volume)
>  0x08 - DEBUG (diagnostic, high volume)
>  0x10 - FUNCS (function entry/exit, very high volume)
>  0x20 - FRAMES (dumps all SMP and GMP frames)
>  0x40 - ROUTING (dump FDB routing information)
>  0x80 - currently unused
> 
> Add parsing of the configuration file into table of log levels
> indexed by FILE_ID
> 
> Added osm_get_log_per_module routine to obtain the configured info
> for a supplied module name. This is a new library function.
> 
> Signed-off-by: Hal Rosenstock 
> ---
> As this patch is too large for email, please find this @
> https://www.openfabrics.org/~halr/0001-opensm-Add-per-module-logging-support.patch
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
> the body of a message to majord...@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html


-- 
Ira Weiny
Member of Technical Staff
Lawrence Livermore National Lab
925-423-8008
wei...@llnl.gov
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html