Esempio n. 1
0
int SSD_BLOCK_ERASE_DELAY(int reg)
{
	int ret = 0;
	int64_t start = 0;
	int64_t end = 0;
	int64_t diff;
	int64_t time_stamp = cell_io_time[reg];

	if( time_stamp == -1)
		return 0;

	/* Block Erase Delay */
	start = get_usec();
	diff = get_usec() - cell_io_time[reg];
	if( diff < BLOCK_ERASE_DELAY){
		while(diff < BLOCK_ERASE_DELAY){
			diff = get_usec() - time_stamp;
	  	}
		ret = 1;
	}
	end = get_usec();

	/* Send Delay Info to Perf Checker */
	SEND_TO_PERF_CHECKER(reg_io_type[reg], end-start, REG_OP);

	/* Update IO Overhead */
	cell_io_time[reg] = -1;
	reg_io_cmd[reg] = NOOP;
	reg_io_type[reg] = NOOP;

	return ret;
}
Esempio n. 2
0
int SSD_CELL_WRITE_DELAY(int reg)
{
	int ret = 0;
	int64_t start = 0;
	int64_t end = 0;
	int64_t diff = 0;
	int64_t time_stamp = cell_io_time[reg];

	if( time_stamp == -1 )
		return 0;

	/* Cell Write Delay */
	start = get_usec();
	diff = start - time_stamp + io_overhead[reg];

#ifndef VSSIM_BENCH
  #ifdef DEL_QEMU_OVERHEAD
	if(diff < CELL_PROGRAM_DELAY){
		SSD_UPDATE_QEMU_OVERHEAD(CELL_PROGRAM_DELAY-diff);
	}
	diff = start - cell_io_time[reg] + io_overhead[reg];
  #endif
#endif


	if( diff < CELL_PROGRAM_DELAY){
		init_diff_reg = diff;
		while(diff < CELL_PROGRAM_DELAY){
			diff = get_usec() - time_stamp + io_overhead[reg];
		}
		ret = 1;
	}
	end = get_usec();

	/* Send Delay Info To Perf Checker */
	SEND_TO_PERF_CHECKER(reg_io_type[reg], end-start, REG_OP);
	SSD_UPDATE_IO_REQUEST(reg);

	/* Update Time Stamp Struct */
	cell_io_time[reg] = -1;
	reg_io_cmd[reg] = NOOP;
	reg_io_type[reg] = NOOP;

	/* Update IO Overhead */
	io_overhead[reg] = 0;

	return ret;
}
Esempio n. 3
0
int SSD_REG_WRITE_DELAY(int reg)
{
	int ret = 0;
	int64_t start = 0;
       	int64_t	end = 0;
	int64_t diff = 0;
	int64_t time_stamp = reg_io_time[reg];

	if (time_stamp == -1)
		return 0;

	/* Reg Write Delay */
	start = get_usec();
	diff = start - time_stamp;

#ifndef VSSIM_BENCH
  #ifdef DEL_QEMU_OVERHEAD
	if(diff < REG_WRITE_DELAY){
		SSD_UPDATE_QEMU_OVERHEAD(REG_WRITE_DELAY-diff);
	}
	diff = start - reg_io_time[reg];
  #endif
#endif

	if (diff < REG_WRITE_DELAY){
		while( diff < REG_WRITE_DELAY ){
			diff = get_usec() - time_stamp;
		}
		ret = 1;
	}
	end = get_usec();

	/* Send Delay Info To Perf Checker */
	SEND_TO_PERF_CHECKER(reg_io_type[reg], end-start, CH_OP);

	/* Update Time Stamp Struct */
	reg_io_time[reg] = -1;

//TEMPs
//	FILE* fp_temp = fopen("./data/write.txt","a");
//	fprintf(fp_temp,"%ld\n",end-start);
//	fclose(fp_temp);
//TEMPe

	return ret;
}
Esempio n. 4
0
int SSD_REG_READ_DELAY(int reg)
{
	int ret = 0;
	int64_t start = 0;
	int64_t end = 0;
	int64_t diff = 0;
	int64_t time_stamp = reg_io_time[reg];

	if (time_stamp == -1)
		return 0;

	/* Reg Read Delay */
	start = get_usec();
	diff = start - time_stamp;

#ifndef VSSIM_BENCH
  #ifdef DEL_QEMU_OVERHEAD
	if(diff < REG_READ_DELAY){
		SSD_UPDATE_QEMU_OVERHEAD(REG_READ_DELAY-diff);
	}
	diff = start - reg_io_time[reg];
  #endif
#endif

	if(diff < REG_READ_DELAY){
		while(diff < REG_READ_DELAY){
			diff = get_usec() - time_stamp;
		}
		ret = 1;
	}
	end = get_usec();


	/* Send Delay Info To Perf Checker */
	SEND_TO_PERF_CHECKER(reg_io_type[reg], end-start, CH_OP);
	SSD_UPDATE_IO_REQUEST(reg);
	
	/* Update Time Stamp Struct */
	reg_io_time[reg] = -1;
	reg_io_cmd[reg] = NOOP;
	reg_io_type[reg] = NOOP;

	return ret;
}
Esempio n. 5
0
int64_t UPDATE_IO_REQUEST(int request_nb, int offset, int64_t time, int type)
{
	int64_t start = get_usec();

	int io_type;
	int64_t latency=0;
	int flag = 0;

	if(request_nb == -1)
		return 0;

	io_request* curr_request = LOOKUP_IO_REQUEST(request_nb, type);
	if(curr_request == NULL){
		printf("ERROR[%s] No such io request, nb %d\n",__FUNCTION__, request_nb);
		return 0;
	}

	if(type == UPDATE_START_TIME){
		curr_request->start_time[offset] = time;
		curr_request->start_count++;	
	}
	else if(type == UPDATE_END_TIME){
		curr_request->end_time[offset] = time;
		curr_request->end_count++;
	}

	if(curr_request->start_count == curr_request->request_size && curr_request->end_count == curr_request->request_size){
		latency = CALC_IO_LATENCY(curr_request);
		io_type = curr_request->request_type;

		SEND_TO_PERF_CHECKER(io_type, latency, LATENCY_OP);

		FREE_IO_REQUEST(curr_request);
		flag = 1;
	}
	int64_t end = get_usec();

	return (end - start);
}