Exemple #1
0
static
void tcp_init_con(pscom_con_t *con)
{
	int ret;
	int con_fd = con->arch.tcp.ufd_info.fd;
	assert(con_fd >= 0);

	con->pub.type = PSCOM_CON_TYPE_TCP;

	con->write_start = tcp_write_start;
	con->write_stop = tcp_write_stop;
	con->read_start = tcp_read_start;
	con->read_stop = tcp_read_stop;
	con->close = tcp_close;

	ret = fcntl(con_fd, F_SETFL, O_NONBLOCK);
	if (ret == -1) {
		DPRINT(D_WARN, "tcp_init_con(): fcntl(%d, F_SETFL, O_NONBLOCK) failed : %s",
		       con_fd, strerror(errno));
	}

	memset(&con->arch.tcp.ufd_info, 0, sizeof(con->arch.tcp.ufd_info));

	con->arch.tcp.ufd_info.fd = con_fd;
	con->arch.tcp.ufd_info.can_read = tcp_do_read;
	con->arch.tcp.ufd_info.can_write = tcp_do_write;
	con->arch.tcp.ufd_info.priv = con;

	ufd_add(&pscom.ufd, &con->arch.tcp.ufd_info);

	pscom_con_setup_ok(con);
}
Exemple #2
0
static
void pscom_openib_init_con(pscom_con_t *con)
{
	con->pub.type = PSCOM_CON_TYPE_OPENIB;

	// Only Polling:
	con->write_start = pscom_poll_write_start;
	con->write_stop = pscom_poll_write_stop;
	con->read_start = pscom_poll_read_start;
	con->read_stop = pscom_poll_read_stop;

	con->poll_reader.do_read = pscom_openib_do_read;
	con->do_write = pscom_openib_do_write;
	con->close = pscom_openib_con_close;

#ifdef IB_USE_RNDV
	con->rma_mem_register = pscom_openib_rma_mem_register;
	con->rma_mem_deregister = pscom_openib_rma_mem_deregister;
#ifdef IB_RNDV_RDMA_WRITE
	con->rma_write = pscom_openib_rma_write;
#else
	con->rma_read = pscom_openib_rma_read;
#endif

	con->rendezvous_size = pscom.env.rendezvous_size_openib;

#ifdef IB_RNDV_DISABLE_FREE_TO_OS

	/* We have to prevent free() from returning memory back to the OS: */

#ifndef IB_RNDV_USE_MALLOC_HOOKS
	if (con->rendezvous_size != ~0U) {
		/* See 'man mallopt(3) / M_MMAP_MAX': Setting this parameter to 0 disables the use of mmap(2) for servicing large allocation requests. */
		mallopt(M_MMAP_MAX, 0);

		/* See 'man mallopt(3) / M_TRIM_THRESHOLD': Setting M_TRIM_THRESHOLD to -1 disables trimming completely. */
		mallopt(M_TRIM_THRESHOLD, -1);
	}
#else
	if(__morecore == __default_morecore) {
		/* Switch to our own function pscom_openib_morecore() that does not trim: */
		__morecore = pscom_openib_morecore_hook;
	}

	__free_hook = pscom_openib_free_hook;
#endif

#endif
#endif

	pscom_con_setup_ok(con);
}
Exemple #3
0
static
void pscom_mxm_init_con(pscom_con_t *con)
{
	con->pub.type = PSCOM_CON_TYPE_MXM;

	con->write_start = pscom_poll_write_start;
	con->write_stop = pscom_poll_write_stop;
	con->read_start = pscom_mxm_read_start;
	con->read_stop = pscom_mxm_read_stop;

	con->do_write = pscom_mxm_do_write;
	con->close = pscom_mxm_con_close;

	pscom_con_setup_ok(con);
}
Exemple #4
0
static
void pscom_extoll_init_con(pscom_con_t *con)
{
	con->pub.type = PSCOM_CON_TYPE_EXTOLL;

	// Only Polling:
	con->write_start = pscom_poll_write_start;
	con->write_stop = pscom_poll_write_stop;
	con->read_start = pscom_poll_read_start;
	con->read_stop = pscom_poll_read_stop;

	con->poll_reader.do_read = pscom_extoll_rma2_do_read;
	con->do_write = pscom_extoll_rma2_do_write;
	con->close = pscom_extoll_con_close;

//	con->rma_mem_register = pscom_extoll_rma_mem_register;
//	con->rma_mem_deregister = pscom_extoll_rma_mem_deregister;
//	con->rma_read = pscom_extoll_rma_read;

	con->rendezvous_size = pscom.env.rendezvous_size_extoll;

	reader_inc();
	pscom_con_setup_ok(con);
}