/** * @brief Output the contents of a Portals remote memory descriptor. * * @param fp File pointer (where to send output) * @param prefix Text to put on every line before the output. * @param addr The remote memory address. */ void fprint_NNTI_status( std::ostream &out, const char *name, const char *prefix, const NNTI_status_t *status) { std::string subprefix(prefix); subprefix.append(" "); // add two spaces if (status == NULL) { out << prefix << " " << name << " = NULL " << std::endl; return; } /* header */ out << prefix << " " << name << " = {" << std::endl; /* contents */ out << subprefix << " op = " << status->op << std::endl; out << subprefix << " result = " << status->result << std::endl; out << subprefix << " start = " << status->start << std::endl; out << subprefix << " offset = " << status->offset << std::endl; out << subprefix << " length = " << status->length << std::endl; fprint_NNTI_peer(out, "src", subprefix.c_str(), &status->src); fprint_NNTI_peer(out, "dest", subprefix.c_str(), &status->dest); /* footer */ out << subprefix << " }" << std::endl; }
/** * @brief Output the contents of a Portals remote memory descriptor. * * @param fp File pointer (where to send output) * @param prefix Text to put on every line before the output. * @param addr The remote memory address. */ void fprint_NNTI_buffer( std::ostream &out, const char *name, const char *prefix, const NNTI_buffer_t *addr) { std::string subprefix(prefix); subprefix.append(" "); // add two spaces if (addr == NULL) { out << prefix << " " << name << " = NULL " << std::endl; return; } /* header */ out << prefix << " " << name << " = {" << std::endl; /* contents */ out << subprefix << " transport_id = " << addr->transport_id << std::endl; fprint_NNTI_peer(out, "buffer_owner", subprefix.c_str(), &addr->buffer_owner); fprint_NNTI_remote_addr(out, "buffer_addr", subprefix.c_str(), &addr->buffer_addr); out << subprefix << " ops = " << addr->ops << std::endl; out << subprefix << " payload_size = " << addr->payload_size << std::endl; out << subprefix << " payload = " << addr->payload << std::endl; out << subprefix << " transport_private = " << addr->transport_private << std::endl; /* footer */ out << subprefix << " }" << std::endl; }
/** * @brief Output the contents of a Portals remote memory descriptor. * * @param fp File pointer (where to send output) * @param prefix Text to put on every line before the output. * @param addr The remote memory address. */ void fprint_NNTI_peer( FILE *fp, const char *name, const char *prefix, const NNTI_peer_t *addr) { std::stringstream out(std::stringstream::out); fprint_NNTI_peer(out, name, prefix, addr); fprintf(fp, "%s", out.str().c_str()); }
/** * @brief Initialize the NSSI RPC mechanism. * * This implementation of \b nssi_rpc_init initializes the * Portals library and interface so that we can use Portals * as the underlying communication protocol. * * @param pid @input The ID to use for this process. */ int nssi_rpc_init( const nssi_rpc_transport rpc_transport, const nssi_rpc_encode rpc_encode, const char *url) { int rc; NNTI_transport_id_t transport_id; log_debug(rpc_debug_level, "************************************************************ entered"); if (rpc_initialized) return NSSI_OK; /* check to see if logging is enabled */ if (logger_not_initialized()) { logger_set_file(stderr); } /* make sure the timer works properly */ // rc = nssi_timer_test(); // if (rc != NSSI_OK) { // log_fatal(rpc_debug_level, "nssi_timer_test() failed"); // return rc; // } /* stash the transport and encoding types so we know how to cleanup on exit */ // transport = rpc_transport; encoding = rpc_encode; /* initialize the transport mechanism */ switch (rpc_transport) { case NSSI_RPC_PTL: transport_id=NNTI_TRANSPORT_PORTALS; break; case NSSI_RPC_IB: transport_id=NNTI_TRANSPORT_IB; break; case NSSI_RPC_LUC: transport_id=NNTI_TRANSPORT_LUC; break; case NSSI_RPC_GEMINI: transport_id=NNTI_TRANSPORT_GEMINI; break; case NSSI_RPC_MPI: transport_id=NNTI_TRANSPORT_MPI; break; default: rc = NSSI_ENOENT; log_error(rpc_debug_level, "the transport scheme %d does not exist", rpc_transport); return rc; } rc = NNTI_init( transport_id, url, &transports[rpc_transport]); if (rc != NNTI_OK) { log_fatal(rpc_debug_level,"failed"); return rc; } /* initialize the xdr-encoding mechanism */ switch (rpc_encode) { case NSSI_RPC_XDR: rc = nssi_xdr_init(); if (rc != NSSI_OK) { log_fatal(rpc_debug_level,"failed, %d", rc); return rc; } break; default: rc = NSSI_ENOENT; log_error(rpc_debug_level, "the transport scheme " "does not exist"); return rc; } config_init(&nssi_config); config_get_from_env(&nssi_config); if (nssi_config.use_buffer_queue) { trios_buffer_queue_init( &send_bq, nssi_config.buffer_queue_initial_size, nssi_config.buffer_queue_max_size, nssi_config.buffer_queue_create_if_empty, &transports[rpc_transport], NNTI_SEND_SRC, NSSI_SHORT_REQUEST_SIZE); trios_buffer_queue_init( &recv_bq, nssi_config.buffer_queue_initial_size, nssi_config.buffer_queue_max_size, nssi_config.buffer_queue_create_if_empty, &transports[rpc_transport], NNTI_RECV_DST, NSSI_SHORT_RESULT_SIZE); trios_buffer_queue_init( &rdma_target_bq, nssi_config.rdma_buffer_queue_initial_size, nssi_config.rdma_buffer_queue_max_size, nssi_config.rdma_buffer_queue_create_if_empty, &transports[rpc_transport], (NNTI_buf_ops_t)(NNTI_GET_SRC|NNTI_PUT_DST), nssi_config.rdma_buffer_queue_buffer_size); trios_buffer_queue_init( &rdma_get_bq, nssi_config.rdma_buffer_queue_initial_size, nssi_config.rdma_buffer_queue_max_size, nssi_config.rdma_buffer_queue_create_if_empty, &transports[rpc_transport], NNTI_GET_DST, nssi_config.rdma_buffer_queue_buffer_size); trios_buffer_queue_init( &rdma_put_bq, nssi_config.rdma_buffer_queue_initial_size, nssi_config.rdma_buffer_queue_max_size, nssi_config.rdma_buffer_queue_create_if_empty, &transports[rpc_transport], NNTI_PUT_SRC, nssi_config.rdma_buffer_queue_buffer_size); } rpc_initialized = true; if (logging_debug(rpc_debug_level)) { fprint_NNTI_peer(logger_get_file(), "transports[rpc_transport].me", "end of nssi_rpc_init", &transports[rpc_transport].me); } log_debug(rpc_debug_level, "************************************************************ exit"); return NSSI_OK; }