Hi All,

I re-verified the behavior of OpenSAF 
MDS_ENC_TYPE_FULL/MDS_ENC_TYPE_FLAT messaging
and its optimization , following is my observation and option:

1)  In the default OpenSAF  configuration (` mds_arch=0` ) , messaging 
across the node is  ENC_TYPE_FULL and
      messaging with-in the node is ENC_TYPE_FLAT  .

2)  Even though Opensaf  is configured with default  `mds_arch=0`, if 
their is difference of  32--bit application communicating to 64-bit   
middle-ware
      ( mixed 32/64 bit clients on the same Node),  messaging with-in  
the node  is also ENC_TYPE_FULL.

3)  when OpenSAF  is configured with `mds_arch=1... to 7` messaging 
across  & with-in the node  is ENC_TYPE_FLAT  ,
     hear we have advantage of  message optimization , only when 
explicitly enabling this  configuration .

4)  Unfortunate the same arc message optimization feature  got broken in 
few services such as RDE & PLM
     doesn't support ENC_TYPE_FLAT , we need fix these issue along with 
in-service upgrade  to make it work properly .

5)  One more important note is that  the `same arc message optimization` 
feature was not exposed  to OpenSAF user till now.

6)  This  current patch Honors  the default Opensaf  configuration ` 
mds_arch=0`  behavior ( point 1 & 2 ) and it removed
       hidden  `same arc message optimization`  feature related code and 
used  those  3bits/variable for the purpose of  MDS version.


So I agree with Hans and let us not regressed for Un exposed feature , 
and  we will use the ARCHTYPE 3 bits for
  MDS version unless we get alternate bits/variables used for  MDS 
version. I also NOT much in favor of little bit expensive
`new Node install & subscribe its Mds version` (My previously published 
approach)

So following are current options :

   - Use ARCHTYPE 3 bits for  MDS version and discard un exposed feature 
( `mds_arch` config option)

   - Find out alter native bits for MDS version fix all the 
ENC_TYPE_FLAT issue with in-service upgrade
     and expose `same arc message optimization` feature to OpenSAF users.

   - Use `new Node install & subscribe` option for Mds version (My 
previously published approach) and fix
     all the  ENC_TYPE_FLAT issue with in-service upgrade and expose 
`same arc message optimization`
     feature to OpenSAF users.


-AVM

On 5/1/2014 2:45 PM, SuryaNarayana Garlapati wrote:
>
> On Thursday 01 May 2014 02:30 PM, Hans Feldt wrote:
>> Let's be clear that MDS a pure internal opensaf service since quite a 
>> long time. There are no "applications" to consider at all. This means 
>> the only thing to care about is in-service performance and making 
>> sure characteristics are improved, not regressed.
> [Surya] I am saying in the context of internal messaging between the 
> services which use MDS. Yes, thats what even i am trying to.
>>
>> I am not sure we have to maintain some legacy requirement of mixed 
>> 32/64 bit clients on the same system. I don't see why we should.
> [Surya] This is not limited to even 32/64 bit. Its how the encoding is 
> handled for the destinations.
>>
>> Thanks,
>> Hans
>>
>>> -----Original Message-----
>>> From: SuryaNarayana Garlapati 
>>> [mailto:suryanarayana.garlap...@oracle.com]
>>> Sent: den 1 maj 2014 10:54
>>> To: A V Mahesh
>>> Cc: opensaf-devel@lists.sourceforge.net
>>> Subject: Re: [devel] [PATCH 3 of 4] mds: use TIPC 
>>> segmentation/reassembly [#654]
>>>
>>>
>>> On Thursday 01 May 2014 01:04 PM, A V Mahesh wrote:
>>>> On 5/1/2014 10:16 AM, SuryaNarayana Garlapati wrote:
>>>>> The archtype is not a legacy one, it was introduced to have the
>>>>> optimization for the message encoding by the applications.
>>>> Passing compile flags `mds_arch=1`  `mds_arch=2`  (mds_arch, [The
>>>> arch-type input to MDS - valid values 1-7]) , is not a standard
>>>> Open-Source ( enterprise things for legacy product ) option for
>>>> compilations.
>>> [Surya] Wrong, if you see any standard linux configure options for any
>>> linux application code distributions, they do provide the options for
>>> supporting the options to provide such powerpc, intel, 32/64bit etc. So
>>> similar is the configure options for opensaf as well. For example you
>>> can see the configure options for the net-snmp as well.
>>>> Open source user not need to Understand/get-Educate  about this
>>>> internal options ,
>>> [Surya] This is not a internal option, configure option which is 
>>> exposed
>>> to user as well.
>>>> we are ok loose advantage of flat encode optimization ,
>>>> from now we want to send full_encode to different node.
>>> [Surya] This is not only done for optimization, this internally effects
>>> the message performance between the opensaf services which do huge
>>> messaging.
>>> I am on way of thinking the solution for this. Lets wait.
>>>>
>>>> We are also raising enhancement ticket for  code clean.
>>>>
>>>> -AVM
>>>>
>>>>
>>>> On 5/1/2014 10:16 AM, SuryaNarayana Garlapati wrote:
>>>>> On Thursday 01 May 2014 09:56 AM, A V Mahesh wrote:
>>>>>> Hi Surya,
>>>>>>
>>>>>> On 5/1/2014 7:28 AM, Suryanarayana Garlapati wrote:
>>>>>>> Nack.
>>>>>>> MDS ARCHWORD is used for deciding the factor whether the message
>>>>>>> which is being sent to the destination should be encoded
>>>>>>> full/flat/copied. This
>>>>>>> bits were introduced to do a optimization in the way the callbacks
>>>>>>> encode full/flat are called. For example, if there are two
>>>>>>> processes(can be present in the same node or different node) and
>>>>>>> there architecture and bit size is same, so in this case, the
>>>>>>> encode flat can be called (or simply a flat copy of the message can
>>>>>>> be done in the UB). If these bits were not used, earlier the
>>>>>>> messages was being full encoded when the messages were sent to
>>>>>>> another node. At the same time, the arch field is given in the
>>>>>>> configure such that this can be used for different architectures
>>>>>>> such as the powerpc, etc.
>>>>>> [AVM]
>>>>>>       “ARCHTYPE”  is getting only used while cross-compiling, and to
>>>>>> distinguish architecture flavors:  x86,
>>>>>>        PowerPC, m68k ,ect .
>>>>>> In the code "arch_word" is used while encoding whether to do
>>>>>> MDS_ENC_TYPE_FLAT/MDS_ENC_TYPE_FULL.
>>>>>>
>>>>>>        Keeping  “ARCHTYPE” doesn't have any significance in current
>>>>>> Open-sourced Opnesaf code ,
>>>>> [Surya] This is provided to accommodate different architectures and
>>>>> is a build option which optimizes the applications way of message
>>>>> encoding(full/flat) and corresponding decode(full/flat).
>>>>> So that means, you want to remove this support and introduce the over
>>>>> head again. One more thing, with the new changes if you have two
>>>>> nodes one with powerpc and intel, both will not be able to 
>>>>> communicate
>>>>> each other as both will result in flat encode/flat decode(as the
>>>>> value is one with the latest changes).
>>>>>> why because  In the current MDS messaging we do full encoded when
>>>>>> the messages were sent to another process/node, irrelevant of
>>>>>> “ARCHTYPE”
>>>>> [Surya] Wrong, the decision is done always on the archword only.
>>>>>>        I already verified  cross 32/64  middle-ware & application
>>>>>> combination , all the fowls are working fine .
>>>>> [Surya] As you said this might work, but you are loosing the
>>>>> optimization and would always result in full encode/full decode of
>>>>> application messages which is an overhead.
>>>>>>> I am thinking of a solution for this and will get back to you.
>>>>>> [AVM] we already have an alternative option of  new node do install
>>>>>> & subscribe its Node Mds version, to handle in-service Upgrade ,
>>>>>>              but we used legacy “ARCHTYPE” 3 bits for Mds version
>>>>>> which is optimized solution then install & subscribe.
>>>>> [Surya] Thats what we had discussed before as well. The archtype is
>>>>> not a legacy one, it was introduced to have the optimization for the
>>>>> message encoding by the applications.
>>>>>> -AVM
>>>>>>>
>>>>>>> Regards
>>>>>>> Surya
>>>>>>>
>>>>>>>
>>>>>>> ----- Original Message -----
>>>>>>> From: osafde...@gmail.com
>>>>>>> To: mahesh.va...@oracle.com
>>>>>>> Cc: opensaf-devel@lists.sourceforge.net
>>>>>>> Sent: Tuesday, April 29, 2014 10:58:53 AM GMT +05:30 Chennai,
>>>>>>> Kolkata, Mumbai, New Delhi
>>>>>>> Subject: [devel] [PATCH 3 of 4] mds: use TIPC
>>>>>>> segmentation/reassembly [#654]
>>>>>>>
>>>>>>>    configure.ac                          |  21 
>>>>>>> ---------------------
>>>>>>>    osaf/libs/core/mds/Makefile.am        |   1 -
>>>>>>>    osaf/libs/core/mds/include/mds_dt2c.h |  17 ++++++++---------
>>>>>>>    osaf/libs/core/mds/mds_c_sndrcv.c     |  14 +++++---------
>>>>>>>    osaf/libs/core/mds/mds_dt_tipc.c      |  11 ++++++++++-
>>>>>>>    osaf/libs/core/mds/mds_log.c          |   4 ++--
>>>>>>>    6 files changed, 25 insertions(+), 43 deletions(-)
>>>>>>>
>>>>>>>
>>>>>>> TIPC supports sending message with a maximum length of 66000 bytes.
>>>>>>> MDS supports
>>>>>>> sending even bigger messages, upto ~46Mb. MDS has used an internal
>>>>>>> fragmentation
>>>>>>> of just 1400 bytes (MDTM_NORMAL_MSG_FRAG_SIZE) despite that the
>>>>>>> receive buffer
>>>>>>> is 8000 bytes (MDS_DIRECT_BUF_MAXSIZE)
>>>>>>>
>>>>>>> This patch changes MDS to use TIPC segmentation/reassembly. This
>>>>>>> gives benefits
>>>>>>> such as secure transmission (TIPC does retransmission). TIPC send
>>>>>>> congestion is
>>>>>>> reduced since TIPC counts messages not bytes. Less processing done
>>>>>>> in user
>>>>>>> space in the sending opensaf or client process.
>>>>>>>
>>>>>>> Since the receive buffer of older MDS cores is limited to 8000
>>>>>>> bytes we have be
>>>>>>> sure not to send larger messages than that to older cores.
>>>>>>> Otherwise we have
>>>>>>> problems with in-service upgradeability.
>>>>>>>
>>>>>>> Each MDS TIPC port is bound to a functional address - a port name.
>>>>>>> The port name
>>>>>>> consists of 32 bit type and 32 bit instance. The 4 msb of the
>>>>>>> instance word
>>>>>>> contains the so called "archword" field. The msb indicates if this
>>>>>>> MDS core is
>>>>>>> 32 or 64 bit. The remaining 3 bits is now used as a version field.
>>>>>>> Version 0 is
>>>>>>> used by older versions of MDS, version 1 is now used to indicate
>>>>>>> the capability
>>>>>>> for longer fragmentation.
>>>>>>>
>>>>>>> This information is part of the published port name thus a
>>>>>>> subscriber will
>>>>>>> get them using the TIPC discovery service. These bits are ignored
>>>>>>> by old MDS
>>>>>>> cores, so it can receive messages from a new MDS core. When sending
>>>>>>> a message
>>>>>>> this bit is used to understand if the peer uses TIPC
>>>>>>> segmentation/reassembly
>>>>>>> (or not) and adapt the limit accordingly.
>>>>>>>
>>>>>>> The possibility to set mds_arch using configure has been removed.
>>>>>>>
>>>>>>> The change is in-service compliant and can be upgraded into a 
>>>>>>> system.
>>>>>>>
>>>>>>> diff --git a/configure.ac b/configure.ac
>>>>>>> --- a/configure.ac
>>>>>>> +++ b/configure.ac
>>>>>>> @@ -470,27 +470,6 @@ if test "$enable_java" = no; then
>>>>>>>    fi
>>>>>>>      #############################################
>>>>>>> -# MDS ARCH TYPE: MDS advises message encode/decode
>>>>>>> -# optimization to its clients if the sender and receiver
>>>>>>> -# are of "compatible-type". For this optimization to work,
>>>>>>> -# the sender's platform and receiver's platform should be
>>>>>>> -# similar (for e.g. both PowerPC) and use an libncs_core built
>>>>>>> -# with the same value for "mds_arch". An "mds_arch" value of 0
>>>>>>> -# is the default value and stands for a platform which is NOT
>>>>>>> -# compatible with any platform.
>>>>>>> -#############################################
>>>>>>> -
>>>>>>> -AC_ARG_VAR([mds_arch], [The arch-type input to MDS - valid values
>>>>>>> 1-7])
>>>>>>> -
>>>>>>> -if test "$mds_arch" = ""; then
>>>>>>> -        mdsarchtype=0
>>>>>>> -else
>>>>>>> -        mdsarchtype=$mds_arch
>>>>>>> -fi
>>>>>>> -
>>>>>>> -AC_SUBST([MDS_WORD_ARCH_FLAGS], [" -DMDS_ARCH_TYPE=$mdsarchtype"])
>>>>>>> -
>>>>>>> -#############################################
>>>>>>>    # Checks for libraries.
>>>>>>>    #############################################
>>>>>>>    PKG_CHECK_MODULES([XML2], [libxml-2.0])
>>>>>>> diff --git a/osaf/libs/core/mds/Makefile.am
>>>>>>> b/osaf/libs/core/mds/Makefile.am
>>>>>>> --- a/osaf/libs/core/mds/Makefile.am
>>>>>>> +++ b/osaf/libs/core/mds/Makefile.am
>>>>>>> @@ -23,7 +23,6 @@ SUBDIRS = include
>>>>>>>    noinst_LTLIBRARIES = libmds.la
>>>>>>>      libmds_la_CPPFLAGS = \
>>>>>>> -    @MDS_WORD_ARCH_FLAGS@ \
>>>>>>>        $(AM_CPPFLAGS)
>>>>>>>      libmds_la_LDFLAGS = -static
>>>>>>> diff --git a/osaf/libs/core/mds/include/mds_dt2c.h
>>>>>>> b/osaf/libs/core/mds/include/mds_dt2c.h
>>>>>>> --- a/osaf/libs/core/mds/include/mds_dt2c.h
>>>>>>> +++ b/osaf/libs/core/mds/include/mds_dt2c.h
>>>>>>> @@ -33,17 +33,16 @@
>>>>>>>      typedef uint8_t MDS_SVC_ARCHWORD_TYPE;    /*MDS app-svc arch
>>>>>>> and word_size combination */
>>>>>>>    -/* MDS_WORD_SIZE_TYPE and MDS_ARCH_TYPE are compile-time 
>>>>>>> macros */
>>>>>>> -
>>>>>>> -#ifndef MDS_ARCH_TYPE
>>>>>>> -#define MDS_ARCH_TYPE 0        /* Stands for unspecified
>>>>>>> architecture type */
>>>>>>> -#elif (MDS_ARCH_TYPE > 7)
>>>>>>> -#error MDS_ARCH_TYPE should be in the range 0 to 7.
>>>>>>> -#endif
>>>>>>> -
>>>>>>>    #define MDS_WORD_SIZE_TYPE ((sizeof(long)/4) - 1)    /* 0 for
>>>>>>> 32-bit, 1 for 64-bit */
>>>>>>>    -#define MDS_SELF_ARCHWORD ((MDS_SVC_ARCHWORD_TYPE)
>>>>>>> ((MDS_WORD_SIZE_TYPE<<3) | MDS_ARCH_TYPE))
>>>>>>> +/*
>>>>>>> + * 4 bit ARCHWORD usage:
>>>>>>> + * Bit 3 is wordsize
>>>>>>> + * Bit 2:0 is a version field indicating capabilities.
>>>>>>> + *    Version 0 uses 1400 bytes fragmentation.
>>>>>>> + *    Version 1 uses TIPC max msg (66000 bytes) fragmentation.
>>>>>>> + */
>>>>>>> +#define MDS_SELF_ARCHWORD ((MDS_SVC_ARCHWORD_TYPE)
>>>>>>> ((MDS_WORD_SIZE_TYPE<<3) | 1))
>>>>>>>      typedef enum {
>>>>>>>        MDS_VIEW_NORMAL,
>>>>>>> diff --git a/osaf/libs/core/mds/mds_c_sndrcv.c
>>>>>>> b/osaf/libs/core/mds/mds_c_sndrcv.c
>>>>>>> --- a/osaf/libs/core/mds/mds_c_sndrcv.c
>>>>>>> +++ b/osaf/libs/core/mds/mds_c_sndrcv.c
>>>>>>> @@ -1483,10 +1483,10 @@ static uint32_t mcm_msg_encode_full_or_f
>>>>>>>        msg_send.dest_pwe_id =
>>>>>>> m_MDS_GET_PWE_ID_FROM_SVC_HDL(svc_cb->svc_hdl);
>>>>>>>        msg_send.dest_vdest_id = dest_vdest_id;
>>>>>>>        msg_send.src_svc_sub_part_ver = svc_cb->svc_sub_part_ver;
>>>>>>> +    msg_send.msg_arch_word = to_msg->rem_svc_arch_word;
>>>>>>>        if (msg_send.msg.encoding == MDS_ENC_TYPE_FULL) {
>>>>>>>            if (NULL == bcast_ptr) {
>>>>>>> -            msg_send.msg_fmt_ver =
>>>>>>> cbinfo.info.enc.o_msg_fmt_ver;    /* archword will be filled in
>>>>>>> next label */
>>>>>>> -            msg_send.msg_arch_word = to_msg->rem_svc_arch_word;
>>>>>>> +            msg_send.msg_fmt_ver = cbinfo.info.enc.o_msg_fmt_ver;
>>>>>>>            }
>>>>>>>        } else {
>>>>>>>            if (NULL == bcast_ptr) {
>>>>>>> @@ -6502,14 +6502,10 @@ static uint32_t mcm_query_for_node_dest_
>>>>>>>        if (m_MDS_GET_ADEST == adest) {
>>>>>>>            *to = DESTINATION_SAME_PROCESS;
>>>>>>>        } else if (MDS_SELF_ARCHWORD == arch_word) {
>>>>>>> -        if ((0 == (MDS_SELF_ARCHWORD & 0x7) && (0 == (arch_word &
>>>>>>> 0x7)))) {
>>>>>>> -            if (m_MDS_GET_NODE_ID_FROM_ADEST(m_MDS_GET_ADEST) ==
>>>>>>> m_MDS_GET_NODE_ID_FROM_ADEST(adest)) {
>>>>>>> -                *to = DESTINATION_ON_NODE;    /* This hash define
>>>>>>> may give a wrong impression, but actually it means to do 
>>>>>>> flat_enc */
>>>>>>> -            } else {
>>>>>>> -                *to = DESTINATION_OFF_NODE;
>>>>>>> -            }
>>>>>>> +        if (m_MDS_GET_NODE_ID_FROM_ADEST(m_MDS_GET_ADEST) ==
>>>>>>> m_MDS_GET_NODE_ID_FROM_ADEST(adest)) {
>>>>>>> +            *to = DESTINATION_ON_NODE;    /* This hash define may
>>>>>>> give a wrong impression, but actually it means to do flat_enc */
>>>>>>>            } else {
>>>>>>> -            *to = DESTINATION_ON_NODE;
>>>>>>> +            *to = DESTINATION_OFF_NODE;
>>>>>>>            }
>>>>>>>        } else {
>>>>>>>            *to = DESTINATION_OFF_NODE;
>>>>>>> diff --git a/osaf/libs/core/mds/mds_dt_tipc.c
>>>>>>> b/osaf/libs/core/mds/mds_dt_tipc.c
>>>>>>> --- a/osaf/libs/core/mds/mds_dt_tipc.c
>>>>>>> +++ b/osaf/libs/core/mds/mds_dt_tipc.c
>>>>>>> @@ -2035,7 +2035,16 @@ uint32_t mds_mdtm_send_tipc(MDTM_SEND_RE
>>>>>>>                    m_MDS_LOG_INFO("MDTM: User Sending Data 
>>>>>>> lenght=%d
>>>>>>> Fr_svc=%d to_svc=%d\n", len,
>>>>>>>                               req->src_svc_id, req->dest_svc_id);
>>>>>>>    -                int frag_size = MDTM_NORMAL_MSG_FRAG_SIZE;
>>>>>>> +                // determine fragment limit using a bit in
>>>>>>> destination archword
>>>>>>> +                int frag_size;
>>>>>>> +                int version = req->msg_arch_word & 0x7;
>>>>>>> +                if (version > 0) {
>>>>>>> +                    // normal mode, use TIPC fragmentation
>>>>>>> +                    frag_size = TIPC_MAX_USER_MSG_SIZE;
>>>>>>> +                } else {
>>>>>>> +                    // old mode, completely skip TIPC 
>>>>>>> fragmentation
>>>>>>> +                    frag_size = MDTM_NORMAL_MSG_FRAG_SIZE;
>>>>>>> +                }
>>>>>>>                      if (len > frag_size) {
>>>>>>>                        /* Packet needs to be fragmented and send */
>>>>>>> diff --git a/osaf/libs/core/mds/mds_log.c
>>>>>>> b/osaf/libs/core/mds/mds_log.c
>>>>>>> --- a/osaf/libs/core/mds/mds_log.c
>>>>>>> +++ b/osaf/libs/core/mds/mds_log.c
>>>>>>> @@ -64,8 +64,8 @@ uint32_t mds_log_init(char *log_file_nam
>>>>>>>          if ((fh = fopen(lf, "a+")) != NULL) {
>>>>>>>            fclose(fh);
>>>>>>> -        log_mds_notify("BEGIN MDS LOGGING|
>>>>>>> PID=%d|ARCH=%d|64bit=%ld\n",
>>>>>>> -                   process_id, MDS_ARCH_TYPE,
>>>>>>> (long)MDS_WORD_SIZE_TYPE);
>>>>>>> +        log_mds_notify("BEGIN MDS LOGGING|
>>>>>>> PID=%d|ARCHW=%x|64bit=%ld\n",
>>>>>>> +                   process_id, MDS_SELF_ARCHWORD,
>>>>>>> (long)MDS_WORD_SIZE_TYPE);
>>>>>>>        }
>>>>>>>          return NCSCC_RC_SUCCESS;
>>>>>>>
>>>>>>> ------------------------------------------------------------------------------
>>>>>>>  
>>>>>>>
>>>>>>>
>>>>>>> "Accelerate Dev Cycles with Automated Cross-Browser Testing - 
>>>>>>> For FREE
>>>>>>> Instantly run your Selenium tests across 300+ browser/OS 
>>>>>>> combos.  Get
>>>>>>> unparalleled scalability from the best Selenium testing platform
>>>>>>> available.
>>>>>>> Simple to use. Nothing to install. Get started now for free."
>>>>>>> http://p.sf.net/sfu/SauceLabs
>>>>>>> _______________________________________________
>>>>>>> Opensaf-devel mailing list
>>>>>>> Opensaf-devel@lists.sourceforge.net
>>>>>>> https://lists.sourceforge.net/lists/listinfo/opensaf-devel
>>>
>>> ------------------------------------------------------------------------------
>>>  
>>>
>>> "Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE
>>> Instantly run your Selenium tests across 300+ browser/OS combos.  Get
>>> unparalleled scalability from the best Selenium testing platform 
>>> available.
>>> Simple to use. Nothing to install. Get started now for free."
>>> http://p.sf.net/sfu/SauceLabs
>>> _______________________________________________
>>> Opensaf-devel mailing list
>>> Opensaf-devel@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/opensaf-devel
>


------------------------------------------------------------------------------
Is your legacy SCM system holding you back? Join Perforce May 7 to find out:
&#149; 3 signs your SCM is hindering your productivity
&#149; Requirements for releasing software faster
&#149; Expert tips and advice for migrating your SCM now
http://p.sf.net/sfu/perforce
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to