コード例 #1
0
ファイル: Listener.cpp プロジェクト: yufeiren/iperf
Listener::Listener( thread_Settings *inSettings ) {

    mClients = inSettings->mThreads;
    mBuf = NULL;
    mSettings = inSettings;

    // initialize buffer
    mBuf = new char[ mSettings->mBufLen ];

    if ( mSettings->mOutputDataFileName != NULL )
        if ( (mSettings->Output_file = \
                                       fopen (mSettings->mOutputDataFileName, "ab")) == NULL )
            fprintf( stderr, "Unable to open the outfile stream\n");

    // open listening socket
    if ( mSettings->mThreadMode == kMode_RDMA_Listener ) {
        mCb = new rdma_cb;
        Settings_Initialize_Cb( mCb );
        rdma_init( mCb );

//	Setting_Copy_Ts2Cb( mSettings, mCb );

        {
            // addr
            /*	if ( mSettings->mThreadMode == kMode_RDMA_Listener)
            		memcpy( &mCb->sin, &mSettings->local, sizeof(iperf_sockaddr));
            	else if ( mSettings->mThreadMode == kMode_RDMA_Client)
            		memcpy( &mCb->sin, &mSettings->peer, sizeof(iperf_sockaddr));
            */
            // port
            mCb->port = mSettings->mPort;
            DPRINTF(("listening port is %d\n", mCb->port));

            mCb->server = 1;

            mCb->size = mSettings->mBufLen;
            DPRINTF(("Listener buffer size is %d\n", mCb->size));

            mCb->outputfile = mSettings->Output_file;
        }
        ListenRDMA( );
    }
    else
        Listen( );

    ReportSettings( inSettings );

} // end Listener
コード例 #2
0
ファイル: main.c プロジェクト: jcarreira/disag-firebox
static int __init main_module_init(void)
{
    int retval;
    rdma_ctx_t ctx;
    rdma_request req;
    char *mem1, *mem2;
    u64 mem1_addr, mem2_addr;

    retval = rdma_library_init();
    
    if (retval == 0) {
        LOG_KERN(LOG_INFO, ("RDMA_LIB_INIT SUCCESS"));
    }
    else  {
        LOG_KERN(LOG_INFO, ("RDMA_LIB_INIT FAILED"));
        return -1;
    }

    while(!rdma_library_ready())
        ;

    ctx = rdma_init(100, "127.0.0.1", 18515);

    if (ctx != NULL) {
        LOG_KERN(LOG_INFO, ("RDMA_INIT SUCCESS"));
    }
    else  {
        LOG_KERN(LOG_INFO, ("RDMA_INIT FAILED"));
        return -1;
    }

    mem1 = kmalloc(MEM_SIZE, GFP_KERNEL);
    mem2 = kmalloc(MEM_SIZE, GFP_KERNEL);

    mem1_addr = rdma_map_address(mem1, MEM_SIZE);
    mem2_addr = rdma_map_address(mem2, MEM_SIZE);

    strcpy(mem1, "HELLO WORLD");
    req.rw = RDMA_WRITE;
    req.dma_addr = mem1_addr;
    req.remote_offset = 0;
    req.length = 20;
    LOG_KERN(LOG_INFO, ("Launching write op"));
    retval = rdma_op(ctx, &req, 1);
    if (retval == 0) {
        LOG_KERN(LOG_INFO, (" RDMA WRITE SUCCESS"));
    }
    else  {
        LOG_KERN(LOG_INFO, ("RDMA WRITE FAILED"));
        return -1;
    }

    strcpy(mem2, "WRONG DATA"); 
    req.rw = RDMA_READ;
    req.dma_addr = mem2_addr;
    req.remote_offset = 0;
    req.length = 20;
    LOG_KERN(LOG_INFO, ("Launching read op"));
    retval = rdma_op(ctx, &req, 1);
    if (retval == 0) {
        LOG_KERN(LOG_INFO, (" RDMA READ SUCCESS: %s", mem2));
    }
    else  {
        LOG_KERN(LOG_INFO, ("RDMA READ FAILED"));
        return -1;
    }

    strcpy(mem1, "HERE WE GO AGAIN");
    req.rw = RDMA_WRITE;
    req.dma_addr = mem1_addr;
    req.remote_offset = 0;
    req.length = 20;
    LOG_KERN(LOG_INFO, ("Launching write op"));
    retval = rdma_op(ctx, &req, 1);
    if (retval == 0) {
        LOG_KERN(LOG_INFO, (" RDMA WRITE SUCCESS"));
    }
    else  {
        LOG_KERN(LOG_INFO, ("RDMA WRITE FAILED"));
        return -1;
    }
    
    strcpy(mem2, "PLAIN WRONG"); 
    req.rw = RDMA_READ;
    req.dma_addr = mem2_addr;
    req.remote_offset = 0;
    req.length = 20;
    LOG_KERN(LOG_INFO, ("Launching read op"));
    retval = rdma_op(ctx, &req, 1);
    if (retval == 0) {
        LOG_KERN(LOG_INFO, (" RDMA READ SUCCESS: %s", mem2));
    }
    else  {
        LOG_KERN(LOG_INFO, ("RDMA READ FAILED"));
        return -1;
    }

    return 0;
}
コード例 #3
0
ファイル: page.c プロジェクト: leeymcj/RDMA_paging
int main(int argc, char *argv[])
{
	
	int i,n;
	volatile int ret;
	char* val;
	struct timeval t0, t1, t2, t3;

	ret = dune_init_and_enter();

	if (ret) {
		printf("failed to initialize dune\n");
		return ret;
	}

	dune_register_pgflt_handler(pgflt_handler);
	

	if (argc != 4){
		usage(argv[0]);
	}

	page_nr = atoi(argv[3]);
	page_len = PAGE_SIZE*page_nr;

	//launch_server(2, page_nr);
	//ret = rdma_init("cp-2", "41406", PAGE_SIZE);
	rdma_init(argv[1], argv[2] , PAGE_SIZE);


	 gettimeofday(&t0, 0);	
	//allocated a memory
	if (posix_memalign((void **)&page, PAGE_SIZE, page_len)) {
		perror("init page memory failed");
		return -1;
	}

	memset( page,0, page_len);
	val= (char*) malloc(page_len);
	memcpy(val, page, page_len);


	/*page-out*/	
	pthread_mutex_lock(&_syscall_mtx);
	//remote write
	for (i=0; i<page_nr; i++)
	rdma_write_offset( &page[i*PAGE_SIZE], i*PAGE_SIZE);

	//unmap physical address
	dune_vm_unmap(pgroot, (void *)page, page_len);
	pthread_mutex_unlock(&_syscall_mtx);

	//printf("page-out\n");

	//generate page fault
		
	//printf("page fault!\n");
	gettimeofday(&t1, 0);
        assert(!memcmp(val, page, page_len));
        gettimeofday(&t2, 0);


	//printf("page fault handled\n");
	rdma_done();
	long pagefault = (t1.tv_sec-t0.tv_sec)*1000000 + t1.tv_usec-t0.tv_usec;
        long total = (t2.tv_sec-t0.tv_sec)*1000000 + t2.tv_usec-t0.tv_usec;
        fprintf(stdout, "%ld\t%ld\n", pagefault, total);
        return 0;


}