static int disconnect_by_device(char *device) { int instance; int ret; ret = sscanf(device, "nvme%d", &instance); if (ret < 0) return ret; return remove_ctrl(instance); }
static int do_discover(char *argstr, bool connect) { struct nvmf_disc_rsp_page_hdr *log = NULL; char *dev_name; int instance, numrec = 0, ret; instance = add_ctrl(argstr); if (instance < 0) return instance; if (asprintf(&dev_name, "/dev/nvme%d", instance) < 0) return errno; ret = nvmf_get_log_page_discovery(dev_name, &log, &numrec); free(dev_name); remove_ctrl(instance); switch (ret) { case DISC_OK: if (connect) connect_ctrls(log, numrec); else if (cfg.raw) save_discovery_log(log, numrec); else print_discovery_log(log, numrec); break; case DISC_GET_NUMRECS: fprintf(stderr, "Get number of discovery log entries failed.\n"); break; case DISC_GET_LOG: fprintf(stderr, "Get discovery log entries failed.\n"); break; case DISC_NO_LOG: fprintf(stderr, "No discovery log entries to fetch.\n"); break; case DISC_NOT_EQUAL: fprintf(stderr, "Numrec values of last two get dicovery log page not equal\n"); break; default: fprintf(stderr, "Get dicovery log page failed: %d\n", ret); break; } return ret; }
main(int argc, char **argv) { uint64_t diff; struct timespec start, end; int i; int sumDiff = 0; int nTime = 100000; std::string s("1 2 3 4 5 d df df d f df e rwe g d vf g g er g fg f gerg rg erg df g d fg r g"); /* measure monotonic time */ clock_gettime(CLOCK_MONOTONIC, &start); /* mark start time */ //sleep(1); /* do stuff */ for(int i=0; i<nTime;i++) { std::string result = remove_ctrl(s); } clock_gettime(CLOCK_MONOTONIC, &end); /* mark the end time */ sumDiff = BILLION * (end.tv_sec - start.tv_sec) + end.tv_nsec - start.tv_nsec; diff = sumDiff / nTime; printf("elapsed time = %llu nanoseconds\n", (long long unsigned int) diff); clock_gettime(CLOCK_MONOTONIC, &start); /* mark start time */ //sleep(1); /* do stuff */ for(int i=0; i<nTime;i++) { std::string result = remove_ctrl_mutating(s); } clock_gettime(CLOCK_MONOTONIC, &end); /* mark the end time */ sumDiff = BILLION * (end.tv_sec - start.tv_sec) + end.tv_nsec - start.tv_nsec; diff = sumDiff / nTime; printf("elapsed time = %llu nanoseconds\n", (long long unsigned int) diff); clock_gettime(CLOCK_MONOTONIC, &start); /* mark start time */ //sleep(1); /* do stuff */ for(int i=0; i<nTime;i++) { std::string result = remove_ctrl_reserve(s); } clock_gettime(CLOCK_MONOTONIC, &end); /* mark the end time */ sumDiff = BILLION * (end.tv_sec - start.tv_sec) + end.tv_nsec - start.tv_nsec; diff = sumDiff / nTime; printf("elapsed time = %llu nanoseconds\n", (long long unsigned int) diff); clock_gettime(CLOCK_MONOTONIC, &start); /* mark start time */ //sleep(1); /* do stuff */ for(int i=0; i<nTime;i++) { std::string result = remove_ctrl_ref_args(s); } clock_gettime(CLOCK_MONOTONIC, &end); /* mark the end time */ sumDiff = BILLION * (end.tv_sec - start.tv_sec) + end.tv_nsec - start.tv_nsec; diff = sumDiff / nTime; printf("elapsed time = %llu nanoseconds\n", (long long unsigned int) diff); clock_gettime(CLOCK_MONOTONIC, &start); /* mark start time */ //sleep(1); /* do stuff */ for(int i=0; i<nTime;i++) { std::string result = remove_ctrl_ref_args_it(s); } clock_gettime(CLOCK_MONOTONIC, &end); /* mark the end time */ sumDiff = BILLION * (end.tv_sec - start.tv_sec) + end.tv_nsec - start.tv_nsec; diff = sumDiff / nTime; printf("elapsed time = %llu nanoseconds\n", (long long unsigned int) diff); // initialize char * char* result = (char*)malloc(sizeof(char)*(s.length()+1)); clock_gettime(CLOCK_MONOTONIC, &start); /* mark start time */ //sleep(1); /* do stuff */ for(int i=0; i<nTime;i++) { remove_ctrl_cstrings(result,s.c_str(),s.length()); } clock_gettime(CLOCK_MONOTONIC, &end); /* mark the end time */ sumDiff = BILLION * (end.tv_sec - start.tv_sec) + end.tv_nsec - start.tv_nsec; diff = sumDiff / nTime; printf("elapsed time = %llu nanoseconds\n", (long long unsigned int) diff); printf("result : %s\n",result); /* now re-do this and measure CPU time */ /* the time spent sleeping will not count (but there is a bit of overhead */ clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start); /* mark start time */ sleep(1); /* do stuff */ clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &end); /* mark the end time */ diff = BILLION * (end.tv_sec - start.tv_sec) + end.tv_nsec - start.tv_nsec; printf("elapsed process CPU time = %llu nanoseconds\n", (long long unsigned int) diff); exit(0); }