int cfio_recv_init() { int i, error; MPI_Comm_rank(MPI_COMM_WORLD, &rank); client_num = cfio_map_get_client_num_of_server(rank); msg_head = malloc(client_num * sizeof(cfio_msg_t)); if(NULL == msg_head) { return CFIO_ERROR_MALLOC; } for(i = 0; i < client_num; i ++) { INIT_QLIST_HEAD(&(msg_head[i].link)); } buffer = malloc(client_num *sizeof(cfio_buf_t*)); if(NULL == buffer) { return CFIO_ERROR_MALLOC; } for(i = 0; i < client_num; i ++) { buffer[i] = cfio_buf_open(RECV_BUF_SIZE / client_num, &error); if(NULL == buffer[i]) { error(""); return error; } } return CFIO_ERROR_NONE; }
int cfio_msg_get_max_size(int proc_id) { int client_num_of_server, max_msg_size, client_amount, server_id; if (cfio_map_proc_type(proc_id) == CFIO_MAP_TYPE_CLIENT) { server_id = cfio_map_get_server_of_client(proc_id); client_num_of_server = cfio_map_get_client_num_of_server(server_id); } else if (cfio_map_proc_type(proc_id) == CFIO_MAP_TYPE_SERVER) { client_num_of_server = cfio_map_get_client_num_of_server(proc_id); } client_amount = cfio_map_get_client_amount(); max_msg_size = MSG_BUF_SIZE; max_msg_size = min(max_msg_size, RECV_BUF_SIZE / client_num_of_server / 2); max_msg_size = min(max_msg_size, SEND_BUF_SIZE / 2); max_msg_size = max(max_msg_size, SEND_MSG_MIN_SIZE / client_amount); //printf("max_msg_size = %d\n", max_msg_size); return max_msg_size; }
int cfio_server_init() { init_time = times_cur(); int i; int ret = 0; int x_proc_num, y_proc_num; MPI_Comm_rank(MPI_COMM_WORLD, &rank); if((ret = cfio_recv_init()) < 0) { error(""); return ret; } if((ret = cfio_id_init(CFIO_ID_INIT_SERVER)) < 0) { error(""); return ret; } if((ret = cfio_io_init(rank)) < 0) { error(""); return ret; } times_init(); client_num = cfio_map_get_client_num_of_server(rank); recv_bufs = malloc(sizeof(char *) * client_num); if (!recv_bufs) { printf("line %d malloc error \n", __LINE__); return CFIO_ERROR_MALLOC; } SERVER_REGION_SIZE = RECV_BUF_SIZE / client_num; for (i = 0; i < client_num; ++i) { recv_bufs[i] = malloc(sizeof(char) * SERVER_REGION_SIZE); if (!recv_bufs[i]) { printf("line %d malloc error \n", __LINE__); return CFIO_ERROR_MALLOC; } } buf_addrs = malloc(sizeof(cfio_buf_addr_t *) * client_num); if (!buf_addrs) { printf("line %d malloc error \n", __LINE__); return CFIO_ERROR_MALLOC; } for (i = 0; i < client_num; ++i) { buf_addrs[i] = malloc(sizeof(cfio_buf_addr_t)); if (!buf_addrs[i]) { printf("line %d malloc error \n", __LINE__); return CFIO_ERROR_MALLOC; } cfio_rdma_addr_init(buf_addrs[i], NULL); } begin_time = times_cur(); cfio_rdma_server_init(client_num, SERVER_REGION_SIZE, recv_bufs, sizeof(cfio_buf_addr_t), (char **)buf_addrs); end_time = times_cur(); // printf("server %d rdma init %f. \n", rank, end_time - begin_time); return CFIO_ERROR_NONE; }