| bmcpt.c | bmcpt.c | |||
|---|---|---|---|---|
| skipping to change at line 66 | skipping to change at line 66 | |||
| } \ | } \ | |||
| } while (0) | } while (0) | |||
| static void bm_start(struct bm_ctx *ctx) | static void bm_start(struct bm_ctx *ctx) | |||
| { | { | |||
| gettimeofday(&ctx->tv1, NULL); | gettimeofday(&ctx->tv1, NULL); | |||
| } | } | |||
| static void bm_finish(struct bm_ctx *ctx, const char *operation, int32_t si ze) | static void bm_finish(struct bm_ctx *ctx, const char *operation, int32_t si ze) | |||
| { | { | |||
| float ops_per_sec; | ||||
| float mbs_per_sec; | ||||
| gettimeofday(&ctx->tv2, NULL); | gettimeofday(&ctx->tv2, NULL); | |||
| timersub(&ctx->tv2, &ctx->tv1, &ctx->tv_elapsed); | timersub(&ctx->tv2, &ctx->tv1, &ctx->tv_elapsed); | |||
| ops_per_sec = | ctx->mbs = | |||
| ((float)ctx->counter) / (((float)ctx->tv_elapsed.tv_sec) + | ||||
| (((float)ctx->tv_elapsed.tv_usec) / | ||||
| 1000000.0)); | ||||
| mbs_per_sec = | ||||
| ((((float)ctx->counter) * size) / | ((((float)ctx->counter) * size) / | |||
| (((float)ctx->tv_elapsed.tv_sec) + | (((float)ctx->tv_elapsed.tv_sec) + | |||
| (((float)ctx->tv_elapsed.tv_usec) / 1000000.0))) / (1024.0 * | (((float)ctx->tv_elapsed.tv_usec) / 1000000.0))) / (1024.0 * | |||
| 1024.0); | 1024.0); | |||
| ctx->mbs = ops_per_sec; | ||||
| } | } | |||
| static void bmc_connect(struct bm_ctx *ctx) | static void bmc_connect(struct bm_ctx *ctx) | |||
| { | { | |||
| ctx->conn = qb_ipcc_connect("bm1", QB_MAX(1000 * (100 + THREADS), | ctx->conn = qb_ipcc_connect("bm1", QB_MAX(1000 * (100 + THREADS), | |||
| 1024*1024)); | 1024*1024)); | |||
| if (ctx->conn == NULL) { | if (ctx->conn == NULL) { | |||
| perror("qb_ipcc_connect"); | perror("qb_ipcc_connect"); | |||
| exit(-1); | exit(-1); | |||
| } | } | |||
| } | } | |||
| static void bmc_disconnect(struct bm_ctx *ctx) | static void bmc_disconnect(struct bm_ctx *ctx) | |||
| { | { | |||
| qb_ipcc_disconnect(ctx->conn); | qb_ipcc_disconnect(ctx->conn); | |||
| } | } | |||
| static char buffer[1024 * 1024]; | struct my_req { | |||
| struct qb_ipc_request_header hdr; | ||||
| char message[1024 * 1024]; | ||||
| }; | ||||
| static struct my_req request; | ||||
| static int32_t bmc_send_nozc(struct bm_ctx *ctx, uint32_t size) | static int32_t bmc_send_nozc(struct bm_ctx *ctx, uint32_t size) | |||
| { | { | |||
| struct qb_ipc_request_header *req_header = (struct qb_ipc_request_he ader *)buffer; | ||||
| struct qb_ipc_response_header res_header; | struct qb_ipc_response_header res_header; | |||
| int32_t res; | int32_t res; | |||
| req_header->id = QB_IPC_MSG_USER_START + 3; | request.hdr.id = QB_IPC_MSG_USER_START + 3; | |||
| req_header->size = sizeof(struct qb_ipc_request_header) + size; | request.hdr.size = sizeof(struct qb_ipc_request_header) + size; | |||
| repeat_send: | repeat_send: | |||
| res = qb_ipcc_send(ctx->conn, req_header, req_header->size); | res = qb_ipcc_send(ctx->conn, &request, request.hdr.size); | |||
| if (res < 0) { | if (res < 0) { | |||
| if (res == -EAGAIN) { | if (res == -EAGAIN) { | |||
| goto repeat_send; | goto repeat_send; | |||
| } else if (res == -EINVAL || res == -EINTR) { | } else if (res == -EINVAL || res == -EINTR) { | |||
| perror("qb_ipcc_send"); | perror("qb_ipcc_send"); | |||
| return -1; | return -1; | |||
| } else { | } else { | |||
| errno = -res; | errno = -res; | |||
| perror("qb_ipcc_send"); | perror("qb_ipcc_send"); | |||
| goto repeat_send; | goto repeat_send; | |||
| skipping to change at line 174 | skipping to change at line 169 | |||
| int32_t main(void) | int32_t main(void) | |||
| { | { | |||
| struct bm_ctx bm_ctx[THREADS]; | struct bm_ctx bm_ctx[THREADS]; | |||
| pthread_t threads[THREADS]; | pthread_t threads[THREADS]; | |||
| pthread_attr_t thread_attr[THREADS]; | pthread_attr_t thread_attr[THREADS]; | |||
| int32_t i, j; | int32_t i, j; | |||
| float total_mbs; | float total_mbs; | |||
| void *retval; | void *retval; | |||
| for (i = 0; i < THREADS; i++) { | ||||
| bm_ctx[i].mbs = 0; | ||||
| } | ||||
| signal(SIGALRM, sigalrm_handler); | signal(SIGALRM, sigalrm_handler); | |||
| for (j = 0; j < 500; j++) { | for (j = 0; j < 500; j++) { | |||
| alarm_notice = 0; | alarm_notice = 0; | |||
| alarm(3); | alarm(3); | |||
| for (i = 0; i < THREADS; i++) { | for (i = 0; i < THREADS; i++) { | |||
| bm_ctx[i].multi = j + 100; | bm_ctx[i].multi = j + 100; | |||
| bm_ctx[i].counter = 0; | bm_ctx[i].counter = 0; | |||
| pthread_attr_init(&thread_attr[i]); | pthread_attr_init(&thread_attr[i]); | |||
| pthread_attr_setdetachstate(&thread_attr[i], | pthread_attr_setdetachstate(&thread_attr[i], | |||
| End of changes. 8 change blocks. | ||||
| 16 lines changed or deleted | 14 lines changed or added | |||
This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||