bench: report throughput

make-http-max-header-size-gyp-configurable
Fedor Indutny 7 years ago committed by GitHub
parent dd74753cf5
commit edeedb1b4d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -20,10 +20,14 @@
*/ */
#include "http_parser.h" #include "http_parser.h"
#include <assert.h> #include <assert.h>
#include <stdint.h>
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include <sys/time.h> #include <sys/time.h>
/* 8 gb */
static const int64_t kBytes = 8LL << 30;
static const char data[] = static const char data[] =
"POST /joyent/http-parser HTTP/1.1\r\n" "POST /joyent/http-parser HTTP/1.1\r\n"
"Host: github.com\r\n" "Host: github.com\r\n"
@ -38,7 +42,7 @@ static const char data[] =
"Referer: https://github.com/joyent/http-parser\r\n" "Referer: https://github.com/joyent/http-parser\r\n"
"Connection: keep-alive\r\n" "Connection: keep-alive\r\n"
"Transfer-Encoding: chunked\r\n" "Transfer-Encoding: chunked\r\n"
"Cache-Control: max-age=0\r\n\r\nb\r\nhello world\r\n0\r\n\r\n"; "Cache-Control: max-age=0\r\n\r\nb\r\nhello world\r\n0\r\n";
static const size_t data_len = sizeof(data) - 1; static const size_t data_len = sizeof(data) - 1;
static int on_info(http_parser* p) { static int on_info(http_parser* p) {
@ -67,13 +71,13 @@ int bench(int iter_count, int silent) {
int err; int err;
struct timeval start; struct timeval start;
struct timeval end; struct timeval end;
float rps;
if (!silent) { if (!silent) {
err = gettimeofday(&start, NULL); err = gettimeofday(&start, NULL);
assert(err == 0); assert(err == 0);
} }
fprintf(stderr, "req_len=%d\n", (int) data_len);
for (i = 0; i < iter_count; i++) { for (i = 0; i < iter_count; i++) {
size_t parsed; size_t parsed;
http_parser_init(&parser, HTTP_REQUEST); http_parser_init(&parser, HTTP_REQUEST);
@ -83,17 +87,27 @@ int bench(int iter_count, int silent) {
} }
if (!silent) { if (!silent) {
double elapsed;
double bw;
double total;
err = gettimeofday(&end, NULL); err = gettimeofday(&end, NULL);
assert(err == 0); assert(err == 0);
fprintf(stdout, "Benchmark result:\n"); fprintf(stdout, "Benchmark result:\n");
rps = (float) (end.tv_sec - start.tv_sec) + elapsed = (double) (end.tv_sec - start.tv_sec) +
(end.tv_usec - start.tv_usec) * 1e-6f; (end.tv_usec - start.tv_usec) * 1e-6f;
fprintf(stdout, "Took %f seconds to run\n", rps);
rps = (float) iter_count / rps; total = (double) iter_count * data_len;
fprintf(stdout, "%f req/sec\n", rps); bw = (double) total / elapsed;
fprintf(stdout, "%.2f mb | %.2f mb/s | %.2f req/sec | %.2f s\n",
(double) total / (1024 * 1024),
bw / (1024 * 1024),
(double) iter_count / elapsed,
elapsed);
fflush(stdout); fflush(stdout);
} }
@ -101,11 +115,14 @@ int bench(int iter_count, int silent) {
} }
int main(int argc, char** argv) { int main(int argc, char** argv) {
int64_t iterations;
iterations = kBytes / (int64_t) data_len;
if (argc == 2 && strcmp(argv[1], "infinite") == 0) { if (argc == 2 && strcmp(argv[1], "infinite") == 0) {
for (;;) for (;;)
bench(5000000, 1); bench(iterations, 1);
return 0; return 0;
} else { } else {
return bench(5000000, 0); return bench(iterations, 0);
} }
} }

Loading…
Cancel
Save