Change the low level ping pong benchmark to run all tests by default.

Change on 2014/12/12 by klempner <klempner@google.com>
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=82026092
pull/1/merge
klempner 10 years ago committed by Michael Lumish
parent 33023c4bac
commit ee3ebe1bb9
  1. 113
      test/core/network_benchmarks/low_level_ping_pong.c

@ -55,6 +55,7 @@
#include <grpc/support/log.h>
#include <grpc/support/thd.h>
#include <grpc/support/time.h>
#include <grpc/support/useful.h>
typedef struct fd_pair {
int read_fd;
@ -68,6 +69,7 @@ typedef struct thread_args {
int (*write_bytes)(struct thread_args *args, char *buf);
int (*setup)(struct thread_args *args);
int epoll_fd;
char *strategy_name;
} thread_args;
/*
@ -548,8 +550,71 @@ static test_strategy test_strategies[] = {
{"spin_read", spin_read_bytes, set_socket_nonblocking},
{"spin_poll", poll_read_bytes_spin, set_socket_nonblocking}};
int main(int argc, char **argv) {
static char *socket_types[] = {"tcp", "socketpair", "pipe"};
int create_socket(char *socket_type, fd_pair *client_fds, fd_pair *server_fds) {
if (strcmp(socket_type, "tcp") == 0) {
create_sockets_tcp(client_fds, server_fds);
} else if (strcmp(socket_type, "socketpair") == 0) {
create_sockets_socketpair(client_fds, server_fds);
} else if (strcmp(socket_type, "pipe") == 0) {
create_sockets_pipe(client_fds, server_fds);
} else {
fprintf(stderr, "Invalid socket type %s\n", socket_type);
return -1;
}
return 0;
}
static int run_benchmark(char *socket_type, thread_args *client_args,
thread_args *server_args) {
gpr_thd_id tid;
int rv = 0;
rv = create_socket(socket_type, &client_args->fds, &server_args->fds);
if (rv < 0) {
return rv;
}
gpr_log(GPR_INFO, "Starting test %s %s %d", client_args->strategy_name,
socket_type, client_args->msg_size);
gpr_thd_new(&tid, server_thread_wrap, server_args, NULL);
client_thread(client_args);
return 0;
}
static int run_all_benchmarks(int msg_size) {
int error = 0;
int i;
for (i = 0; i < GPR_ARRAY_SIZE(test_strategies); ++i) {
test_strategy *test_strategy = &test_strategies[i];
int j;
for (j = 0; j < GPR_ARRAY_SIZE(socket_types); ++j) {
thread_args *client_args = malloc(sizeof(thread_args));
thread_args *server_args = malloc(sizeof(thread_args));
char *socket_type = socket_types[j];
client_args->read_bytes = test_strategy->read_strategy;
client_args->write_bytes = blocking_write_bytes;
client_args->setup = test_strategy->setup;
client_args->msg_size = msg_size;
client_args->strategy_name = test_strategy->name;
server_args->read_bytes = test_strategy->read_strategy;
server_args->write_bytes = blocking_write_bytes;
server_args->setup = test_strategy->setup;
server_args->msg_size = msg_size;
server_args->strategy_name = test_strategy->name;
error = run_benchmark(socket_type, client_args, server_args);
if (error < 0) {
return error;
}
}
}
return error;
}
int main(int argc, char **argv) {
thread_args *client_args = malloc(sizeof(thread_args));
thread_args *server_args = malloc(sizeof(thread_args));
int msg_size = -1;
@ -557,6 +622,7 @@ int main(int argc, char **argv) {
char *socket_type = NULL;
int i;
const test_strategy *test_strategy = NULL;
int error = 0;
gpr_cmdline *cmdline =
gpr_cmdline_create("low_level_ping_pong network benchmarking tool");
@ -569,17 +635,25 @@ int main(int argc, char **argv) {
gpr_cmdline_parse(cmdline, argc, argv);
if (msg_size == -1) {
msg_size = 50;
}
if (read_strategy == NULL) {
read_strategy = "blocking";
gpr_log(GPR_INFO, "No strategy specified, running all benchmarks");
return run_all_benchmarks(msg_size);
}
if (socket_type == NULL) {
socket_type = "tcp";
}
if (msg_size == -1) {
msg_size = 50;
if (msg_size <= 0) {
fprintf(stderr, "msg_size must be > 0\n");
print_usage(argv[0]);
return -1;
}
for (i = 0; i < sizeof(test_strategies) / sizeof(struct test_strategy); ++i) {
for (i = 0; i < GPR_ARRAY_SIZE(test_strategies); ++i) {
if (!strcmp(test_strategies[i].name, read_strategy)) {
test_strategy = &test_strategies[i];
}
@ -592,35 +666,16 @@ int main(int argc, char **argv) {
client_args->read_bytes = test_strategy->read_strategy;
client_args->write_bytes = blocking_write_bytes;
client_args->setup = test_strategy->setup;
client_args->msg_size = msg_size;
client_args->strategy_name = read_strategy;
server_args->read_bytes = test_strategy->read_strategy;
server_args->write_bytes = blocking_write_bytes;
server_args->setup = test_strategy->setup;
if (strcmp(socket_type, "tcp") == 0) {
create_sockets_tcp(&client_args->fds, &server_args->fds);
} else if (strcmp(socket_type, "socketpair") == 0) {
create_sockets_socketpair(&client_args->fds, &server_args->fds);
} else if (strcmp(socket_type, "pipe") == 0) {
create_sockets_pipe(&client_args->fds, &server_args->fds);
} else {
fprintf(stderr, "Invalid socket type %s\n", socket_type);
return -1;
}
if (msg_size <= 0) {
fprintf(stderr, "msg_size must be > 0\n");
print_usage(argv[0]);
return -1;
}
server_args->msg_size = msg_size;
client_args->msg_size = msg_size;
server_args->strategy_name = read_strategy;
gpr_log(GPR_INFO, "Starting test %s %s %d", read_strategy, socket_type,
msg_size);
error = run_benchmark(socket_type, client_args, server_args);
gpr_thd_new(&tid, server_thread_wrap, server_args, NULL);
client_thread(client_args);
gpr_cmdline_destroy(cmdline);
return 0;
return error;
}

Loading…
Cancel
Save