2015-02-19 13:41:41 -07:00
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
2007-07-20 21:36:11 +00:00
/*
2007-07-25 22:28:04 +00:00
* Copyright ( c ) 2004 - 2007 The Trustees of the University of Tennessee .
2007-07-20 21:36:11 +00:00
* All rights reserved .
2015-02-19 13:41:41 -07:00
* Copyright ( c ) 2015 Los Alamos National Security , LLC . All rights
* reserved .
2007-07-20 21:36:11 +00:00
* $ COPYRIGHT $
*
* Additional copyrights may follow
*
* $ HEADER $
*/
# include "ompi_config.h"
2015-03-05 20:50:44 -07:00
# include "ompi/mca/mca.h"
2007-07-20 21:36:11 +00:00
# include "vprotocol_pessimist.h"
2013-03-27 21:09:41 +00:00
static int mca_vprotocol_pessimist_component_register ( void ) ;
2007-07-20 21:36:11 +00:00
static int mca_vprotocol_pessimist_component_open ( void ) ;
static int mca_vprotocol_pessimist_component_close ( void ) ;
2007-08-16 05:52:30 +00:00
static mca_vprotocol_base_module_t * mca_vprotocol_pessimist_component_init ( int * priority , bool , bool ) ;
2007-07-20 21:36:11 +00:00
static int mca_vprotocol_pessimist_component_finalize ( void ) ;
static int _priority ;
static int _free_list_num ;
static int _free_list_max ;
static int _free_list_inc ;
static int _sender_based_size ;
static int _event_buffer_size ;
static char * _mmap_file_name ;
2015-06-23 20:59:57 -07:00
mca_vprotocol_base_component_2_0_0_t mca_vprotocol_pessimist_component =
2007-07-20 21:36:11 +00:00
{
2007-07-31 17:12:21 +00:00
/* First, the mca_base_component_t struct containing meta
* information about the component itself */
2015-04-18 09:36:05 -06:00
. pmlm_version = {
MCA_VPROTOCOL_BASE_VERSION_2_0_0 ,
2008-07-28 22:40:57 +00:00
2015-04-18 09:36:05 -06:00
. mca_component_name = " pessimist " ,
. mca_component_major_version = OMPI_MAJOR_VERSION ,
. mca_component_minor_version = OMPI_MINOR_VERSION ,
. mca_component_release_version = OMPI_RELEASE_VERSION ,
. mca_open_component = mca_vprotocol_pessimist_component_open ,
. mca_close_component = mca_vprotocol_pessimist_component_close ,
. mca_register_component_params = mca_vprotocol_pessimist_component_register ,
2007-07-31 17:12:21 +00:00
} ,
2015-04-18 09:36:05 -06:00
. pmlm_data = {
2008-07-28 22:40:57 +00:00
/* component is not checkpointable */
MCA_BASE_METADATA_PARAM_NONE
2007-07-31 17:12:21 +00:00
} ,
2015-04-18 09:36:05 -06:00
. pmlm_init = mca_vprotocol_pessimist_component_init ,
. pmlm_finalize = mca_vprotocol_pessimist_component_finalize ,
2007-07-20 21:36:11 +00:00
} ;
/** MCA level functions
*/
2013-03-27 21:09:41 +00:00
static int mca_vprotocol_pessimist_component_register ( void )
{
_priority = 30 ;
( void ) mca_base_component_var_register ( & mca_vprotocol_pessimist_component . pmlm_version ,
" priority " , NULL , MCA_BASE_VAR_TYPE_INT , NULL , 0 , 0 ,
OPAL_INFO_LVL_9 ,
MCA_BASE_VAR_SCOPE_READONLY , & _priority ) ; \
_free_list_num = 16 ;
( void ) mca_base_component_var_register ( & mca_vprotocol_pessimist_component . pmlm_version ,
" free_list_num " , NULL , MCA_BASE_VAR_TYPE_INT , NULL , 0 , 0 ,
OPAL_INFO_LVL_9 ,
MCA_BASE_VAR_SCOPE_READONLY , & _free_list_num ) ;
_free_list_max = - 1 ;
( void ) mca_base_component_var_register ( & mca_vprotocol_pessimist_component . pmlm_version ,
" free_list_max " , NULL , MCA_BASE_VAR_TYPE_INT , NULL , 0 , 0 ,
OPAL_INFO_LVL_9 ,
MCA_BASE_VAR_SCOPE_READONLY , & _free_list_max ) ;
_free_list_inc = 64 ;
( void ) mca_base_component_var_register ( & mca_vprotocol_pessimist_component . pmlm_version ,
" free_list_inc " , NULL , MCA_BASE_VAR_TYPE_INT , NULL , 0 , 0 ,
OPAL_INFO_LVL_9 ,
MCA_BASE_VAR_SCOPE_READONLY , & _free_list_inc ) ;
_sender_based_size = 256 * 1024 * 1024 ;
( void ) mca_base_component_var_register ( & mca_vprotocol_pessimist_component . pmlm_version ,
" sender_based_chunk " , NULL , MCA_BASE_VAR_TYPE_INT , NULL , 0 , 0 ,
OPAL_INFO_LVL_9 ,
MCA_BASE_VAR_SCOPE_READONLY , & _sender_based_size ) ;
_event_buffer_size = 1024 ;
( void ) mca_base_component_var_register ( & mca_vprotocol_pessimist_component . pmlm_version ,
" event_buffer_size " , NULL , MCA_BASE_VAR_TYPE_INT , NULL , 0 , 0 ,
OPAL_INFO_LVL_9 ,
MCA_BASE_VAR_SCOPE_READONLY , & _event_buffer_size ) ;
_mmap_file_name = " vprotocol_pessimist-senderbased " ;
( void ) mca_base_component_var_register ( & mca_vprotocol_pessimist_component . pmlm_version ,
" sender_based_file " , NULL , MCA_BASE_VAR_TYPE_STRING , NULL , 0 , 0 ,
OPAL_INFO_LVL_9 ,
MCA_BASE_VAR_SCOPE_READONLY , & _mmap_file_name ) ;
return OMPI_SUCCESS ;
}
2007-07-20 21:36:11 +00:00
static int mca_vprotocol_pessimist_component_open ( void )
{
2007-08-16 05:52:30 +00:00
V_OUTPUT_VERBOSE ( 500 , " vprotocol_pessimist: component_open: read priority %d " , _priority ) ;
2007-07-20 21:36:11 +00:00
return OMPI_SUCCESS ;
}
static int mca_vprotocol_pessimist_component_close ( void )
{
2007-08-16 05:52:30 +00:00
V_OUTPUT_VERBOSE ( 500 , " vprotocol_pessimist: component_close " ) ;
2007-07-31 17:12:21 +00:00
return OMPI_SUCCESS ;
2007-07-20 21:36:11 +00:00
}
/** VPROTOCOL level functions (same as PML one)
*/
2007-08-16 05:52:30 +00:00
static mca_vprotocol_base_module_t * mca_vprotocol_pessimist_component_init ( int * priority ,
2007-07-20 21:36:11 +00:00
bool enable_progress_threads ,
bool enable_mpi_threads )
2015-06-23 20:59:57 -07:00
{
2007-07-31 17:12:21 +00:00
V_OUTPUT_VERBOSE ( 500 , " vprotocol_pessimist: component_init " ) ;
* priority = _priority ;
/* sanity check */
if ( enable_mpi_threads )
{
2008-06-09 14:53:58 +00:00
opal_output ( 0 , " vprotocol_pessimist: component_init: threads are enabled, and not supported by vprotocol pessimist fault tolerant layer, will not load " ) ;
2007-07-31 17:12:21 +00:00
return NULL ;
}
mca_vprotocol_pessimist . clock = 1 ;
mca_vprotocol_pessimist . replay = false ;
OBJ_CONSTRUCT ( & mca_vprotocol_pessimist . replay_events , opal_list_t ) ;
OBJ_CONSTRUCT ( & mca_vprotocol_pessimist . pending_events , opal_list_t ) ;
2015-02-19 13:41:41 -07:00
OBJ_CONSTRUCT ( & mca_vprotocol_pessimist . events_pool , opal_free_list_t ) ;
opal_free_list_init ( & mca_vprotocol_pessimist . events_pool ,
sizeof ( mca_vprotocol_pessimist_event_t ) ,
opal_cache_line_size ,
OBJ_CLASS ( mca_vprotocol_pessimist_event_t ) ,
0 , opal_cache_line_size ,
_free_list_num ,
_free_list_max ,
_free_list_inc ,
NULL , 0 , NULL , NULL , NULL ) ;
2015-06-23 20:59:57 -07:00
mca_vprotocol_pessimist . event_buffer_max_length =
2007-07-31 17:12:21 +00:00
_event_buffer_size / sizeof ( vprotocol_pessimist_mem_event_t ) ;
mca_vprotocol_pessimist . event_buffer_length = 0 ;
2015-06-23 20:59:57 -07:00
mca_vprotocol_pessimist . event_buffer =
2007-07-31 17:12:21 +00:00
( vprotocol_pessimist_mem_event_t * ) malloc ( _event_buffer_size ) ;
2008-10-01 18:42:43 +00:00
mca_vprotocol_pessimist . el_comm = MPI_COMM_NULL ;
2015-06-23 20:59:57 -07:00
2007-07-31 17:12:21 +00:00
return & mca_vprotocol_pessimist . super ;
2007-07-20 21:36:11 +00:00
}
2015-06-23 20:59:57 -07:00
2007-07-20 21:36:11 +00:00
static int mca_vprotocol_pessimist_component_finalize ( void )
{
2007-07-31 17:12:21 +00:00
V_OUTPUT_VERBOSE ( 500 , " vprotocol_pessimist_finalize " ) ;
free ( mca_vprotocol_pessimist . event_buffer ) ;
2007-09-20 21:57:21 +00:00
OBJ_DESTRUCT ( & mca_vprotocol_pessimist . replay_events ) ;
OBJ_DESTRUCT ( & mca_vprotocol_pessimist . pending_events ) ;
OBJ_DESTRUCT ( & mca_vprotocol_pessimist . events_pool ) ;
2007-07-31 17:12:21 +00:00
return OMPI_SUCCESS ;
2007-07-20 21:36:11 +00:00
}
2007-09-20 21:57:21 +00:00
int mca_vprotocol_pessimist_enable ( bool enable ) {
if ( enable ) {
2008-10-01 18:42:43 +00:00
int ret ;
2015-06-23 20:59:57 -07:00
if ( ( ret = vprotocol_pessimist_sender_based_init ( _mmap_file_name ,
2008-10-01 18:42:43 +00:00
_sender_based_size ) ) ! = OMPI_SUCCESS )
2007-09-20 21:57:21 +00:00
return ret ;
}
else {
vprotocol_pessimist_sender_based_finalize ( ) ;
2008-10-02 00:22:41 +00:00
vprotocol_pessimist_event_logger_disconnect ( mca_vprotocol_pessimist . el_comm ) ;
2007-09-20 21:57:21 +00:00
}
2007-09-21 03:24:08 +00:00
return OMPI_SUCCESS ;
2007-09-20 21:57:21 +00:00
}