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 ,
      why because  In the current MDS messaging  we do full encoded when 
the messages were sent to another process/node, irrelevant of “ARCHTYPE”

       I already verified  cross 32/64  middle-ware & application 
combination , all the fowls are working fine .

>
> 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.

-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

Reply via email to