/* * computes the time taken to read/write data in a flash element * using just one active page. */ static void ssd_compute_access_time_one_active_page (ssd_req **reqs, int total, int elem_num, ssd_t *s) { // we assume that requests have been broken down into page sized chunks double cost; int blkno; int count; int is_read; ssd_power_element_stat *power_stat = &(s->elements[elem_num].power_stat); // we can serve only one request at a time ASSERT(total == 1); blkno = reqs[0]->blk; count = reqs[0]->count; is_read = reqs[0]->is_read; if (is_read) { cost = ssd_read_policy_simple(count, s, power_stat); } else { cost = ssd_write_one_active_page(blkno, count, elem_num, s); } reqs[0]->acctime = cost; reqs[0]->schtime = cost; }
/* * computes the time taken to read/write data in a flash element * using just one active page. */ static void ssd_compute_access_time_one_active_page (ssd_req **reqs, int total, int elem_num, ssd_t *s) { // we assume that requests have been broken down into page sized chunks double cost; int blkno; int count; int is_read; // we can serve only one request at a time ASSERT(total == 1); blkno = reqs[0]->blk; count = reqs[0]->count; is_read = reqs[0]->is_read; if (is_read) { // there are no separate read policies. switch(s->params.write_policy) { case DISKSIM_SSD_WRITE_POLICY_SIMPLE: case DISKSIM_SSD_WRITE_POLICY_OSR: // the cost of one page read cost = ssd_read_policy_simple(count, s); break; default: fprintf(stderr, "Error: unknown write policy %d in ssd_compute_access_time\n", s->params.write_policy); exit(1); } } else { switch(s->params.write_policy) { case DISKSIM_SSD_WRITE_POLICY_SIMPLE: cost = ssd_write_policy_simple(blkno, count, elem_num, s); break; case DISKSIM_SSD_WRITE_POLICY_OSR: cost = ssd_write_one_active_page(blkno, count, elem_num, s); break; default: fprintf(stderr, "Error: unknown write policy %d in ssd_compute_access_time\n", s->params.write_policy); exit(1); } } reqs[0]->acctime = cost; reqs[0]->schtime = cost; }