Hi All,

This patch adjusted the MDS send fragmentation size from 1400 to 65479. This value is derived from TIPC_MAX_USER_MSG_SIZE (linux/tipc.h) which is 66000 and TCP max packet size.

Following are some performance statistics with and without the patch for your reference. The `cpuinfo` & `meminfo` of node is
provide in attached `nodes_cpuinfo_meminfo.txt`file.

The fragmentation size (65479) can be tuned or made configurable based on the review comments.

The rest of the changes in the patch are related to backward compatibility.
Patch 3, changes imm to max utilize this increased fragment size.



IMP Note : While testing performance WITH patch , imm.db (300k objects ) is re-generate, In old imm.db the value of `opensafImmSyncBatchSize` attr of `safRdn=immManagement,safApp=safImmService` object is persistently saved with old value of 4096, it has to be updated to new value of 65479.

-AVM

On 1/29/2014 4:58 PM, mahesh.va...@oracle.com wrote:
  osaf/libs/core/include/mds_papi.h        |    4 +-
  osaf/libs/core/include/ncsusrbuf.h       |   17 ++-
  osaf/libs/core/mds/include/mds_core.h    |   25 +++
  osaf/libs/core/mds/include/mds_dt.h      |   25 +++-
  osaf/libs/core/mds/include/mds_dt2c.h    |    1 +
  osaf/libs/core/mds/include/mds_dt_tipc.h |    2 +
  osaf/libs/core/mds/mds_c_api.c           |   20 +++
  osaf/libs/core/mds/mds_c_db.c            |   83 ++++++++++++
  osaf/libs/core/mds/mds_c_sndrcv.c        |    2 +-
  osaf/libs/core/mds/mds_dt_tipc.c         |  206 ++++++++++++++++++++++++++++--
  osaf/libs/core/mds/mds_dt_trans.c        |   18 +-
  11 files changed, 374 insertions(+), 29 deletions(-)


1) MDS fragmentation value changed from 1400 to MDS_DIRECT_BUF_MAXSIZE (65535 
maximum packet size)-(56 MDS header) ,
#defined MDTM_NORMAL_MSG_FRAG_SIZE_MAX MDS_DIRECT_BUF_MAXSIZE .

2) MDS MDS_DIRECT_BUF_MAXSIZE value changed from 8000 to (65535 maximum packet 
size)-(56 MDS header) ,
#defined MDTM_NORMAL_MSG_FRAG_SIZE_MAX (65535 maximum packet size)-(56 MDS 
header)

3) This PAYLOAD_BUF_SIZE value is suppose to be equal to MDS_DIRECT_BUF_MAXSIZE
(65535 maximum packet size)-(56 MDS header) ,but in the previous releases of
Opensaf the value of TIPC inbuf size of MDTM_RECV_BUFFER_SIZE (mds_dt_tipc.c)
TIPC was limited to(8000+MDS header ) , we have in-service Upgrade issue,
so it is not possible to send the new MDS_DIRECT_BUF_MAXSIZE (65535 maximum 
packet size)-(56 MDS header)
value previous Opensaf version nodes , so for the current release it is limited 
to 8000,
possibly adjust this in the future Opensaf releases to MDS_DIRECT_BUF_MAXSIZE.


4) To support in-service MDS TIPC Upgrade issue MDTM_NORMAL_MSG_FRAG_SIZE_MIN
is provide, and this fragment size is used to send to previous version of 
Opensaf Node
while in-service Upgrade.

In the previous releases of Opensaf the value of TIPC inbuf size of
MDTM_RECV_BUFFER_SIZE (mds_dt_tipc.c) TIPC was limited to(8000+MDS header) ,
we have in-service Upgrade issue, so it is not possible to send the new
MDS_DIRECT_BUF_MAXSIZE (65535 maximum packet size)-(56 MDS header)
value previous Opensaf version nodes , so for the current release it is limited 
to 8000,
possibly this will be removed in the future Opensaf releases .

5) To handle in-service Upgrade of fragmentation changes , New node do install 
& subscribe its Node Mds version.
the MDTM_NORMAL_MSG_FRAG_SIZE_MIN fragment size is used to send to previous 
version of Opensaf
Node while in-service Upgrade ,and the old nodes will not publishes so we need to 
fragment to MDTM_NORMAL_MSG_FRAG_SIZE_MIN size.mds_mdtm_node_info_install_tipc() 
& mds_mdtm_node_info_subscribe_tipc()

diff --git a/osaf/libs/core/include/mds_papi.h 
b/osaf/libs/core/include/mds_papi.h
--- a/osaf/libs/core/include/mds_papi.h
+++ b/osaf/libs/core/include/mds_papi.h
@@ -57,6 +57,8 @@ extern "C" {
     1) Basic data type
  \**********************************************************************/
+/* The NODE version of MDS */
+#define MDS_NODE_VERSION 1
  /* The version of MDS that this header ships with */
  #define MDS_MAJOR_VERSION 2
  #define MDS_MINOR_VERSION 1
@@ -208,7 +210,7 @@ extern "C" {
  #define NCSMDS_MAX_VDEST    32767
  #define NCSMDS_MAX_SVCS     1023
-#define MDS_DIRECT_BUF_MAXSIZE 8000
+#define MDS_DIRECT_BUF_MAXSIZE  (65535 - 56) /*(65535 maximum packet size)-(56 
MDS header)*/
        typedef uint8_t *MDS_DIRECT_BUFF;
  #define m_MDS_ALLOC_DIRECT_BUFF(size) mds_alloc_direct_buff(size)
  #define m_MDS_FREE_DIRECT_BUFF(x) mds_free_direct_buff(x)
diff --git a/osaf/libs/core/include/ncsusrbuf.h 
b/osaf/libs/core/include/ncsusrbuf.h
--- a/osaf/libs/core/include/ncsusrbuf.h
+++ b/osaf/libs/core/include/ncsusrbuf.h
@@ -47,8 +47,23 @@
  #ifdef  __cplusplus
  extern "C" {
  #endif
+       /* This PAYLOAD_BUF_SIZE value is suppose to be equal to 
MDS_DIRECT_BUF_MAXSIZE ,
+          but in the previous releases of Opensaf the value of TIPC  inbuf 
size of
+          MDTM_RECV_BUFFER_SIZE (mds_dt_tipc.c) TIPC was limited to(8000+MDS 
header ) ,
+          we have in-service Upgrade issue, so it is not possible to send the 
new
+          MDS_DIRECT_BUF_MAXSIZE (65535 maximum packet size)-(56 MDS header)
+          value previous Opensaf version nodes ,  so for the current release 
it is limited to 8000,
+          possibly adjust this in the future Opensaf releases to 
MDS_DIRECT_BUF_MAXSIZE.
-#define PAYLOAD_BUF_SIZE 1400 /* default size of packet_data bufrs */
+          IMP TCP Note : Their is NO issue with TCP in-service Upgrade  ,The 
value of
+          SO_RCVBUF & SO_SNDBUF of  TCP sockets was set to 64000 ( 
MDS_SND_RCV_SIZE)
+          using setsockopt()  ,the kernel doubles this value ,and this doubled 
value is returned  by
+          getsockopt().
+          Replace PAYLOAD_BUF_SIZE 8000  value with MDS_DIRECT_BUF_MAXSIZE 
(65535 maximum packet size)-(56 MDS header) ,
+          after one cycle of  in-service upgrade (below 4.4.FC Opensaf rpms ) 
#define PAYLOAD_BUF_SIZE  (65535 - 56)
+       */
+
+#define PAYLOAD_BUF_SIZE 8000
/***************************************************************************** diff --git a/osaf/libs/core/mds/include/mds_core.h b/osaf/libs/core/mds/include/mds_core.h
--- a/osaf/libs/core/mds/include/mds_core.h
+++ b/osaf/libs/core/mds/include/mds_core.h
@@ -240,6 +240,19 @@ typedef struct mds_vdest_info {
} MDS_VDEST_INFO; +typedef struct mds_node_info {
+
+       /* Indexing info */
+       NCS_PATRICIA_NODE node;
+
+       /* Node info */
+       NODE_ID node_id;  /* Serves as Node ID. Key for Patricia node */
+       uint16_t node_mds_ver; /* Node MDS version */
+       /* PWE and service list */
+       MDS_PWE_INFO *pwe_list;
+
+} MDS_NODE_INFO;
+
  typedef struct mds_svc_info {
/* Indexing info */
@@ -284,6 +297,7 @@ typedef struct mds_mcm_cb {
        NCS_PATRICIA_TREE subtn_results;
        NCS_PATRICIA_TREE svc_list;     /* Tree of MDS_SVC_INFO information */
        NCS_PATRICIA_TREE vdest_list;   /* Tree of MDS_VDEST_INFO information */
+       NCS_PATRICIA_TREE node_list;   /* Tree of MDS_NODE_INFO information */
  } MDS_MCM_CB;
/* Global MDSCB */
@@ -376,6 +390,11 @@ extern uint32_t mds_vdest_tbl_get_subtn_
  extern uint32_t mds_vdest_tbl_get_vdest_info_cb(MDS_VDEST_ID vdest_id, 
MDS_VDEST_INFO **vdest_info);
  extern uint32_t mds_vdest_tbl_cleanup(void);
+/* NODE TABLE Operations */
+extern uint32_t mds_node_tbl_add(NODE_ID node_id, uint16_t node_mds_ver);
+extern uint32_t mds_node_tbl_del(NODE_ID node_id);
+extern uint32_t mds_node_tbl_query(NODE_ID node_id);
+
  /* PWE TABLE Operations */
extern uint32_t mds_pwe_tbl_add(MDS_VDEST_HDL vdest_hdl, PW_ENV_ID pwe_id, MDS_PWE_HDL *pwe_hdl);
@@ -512,6 +531,12 @@ extern uint32_t mds_mcm_free_msg_uba_sta
  #define m_MMGR_FREE_VDEST_INFO(p)   m_NCS_MEM_FREE(p, 
NCS_MEM_REGION_TRANSIENT, \
                                      NCS_SERVICE_ID_MDS, MDS_MEM_VDEST_INFO)
+#define m_MMGR_ALLOC_NODE_INFO (MDS_NODE_INFO *)m_NCS_MEM_ALLOC(sizeof(MDS_NODE_INFO), \
+               NCS_MEM_REGION_TRANSIENT, NCS_SERVICE_ID_MDS, MDS_MEM_NODE_INFO)
+
+#define m_MMGR_FREE_NODE_INFO(p)   m_NCS_MEM_FREE(p, NCS_MEM_REGION_TRANSIENT, 
\
+               NCS_SERVICE_ID_MDS, MDS_MEM_NODE_INFO)
+
  #define m_MMGR_ALLOC_PWE_INFO     (MDS_PWE_INFO 
*)m_NCS_MEM_ALLOC(sizeof(MDS_PWE_INFO), \
                                      NCS_MEM_REGION_TRANSIENT, \
                                      NCS_SERVICE_ID_MDS, MDS_MEM_PWE_INFO)
diff --git a/osaf/libs/core/mds/include/mds_dt.h 
b/osaf/libs/core/mds/include/mds_dt.h
--- a/osaf/libs/core/mds/include/mds_dt.h
+++ b/osaf/libs/core/mds/include/mds_dt.h
@@ -109,10 +109,28 @@ typedef struct mdtm_reassembly_queue {
#define MDTM_MAX_DIRECT_BUFF_SIZE MDTM_MAX_SEGMENT_SIZE -#define MDTM_NORMAL_MSG_FRAG_SIZE 1400
+/* To support in-service Upgrade issue  MDTM_NORMAL_MSG_FRAG_SIZE_MIN
+   is provide, and this fragment size is used to send to previous version of 
Opensaf Node
+   while  in-service Upgrade.
-#define MDTM_RECV_BUFFER_SIZE ((MDS_DIRECT_BUF_MAXSIZE>MDTM_NORMAL_MSG_FRAG_SIZE)? \
-                      
(MDS_DIRECT_BUF_MAXSIZE+SUM_MDS_HDR_PLUS_MDTM_HDR_PLUS_LEN):(MDTM_NORMAL_MSG_FRAG_SIZE+SUM_MDS_HDR_PLUS_MDTM_HDR_PLUS_LEN))
+   In the previous releases of Opensaf the value of TIPC  inbuf size of
+   MDTM_RECV_BUFFER_SIZE (mds_dt_tipc.c) TIPC was limited to(8000+MDS header) ,
+   we have in-service Upgrade issue, so it is not possible to send the new
+   MDS_DIRECT_BUF_MAXSIZE (65535 maximum packet size)-(56 MDS header)
+   value previous Opensaf version nodes ,  so for the current release it is 
limited to 8000,
+   possibly adjust this in the future Opensaf releases to 
MDS_DIRECT_BUF_MAXSIZE.
+
+   IMP TCP Note : Their is NO issue with TCP in-service Upgrade  ,The value of
+   SO_RCVBUF & SO_SNDBUF of  TCP sockets was set to 64000 ( MDS_SND_RCV_SIZE)
+   using setsockopt()  ,the kernel doubles this value ,and this doubled value 
is returned  by
+   getsockopt(). So MDTM_NORMAL_MSG_FRAG_SIZE_MAX size is used to send for
+   for both  previous & current versitions of Opensaf nodes which are using 
MDS TCP as transport*/
+#define MDTM_NORMAL_MSG_FRAG_SIZE_MIN 8000
+
+#define MDTM_NORMAL_MSG_FRAG_SIZE_MAX MDS_DIRECT_BUF_MAXSIZE
+
+#define MDTM_RECV_BUFFER_SIZE 
((MDS_DIRECT_BUF_MAXSIZE>MDTM_NORMAL_MSG_FRAG_SIZE_MAX)? \
+               
(MDS_DIRECT_BUF_MAXSIZE+SUM_MDS_HDR_PLUS_MDTM_HDR_PLUS_LEN):(MDTM_NORMAL_MSG_FRAG_SIZE_MAX+SUM_MDS_HDR_PLUS_MDTM_HDR_PLUS_LEN))
/* Prefixes and defines regarding to the MDS_TIPC*/ @@ -124,6 +142,7 @@ typedef enum {
        MDS_PCON_INST_TYPE = 0x00030000,
        MDS_NODE_INST_TYPE = 0x00000000,
        MDS_PROCESS_INST_TYPE = 0x00050000,
+       MDS_NODE_INFO_TYPE = 0x00060000,
  } MDS_MDTM_INST_TYPES;
/* Common to TCP and TIPC */
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
@@ -223,6 +223,7 @@ typedef enum {
        MDS_MEM_HDL_LIST,
        MDS_MEM_CACHED_EVENTS_LIST,
        MDS_MEM_BCAST_BUFF_LIST,
+       MDS_MEM_NODE_INFO,
  } MDS_MEM_SUB_ID;
/* ******************************************** */
diff --git a/osaf/libs/core/mds/include/mds_dt_tipc.h 
b/osaf/libs/core/mds/include/mds_dt_tipc.h
--- a/osaf/libs/core/mds/include/mds_dt_tipc.h
+++ b/osaf/libs/core/mds/include/mds_dt_tipc.h
@@ -92,6 +92,8 @@ extern uint32_t mds_mdtm_vdest_subscribe
  extern uint32_t mds_mdtm_vdest_unsubscribe_tipc(MDS_VDEST_ID vdest_id, 
MDS_SUBTN_REF_VAL subtn_ref_val);
  extern uint32_t mds_mdtm_tx_hdl_register_tipc(MDS_DEST adest);
  extern uint32_t mds_mdtm_tx_hdl_unregister_tipc(MDS_DEST adest);
+extern uint32_t mds_mdtm_node_info_install_tipc();
+extern uint32_t mds_mdtm_node_info_subscribe_tipc(MDS_SUBTN_REF_VAL 
*subtn_ref_val);
extern uint32_t mds_mdtm_send_tipc(MDTM_SEND_REQ *req); diff --git a/osaf/libs/core/mds/mds_c_api.c b/osaf/libs/core/mds/mds_c_api.c
--- a/osaf/libs/core/mds/mds_c_api.c
+++ b/osaf/libs/core/mds/mds_c_api.c
@@ -3782,6 +3782,23 @@ uint32_t mds_mcm_init(void)
                return NCSCC_RC_FAILURE;
        }
+ /* NODE TREE */
+       memset(&pat_tree_params, 0, sizeof(NCS_PATRICIA_PARAMS));
+       pat_tree_params.key_size = sizeof(NODE_ID);
+       if (NCSCC_RC_SUCCESS != ncs_patricia_tree_init(&gl_mds_mcm_cb->node_list, 
&pat_tree_params)) {
+               m_MDS_LOG_ERR("MCM_API : patricia_tree_init: subscription: failure, 
L mds_mcm_init");
+               if (NCSCC_RC_SUCCESS != 
ncs_patricia_tree_destroy(&gl_mds_mcm_cb->svc_list)) {
+                       m_MDS_LOG_ERR("MCM_API : patricia_tree_destroy: service 
:failure, L mds_mcm_init");
+               }
+               if (NCSCC_RC_SUCCESS != 
ncs_patricia_tree_destroy(&gl_mds_mcm_cb->vdest_list)) {
+                       m_MDS_LOG_ERR("MCM_API : patricia_tree_destroy: vdest 
:failure, L mds_mcm_init");
+               }
+               if (NCSCC_RC_SUCCESS != 
ncs_patricia_tree_destroy(&gl_mds_mcm_cb->subtn_results)) {
+                       m_MDS_LOG_ERR("MCM_API : patricia_tree_destroy: 
subtn_results :failure, L mds_mcm_init");
+               }
+               return NCSCC_RC_FAILURE;
+       }
+
        /* Add VDEST for ADEST entry in tree */
        vdest_for_adest_node = m_MMGR_ALLOC_VDEST_INFO;
        memset(vdest_for_adest_node, 0, sizeof(MDS_VDEST_INFO));
@@ -3824,6 +3841,9 @@ uint32_t mds_mcm_destroy(void)
        /* VDEST TREE */
        ncs_patricia_tree_destroy(&gl_mds_mcm_cb->vdest_list);
+ /* NODE TREE */
+       ncs_patricia_tree_destroy(&gl_mds_mcm_cb->node_list);
+
        /* Free MCM control block */
        m_MMGR_FREE_MCM_CB(gl_mds_mcm_cb);
diff --git a/osaf/libs/core/mds/mds_c_db.c b/osaf/libs/core/mds/mds_c_db.c
--- a/osaf/libs/core/mds/mds_c_db.c
+++ b/osaf/libs/core/mds/mds_c_db.c
@@ -376,6 +376,89 @@ uint32_t mds_vdest_tbl_cleanup(void)
/* ******************************************** */
  /* ******************************************** */
+/*            NODE  TABLE Operations             */
+/* ******************************************** */
+/* ******************************************** */
+/*********************************************************
+  Function NAME: mds_node_tbl_add
+ *********************************************************/
+uint32_t mds_node_tbl_add(NODE_ID node_id, uint16_t node_mds_ver)
+{
+       MDS_NODE_INFO *node_info;
+
+       m_MDS_LOG_DBG("MCM_DB : Entering : mds_node_tbl_add");
+
+       /* Check if node is not already created */
+       if (ncs_patricia_tree_get(&gl_mds_mcm_cb->node_list, (uint8_t 
*)&node_id) != NULL) {
+               m_MDS_LOG_DBG("MCM_DB : Leaving : F : mds_node_tbl_add : VDEST 
already present");
+               return NCSCC_RC_FAILURE;
+       }
+
+
+       node_info = m_MMGR_ALLOC_NODE_INFO;
+       memset(node_info, 0, sizeof(MDS_NODE_INFO));
+
+       node_info->node_id = node_id;
+       node_info->node_mds_ver = node_mds_ver;
+
+
+       m_MDS_LOG_DBG("node_id=%d node_mds_ver=%d", node_info->node_id, 
node_info->node_mds_ver);
+       node_info->node.key_info = (uint8_t *)&node_info->node_id;
+
+       ncs_patricia_tree_add(&gl_mds_mcm_cb->node_list, (NCS_PATRICIA_NODE 
*)&node_info->node);
+
+       m_MDS_LOG_DBG("MCM_DB : Leaving : S : mds_node_tbl_added node_id : 
%d",node_id);
+       return NCSCC_RC_SUCCESS;
+}
+
+/*********************************************************
+  Function NAME: mds_node_tbl_del
+ *********************************************************/
+uint32_t mds_node_tbl_del(NODE_ID node_id)
+{
+       MDS_NODE_INFO *node_info = NULL;
+
+       m_MDS_LOG_DBG("MCM_DB : Entering : mds_node_tbl_del");
+
+       /* Check if node is already created */
+       node_info = (MDS_NODE_INFO 
*)ncs_patricia_tree_get(&gl_mds_mcm_cb->node_list, (uint8_t *)&node_id);
+       if (node_info == NULL) {
+               m_MDS_LOG_DBG("MCM_DB : Leaving : F : mds_node_tbl_del : NODE_ID not 
present");
+               return NCSCC_RC_FAILURE;
+       } else {
+
+               ncs_patricia_tree_del(&gl_mds_mcm_cb->node_list, 
(NCS_PATRICIA_NODE *)node_info);
+
+               /* Free memory of NODE_INFO */
+               m_MMGR_FREE_NODE_INFO(node_info);
+       }
+       m_MDS_LOG_DBG("MCM_DB : Leaving : S : mds_node_tbl_del");
+       return NCSCC_RC_SUCCESS;
+}
+
+/*********************************************************
+  Function NAME: mds_node_tbl_query
+ *********************************************************/
+uint32_t mds_node_tbl_query(NODE_ID node_id)
+{
+       MDS_NODE_INFO *node_info = NULL;
+
+       m_MDS_LOG_DBG("MCM_DB : Entering : mds_node_tbl_query");
+
+       /* Check if node is already created */
+       node_info = (MDS_NODE_INFO 
*)ncs_patricia_tree_get(&gl_mds_mcm_cb->node_list, (uint8_t *)&node_id);
+       if (node_info == NULL) {
+               m_MDS_LOG_DBG("MCM_DB : Leaving : F : mds_node_tbl_query : NODE_ID 
not present");
+               return NCSCC_RC_FAILURE;
+       } else {
+               m_MDS_LOG_DBG("MCM_DB : Leaving : S : mds_node_tbl_query");
+               return NCSCC_RC_SUCCESS;
+       }
+
+}
+
+/* ******************************************** */
+/* ******************************************** */
  /*            PWE  TABLE Operations             */
  /* ******************************************** */
  /* ******************************************** */
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
@@ -34,7 +34,7 @@
         2. Direct send in which the user provides MDS with a flat buffer 
pointer and length
             of the buffer. Memory will be allocated to the flat buffer by 
using the MDS api
             m_MDS_ALLOC_DIRECT_BUFF(size) (where size is the number of bytes 
of memory to be
-           allocated and is limited to 8000 bytes). As buffer pointer is 
allocated by MDS, in all the
+           allocated and is limited to MDS_DIRECT_BUF_MAXSIZE bytes). As 
buffer pointer is allocated by MDS, in all the
             cases of success and failure of DIRECT sends, memory will be freed 
by the MDS and application
             should not free the memory.
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
@@ -85,6 +85,8 @@ uint32_t mds_mdtm_vdest_install_tipc(MDS
  uint32_t mds_mdtm_vdest_uninstall_tipc(MDS_VDEST_ID vdest_id);
  uint32_t mds_mdtm_vdest_subscribe_tipc(MDS_VDEST_ID vdest_id, 
MDS_SUBTN_REF_VAL *subtn_ref_val);
  uint32_t mds_mdtm_vdest_unsubscribe_tipc(MDS_VDEST_ID vdest_id, 
MDS_SUBTN_REF_VAL subtn_ref_val);
+uint32_t mds_mdtm_node_info_install_tipc();
+uint32_t mds_mdtm_node_info_subscribe_tipc(MDS_SUBTN_REF_VAL *subtn_ref_val);
  uint32_t mds_mdtm_tx_hdl_register_tipc(MDS_DEST adest);
  uint32_t mds_mdtm_tx_hdl_unregister_tipc(MDS_DEST adest);
@@ -128,6 +130,10 @@ static MDS_SUBTN_REF_VAL handle;
  static uint16_t num_subscriptions;
uint32_t mdtm_global_frag_num;
+#define MDTM_MAX_SEND_PKT_SIZE  
(MDTM_NORMAL_MSG_FRAG_SIZE_MAX+SUM_MDS_HDR_PLUS_MDTM_HDR_PLUS_LEN) /* Includes 
the 30 header bytes(2+8+20) */
+static uint32_t msg_frag_size = MDTM_NORMAL_MSG_FRAG_SIZE_MAX;
+static uint32_t max_send_pkt_size = MDTM_MAX_SEND_PKT_SIZE;
+
  /*********************************************************
Function NAME: mdtm_tipc_init
@@ -158,6 +164,7 @@ uint32_t mdtm_tipc_init(NODE_ID nodeid,
        num_subscriptions = 0;
        handle = 0;
        mdtm_global_frag_num = 0;
+       MDS_SUBTN_REF_VAL subtn_ref_ptr;
/* REASSEMBLY TREE */
        memset(&pat_tree_params, 0, sizeof(pat_tree_params));
@@ -307,6 +314,21 @@ uint32_t mdtm_tipc_init(NODE_ID nodeid,
          } else {
                  m_MDS_LOG_INFO("MDTM: Successfully set default socket option 
TIPC_IMP = %d", TIPCIMPORTANCE);
          }
+       /* To handle in-service Upgrade of  fragmentation changes  , 
theMDTM_NORMAL_MSG_FRAG_SIZE_MIN
+          fragment size is used to send to previous version of Opensaf Node 
while  in-service Upgrade ,
+          so the only new node do install & subscribe its Node Mds version
+          ( old nodes will not publishes so we need to fragment to  
MDTM_NORMAL_MSG_FRAG_SIZE_MIN size.
+
+          In the previous releases of Opensaf the value of TIPC  inbuf size of
+          MDTM_RECV_BUFFER_SIZE (mds_dt_tipc.c) TIPC was limited to(8000+MDS 
header)  */
+       if (mds_mdtm_node_info_install_tipc() != NCSCC_RC_SUCCESS) {
+               LOG_ER("MDTM: Can't mds_mdtm_node_info_install_tipc  TIPC_IMP err 
\n");
+               osafassert(0);
+       }
+       if (mds_mdtm_node_info_subscribe_tipc(&subtn_ref_ptr) != 
NCSCC_RC_SUCCESS) {
+               LOG_ER("MDTM: Can't mds_mdtm_node_info_subscribe_tipc  TIPC_IMP err 
\n");
+               osafassert(0);
+       }
return NCSCC_RC_SUCCESS;
  }
@@ -1016,11 +1038,43 @@ static uint32_t mdtm_process_discovery_e
}
                break;
-
-       default:
+       case MDS_NODE_INFO_TYPE:
+               {
+                       /* To handle in-service Upgrade of  fragmentation 
changes ,
+                          theMDTM_NORMAL_MSG_FRAG_SIZE_MIN   fragment size is 
used to send
+                          to previous version of Opensaf Node while  
in-service Upgrade ,
+                          so the only new node publishes its Node Mds version
+                          ( old nodes will not publishes so we need to 
fragment to
+                          MDTM_NORMAL_MSG_FRAG_SIZE_MIN size.
+
+                          In the previous releases of Opensaf the value of 
TIPC  inbuf size of
+                          MDTM_RECV_BUFFER_SIZE (mds_dt_tipc.c) TIPC was 
limited to(8000+MDS header)  */
+       
+                       uint32_t node_status = 0;
+                       NODE_ID node_id = 0;
+                       uint32_t node_ver = 0;
+
+                       node_ver  = (uint32_t)lower;
+
+                       m_MDS_LOG_INFO("MDTM: Received NODE event");
+
+                       node_status = m_MDS_CHECK_TIPC_NODE_ID_RANGE(node);
+
+                       if (NCSCC_RC_SUCCESS == node_status) {
+                               node_id = 
((NODE_ID)(m_MDS_GET_NCS_NODE_ID_FROM_TIPC_NODE_ID(node)));
+
+                       } else {
+                               LOG_ER("MDTM: Dropping  the node event,as the TIPC 
NODE_ID is not in the prescribed range=0x%08x,  Event type=%d",
+                                               node, discovery_event);
+                               return NCSCC_RC_FAILURE;
+                       }
+                       mds_node_tbl_add(node_id,node_ver);
+               }
+               break;
+        default:
                {
                        m_MDS_LOG_ERR
-                           ("MDTM: TIPC EVENT UNSUPPORTED (default). If this case 
comes this should assert as there no other events being processed");
+                               ("MDTM: TIPC EVENT UNSUPPORTED (default). If this 
case comes this should assert as there no other events being processed");
                        return NCSCC_RC_FAILURE;
                }
                break;
@@ -1530,6 +1584,107 @@ uint32_t mds_mdtm_svc_subscribe_tipc(PW_
  }
/*********************************************************
+  Function NAME: mds_mdtm_node_info_install_tipc
+
+  DESCRIPTION:
+
+  ARGUMENTS:
+
+  RETURNS:  1 - NCSCC_RC_SUCCESS
+            2 - NCSCC_RC_FAILURE
+
+*********************************************************/
+uint32_t mds_mdtm_node_info_install_tipc()
+{
+       /*
+          STEP 1: Bind to socket BSRSock with Tipc name sequence
+          TIPC Name:
+          <MDS-prefix, MDS_NODE_INFO_TYPE, 0>
+          TIPC Range:
+          <0,ROLE=0,POLICY=0,NODE_VERSION > to
+          <0,ROLE=0,POLICY=0,NODE_VERSION >
+        */
+       struct sockaddr_tipc server_addr;
+       uint32_t server_type = 0, server_inst = 0;
+
+       memset(&server_addr, 0, sizeof(server_addr));
+       server_addr.family = AF_TIPC;
+
+       server_addr.addrtype = TIPC_ADDR_NAMESEQ;
+
+       server_type = server_type | MDS_TIPC_PREFIX | MDS_NODE_INFO_TYPE;
+       server_inst |= MDS_NODE_VERSION;
+
+       server_addr.addr.nameseq.type = server_type;
+       server_addr.addr.nameseq.lower = server_inst;
+       server_addr.addr.nameseq.upper = server_inst;
+       server_addr.scope = TIPC_CLUSTER_SCOPE;
+
+       if (0 != bind(tipc_cb.BSRsock, (struct sockaddr *)&server_addr, 
sizeof(server_addr))) {
+               m_MDS_LOG_ERR("MDTM: MDS-NODE-INFO-INSTALL Failure err :%s\n", 
strerror(errno));
+               return NCSCC_RC_FAILURE;
+       }
+       return NCSCC_RC_SUCCESS;
+}
+
+/*********************************************************
+
+  Function NAME: mds_mdtm_node_info_subscribe_tipc
+
+  DESCRIPTION:
+
+  ARGUMENTS:
+
+  RETURNS:  1 - NCSCC_RC_SUCCESS
+            2 - NCSCC_RC_FAILURE
+
+*********************************************************/
+uint32_t mds_mdtm_node_info_subscribe_tipc(MDS_SUBTN_REF_VAL *subtn_ref_val)
+{
+       /*
+          STEP 1: Subscribe to socket DSock with Tipc name sequence
+          TIPC Name:
+          <MDS-prefix, VDEST_INST_TYPE, 0>
+          TIPC Range:
+          <0,ROLE=0,POLICY=0,VDEST_ID > to
+          <0,ROLE=0,POLICY=0,VDEST_ID >
+        */
+
+       uint32_t inst = 0, server_type = 0;
+       struct tipc_subscr subscr;
+
+       if (num_subscriptions > MAX_SUBSCRIPTIONS) {
+               m_MDS_LOG_ERR("MDTM: SYSTEM CRITICAL Crossing =%d 
subscriptions\n", num_subscriptions);
+               if (num_subscriptions > MAX_SUBSCRIPTIONS_RETURN_ERROR) {
+                       m_MDS_LOG_ERR
+                               ("MDTM: SYSTEM has crossed the max =%d subscriptions 
, Returning failure to the user",
+                                MAX_SUBSCRIPTIONS_RETURN_ERROR);
+                       return NCSCC_RC_FAILURE;
+               }
+       }
+
+       server_type = server_type | MDS_TIPC_PREFIX | MDS_NODE_INFO_TYPE;
+       inst |= MDS_NODE_VERSION;
+       memset(&subscr, 0, sizeof(subscr));
+       subscr.seq.type = HTONL(server_type);
+       subscr.seq.lower = HTONL(inst);
+       subscr.seq.upper = HTONL(inst);
+       subscr.timeout = HTONL(FOREVER);
+       subscr.filter = HTONL(TIPC_SUB_PORTS);
+       *subtn_ref_val = 0;
+       *subtn_ref_val = ++handle;
+       *((uint64_t *)subscr.usr_handle) = *subtn_ref_val;
+
+       if (send(tipc_cb.Dsock, &subscr, sizeof(subscr), 0) != sizeof(subscr)) {
+               m_MDS_LOG_ERR("MDTM: MDS-NODE-INFO-SUBSCRIBE Failure\n");
+               return NCSCC_RC_FAILURE;
+       }
+       ++num_subscriptions;
+
+       return NCSCC_RC_SUCCESS;
+}
+
+/*********************************************************
Function NAME: mds_mdtm_node_subscribe_tipc @@ -2034,12 +2189,32 @@ uint32_t mds_mdtm_send_tipc(MDTM_SEND_RE
                        {
                                uint32_t len = 0;
                                len = m_MMGR_LINK_DATA_LEN(usrbuf);     /* 
Getting total len */
-
-                               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);
-
-                               if (len > MDTM_NORMAL_MSG_FRAG_SIZE) {
-                                       /* Packet needs to be fragmented and 
send */
+                               /* To support in-service Upgrade issue  
MDTM_NORMAL_MSG_FRAG_SIZE_MIN
+                                  is provide, and this fragment size is used 
to send to previous version of Opensaf Node
+                                  while  in-service Upgrade.
+
+                                  In the previous releases of Opensaf the 
value of TIPC  inbuf size of
+                                  MDTM_RECV_BUFFER_SIZE (mds_dt_tipc.c) TIPC 
was limited to(8000+MDS header) ,
+                                  we have in-service Upgrade issue, so it is 
not possible to send the new
+                                  MDS_DIRECT_BUF_MAXSIZE (65535 maximum packet 
size)-(56 MDS header)
+                                  value previous Opensaf version nodes ,  so 
for the current release it is limited to 8000,
+                                  possibly adjust this in the future Opensaf 
releases to MDS_DIRECT_BUF_MAXSIZE.
+
+                                  IMP TCP Note : Their is NO issue with TCP 
in-service Upgrade  ,The value of
+                                  SO_RCVBUF & SO_SNDBUF of  TCP sockets was 
set to 64000 ( MDS_SND_RCV_SIZE)
+                                  using setsockopt()  ,the kernel doubles this 
value ,and this doubled value is returned  by
+                                  getsockopt(). So 
MDTM_NORMAL_MSG_FRAG_SIZE_MAX size is used to send for
+                                  for both  previous & current versitions of 
Opensaf nodes which are using MDS TCP as transport*/
+                               if (len > MDTM_NORMAL_MSG_FRAG_SIZE_MIN) {
+                                       if 
(mds_node_tbl_query(m_MDS_GET_NODE_ID_FROM_ADEST(req->adest)) != 
NCSCC_RC_SUCCESS) {
+                                               msg_frag_size = 
MDTM_NORMAL_MSG_FRAG_SIZE_MIN;
+                                               max_send_pkt_size = 
(MDTM_NORMAL_MSG_FRAG_SIZE_MIN+SUM_MDS_HDR_PLUS_MDTM_HDR_PLUS_LEN);
+                                               m_MDS_LOG_DBG("MDTM:Sending  message 
TO node_id=%d with msg_frag_size = %d max_send_pkt_size = %d",
+                                                               
m_MDS_GET_NODE_ID_FROM_ADEST(req->adest), msg_frag_size, max_send_pkt_size);
+                                       }
+                               }
+                                       
+                               if (len > msg_frag_size) {
                                        status = mdtm_frag_and_send(req, 
frag_seq_num, tipc_id);
                                        return status;
@@ -2155,7 +2330,6 @@ uint32_t mds_mdtm_send_tipc(MDTM_SEND_RE
              2 - NCSCC_RC_FAILURE
*********************************************************/
-#define MDTM_MAX_SEND_PKT_SIZE   
(MDTM_NORMAL_MSG_FRAG_SIZE+SUM_MDS_HDR_PLUS_MDTM_HDR_PLUS_LEN)        /* 
Includes the 30 header bytes(2+8+20) */
#ifdef MDS_CHECKSUM_ENABLE_FLAG
  #define MDTM_FRAG_HDR_PLUS_LEN_2   13
@@ -2187,22 +2361,22 @@ uint32_t mdtm_frag_and_send(MDTM_SEND_RE
len = m_MMGR_LINK_DATA_LEN(usrbuf); /* Getting total len */ - if (len > (32767 * MDTM_NORMAL_MSG_FRAG_SIZE)) { /* We have 15 bits for frag number so 2( pow 15) -1=32767 */
+       if (len > (32767 * MDTM_NORMAL_MSG_FRAG_SIZE_MAX)) { /* We have 15 bits 
for frag number so 2( pow 15) -1=32767 */
                m_MDS_LOG_CRITICAL
                    ("MDTM: App. is trying to send data more than MDTM Can fragment 
and send, Max size is =%d\n",
-                    32767 * MDTM_NORMAL_MSG_FRAG_SIZE);
+                    32767 * MDTM_NORMAL_MSG_FRAG_SIZE_MAX);
                m_MMGR_FREE_BUFR_LIST(usrbuf);
                return NCSCC_RC_FAILURE;
        }
while (len != 0) {
-               if (len > MDTM_NORMAL_MSG_FRAG_SIZE) {
+               if (len > msg_frag_size) {
                        if (i == 1) {
-                               len_buf = MDTM_MAX_SEND_PKT_SIZE;
+                               len_buf = max_send_pkt_size;
                                frag_val = MORE_FRAG_BIT | i;
                        } else {
-                               if ((len + MDTM_FRAG_HDR_PLUS_LEN_2) > 
MDTM_MAX_SEND_PKT_SIZE) {
-                                       len_buf = MDTM_MAX_SEND_PKT_SIZE;
+                               if ((len + MDTM_FRAG_HDR_PLUS_LEN_2) > 
max_send_pkt_size) {
+                                       len_buf = max_send_pkt_size;
                                        frag_val = MORE_FRAG_BIT | i;
                                } else {
                                        len_buf = len + 
MDTM_FRAG_HDR_PLUS_LEN_2;
diff --git a/osaf/libs/core/mds/mds_dt_trans.c 
b/osaf/libs/core/mds/mds_dt_trans.c
--- a/osaf/libs/core/mds/mds_dt_trans.c
+++ b/osaf/libs/core/mds/mds_dt_trans.c
@@ -41,7 +41,7 @@
#define SUM_MDS_HDR_PLUS_MDTM_HDR_PLUS_LEN_TCP ((2 + MDS_SEND_ADDRINFO_TCP + MDTM_FRAG_HDR_LEN_TCP + MDS_HDR_LEN_TCP)) -#define MDTM_MAX_SEND_PKT_SIZE_TCP (MDTM_NORMAL_MSG_FRAG_SIZE+SUM_MDS_HDR_PLUS_MDTM_HDR_PLUS_LEN_TCP) /* Includes the 30 header bytes(2+8+20) */
+#define MDTM_MAX_SEND_PKT_SIZE_TCP   
(MDTM_NORMAL_MSG_FRAG_SIZE_MAX+SUM_MDS_HDR_PLUS_MDTM_HDR_PLUS_LEN_TCP)    /* 
Includes the 30 header bytes(2+8+20) */
uint32_t mdtm_global_frag_num_tcp;
  extern struct pollfd pfd[2];
@@ -363,16 +363,16 @@ static uint32_t mdtm_frag_and_send_tcp(M
len = m_MMGR_LINK_DATA_LEN(usrbuf); /* Getting total len */ - if (len > (32767 * MDTM_NORMAL_MSG_FRAG_SIZE)) { /* We have 15 bits for frag number so 2( pow 15) -1=32767 */
+       if (len > (32767 * MDTM_NORMAL_MSG_FRAG_SIZE_MAX)) { /* We have 15 bits 
for frag number so 2( pow 15) -1=32767 */
                m_MDS_LOG_CRITICAL
                    ("MDTM: App. is trying to send data more than MDTM Can fragment 
and send, Max size is =%d\n",
-                    32767 * MDTM_NORMAL_MSG_FRAG_SIZE);
+                    32767 * MDTM_NORMAL_MSG_FRAG_SIZE_MAX);
                m_MMGR_FREE_BUFR_LIST(usrbuf);
                return NCSCC_RC_FAILURE;
        }
while (len != 0) {
-               if (len > MDTM_NORMAL_MSG_FRAG_SIZE) {
+               if (len > MDTM_NORMAL_MSG_FRAG_SIZE_MAX) {
                        if (i == 1) {
                                len_buf = MDTM_MAX_SEND_PKT_SIZE_TCP;
                                frag_val = MORE_FRAG_BIT | i;
@@ -551,8 +551,12 @@ uint32_t mds_mdtm_send_tcp(MDTM_SEND_REQ
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);
-
-                               if (len > MDTM_NORMAL_MSG_FRAG_SIZE) {
+                               /*Their is NO implication on TCP in-service 
Upgrade  because of
+                                 MDTM_NORMAL_MSG_FRAG_SIZE_MAX (65535 maximum 
packet size)-(56 MDS header)  change ,
+                                 The value of SO_RCVBUF & SO_SNDBUF of  TCP 
sockets was set to 64000 ( MDS_SND_RCV_SIZE)
+                                 using setsockopt()  ,the kernel doubles this 
value ,and this doubled value is returned  by
+                                 getsockopt().*/
+                               if (len > MDTM_NORMAL_MSG_FRAG_SIZE_MAX) {
                                        /* Packet needs to be fragmented and 
send */
                                        status = mdtm_frag_and_send_tcp(req, 
frag_seq_num, id);
                                        return status;
@@ -678,7 +682,7 @@ void mdtm_process_poll_recv_data_tcp(voi
                        /* Receive all incoming data on this socket */
                        
/*******************************************************/
- recd_bytes = recv(tcp_cb->DBSRsock, tcp_cb->len_buff, 2, 0);
+                       recd_bytes = recv(tcp_cb->DBSRsock, tcp_cb->len_buff, 
2, MSG_NOSIGNAL);
                        if (0 == recd_bytes) {
                                LOG_ER("MDTM:socket_recv() = %d, conn lost with dh 
server, exiting library err :%s", recd_bytes, strerror(errno));
                                close(tcp_cb->DBSRsock);

------------------------------------------------------------------------------
WatchGuard Dimension instantly turns raw network data into actionable
security intelligence. It gives you real-time visual feedback on key
security issues and trends.  Skip the complicated setup - simply import
a virtual appliance and go from zero to informed in seconds.
http://pubads.g.doubleclick.net/gampad/clk?id=123612991&iu=/4140/ostg.clktrk
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

SUSE Linux Enterprise Server 11 SP2  (x86_64) 


 # cat /proc/meminfo 
MemTotal:        7945404 kB
MemFree:         7514828 kB
Buffers:           18648 kB
Cached:           228188 kB
SwapCached:            0 kB
Active:           132492 kB
Inactive:         136836 kB
Active(anon):      22628 kB
Inactive(anon):     3508 kB
Active(file):     109864 kB
Inactive(file):   133328 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:      16779260 kB
SwapFree:       16779260 kB
Dirty:                16 kB
Writeback:             0 kB
AnonPages:         22500 kB
Mapped:            11076 kB
Shmem:              3636 kB
Slab:              42452 kB
SReclaimable:      16812 kB
SUnreclaim:        25640 kB
KernelStack:        1440 kB
PageTables:         3160 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:    20751960 kB
Committed_AS:      83152 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      375772 kB
VmallocChunk:   34359353328 kB
HardwareCorrupted:     0 kB
AnonHugePages:      2048 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       63496 kB
DirectMap2M:     8214528 kB


# cat /proc/cpuinfo 
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 58
model name      : Intel(R) Core(TM) i5-3570 CPU @ 3.40GHz
stepping        : 9
cpu MHz         : 1600.000
cache size      : 6144 KB
physical id     : 0
siblings        : 4
core id         : 0
cpu cores       : 4
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov 
pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm 
constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc 
aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr 
pdcm sse4_1 sse4_2 x2apic popcnt aes xsave avx f16c rdrand lahf_lm ida arat epb 
xsaveopt pln pts dts tpr_shadow vnmi flexpriority ept vpid fsgsbase smep erms
bogomips        : 6784.66
clflush size    : 64
cache_alignment : 64
address sizes   : 36 bits physical, 48 bits virtual
power management:
 
processor       : 1
vendor_id       : GenuineIntel
cpu family      : 6
model           : 58
model name      : Intel(R) Core(TM) i5-3570 CPU @ 3.40GHz
stepping        : 9
cpu MHz         : 1600.000
cache size      : 6144 KB
physical id     : 0
siblings        : 4
core id         : 1
cpu cores       : 4
apicid          : 2
initial apicid  : 2
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov 
pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm 
constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc 
aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr 
pdcm sse4_1 sse4_2 x2apic popcnt aes xsave avx f16c rdrand lahf_lm ida arat epb 
xsaveopt pln pts dts tpr_shadow vnmi flexpriority ept vpid fsgsbase smep erms
bogomips        : 6784.66
clflush size    : 64
cache_alignment : 64
address sizes   : 36 bits physical, 48 bits virtual
power management:
 
processor       : 2
vendor_id       : GenuineIntel
cpu family      : 6
model           : 58
model name      : Intel(R) Core(TM) i5-3570 CPU @ 3.40GHz
stepping        : 9
cpu MHz         : 1600.000
cache size      : 6144 KB
physical id     : 0
siblings        : 4
core id         : 2
cpu cores       : 4
apicid          : 4
initial apicid  : 4
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov 
pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm 
constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc 
aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr 
pdcm sse4_1 sse4_2 x2apic popcnt aes xsave avx f16c rdrand lahf_lm ida arat epb 
xsaveopt pln pts dts tpr_shadow vnmi flexpriority ept vpid fsgsbase smep erms
bogomips        : 6784.66
clflush size    : 64
cache_alignment : 64
address sizes   : 36 bits physical, 48 bits virtual
power management:
 
processor       : 3
vendor_id       : GenuineIntel
cpu family      : 6
model           : 58
model name      : Intel(R) Core(TM) i5-3570 CPU @ 3.40GHz
stepping        : 9
cpu MHz         : 1600.000
cache size      : 6144 KB
physical id     : 0
siblings        : 4
core id         : 3
cpu cores       : 4
apicid          : 6
initial apicid  : 6
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov 
pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm 
constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc 
aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr 
pdcm sse4_1 sse4_2 x2apic popcnt aes xsave avx f16c rdrand lahf_lm ida arat epb 
xsaveopt pln pts dts tpr_shadow vnmi flexpriority ept vpid fsgsbase smep erms
bogomips        : 6784.66
clflush size    : 64
cache_alignment : 64
address sizes   : 36 bits physical, 48 bits virtual
power management:
 
------------------------------------------------------------------------------
Managing the Performance of Cloud-Based Applications
Take advantage of what the Cloud has to offer - Avoid Common Pitfalls.
Read the Whitepaper.
http://pubads.g.doubleclick.net/gampad/clk?id=121051231&iu=/4140/ostg.clktrk
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to