diff options
author | Elliott Hughes <enh@google.com> | 2014-12-01 21:43:31 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2014-12-01 21:43:32 +0000 |
commit | 076f69d828cfa5d30360e1dd2f24acd751d4a461 (patch) | |
tree | 28766bd67d0abb02b6cd5001d934da1cef2b6574 | |
parent | 6f9d7444e801487fb2362955c62c379a681a55f6 (diff) | |
parent | 47dc7c974e71f8d6275288f8137156ce317bf53c (diff) | |
download | bionic-076f69d828cfa5d30360e1dd2f24acd751d4a461.zip bionic-076f69d828cfa5d30360e1dd2f24acd751d4a461.tar.gz bionic-076f69d828cfa5d30360e1dd2f24acd751d4a461.tar.bz2 |
Merge "Benchmark fread/fwrite both buffered and unbuffered."
-rw-r--r-- | benchmarks/stdio_benchmark.cpp | 36 |
1 files changed, 21 insertions, 15 deletions
diff --git a/benchmarks/stdio_benchmark.cpp b/benchmarks/stdio_benchmark.cpp index e899df7..386ea04 100644 --- a/benchmarks/stdio_benchmark.cpp +++ b/benchmarks/stdio_benchmark.cpp @@ -25,14 +25,19 @@ Arg(1)->Arg(2)->Arg(3)->Arg(4)->Arg(8)->Arg(16)->Arg(32)->Arg(64)->Arg(512)-> \ Arg(1*KB)->Arg(4*KB)->Arg(8*KB)->Arg(16*KB)->Arg(64*KB) -static void BM_stdio_fread(int iters, int chunk_size) { +template <typename Fn> +static void ReadWriteTest(int iters, int chunk_size, Fn f, bool buffered) { StopBenchmarkTiming(); FILE* fp = fopen("/dev/zero", "rw"); char* buf = new char[chunk_size]; StartBenchmarkTiming(); + if (!buffered) { + setvbuf(fp, 0, _IONBF, 0); + } + for (int i = 0; i < iters; ++i) { - fread(buf, chunk_size, 1, fp); + f(buf, chunk_size, 1, fp); } StopBenchmarkTiming(); @@ -40,22 +45,23 @@ static void BM_stdio_fread(int iters, int chunk_size) { delete[] buf; fclose(fp); } -BENCHMARK(BM_stdio_fread)->AT_COMMON_SIZES; +static void BM_stdio_fread(int iters, int chunk_size) { + ReadWriteTest(iters, chunk_size, fread, true); +} +BENCHMARK(BM_stdio_fread)->AT_COMMON_SIZES; static void BM_stdio_fwrite(int iters, int chunk_size) { - StopBenchmarkTiming(); - FILE* fp = fopen("/dev/zero", "rw"); - char* buf = new char[chunk_size]; - StartBenchmarkTiming(); + ReadWriteTest(iters, chunk_size, fwrite, true); +} +BENCHMARK(BM_stdio_fwrite)->AT_COMMON_SIZES; - for (int i = 0; i < iters; ++i) { - fwrite(buf, chunk_size, 1, fp); - } +static void BM_stdio_fread_unbuffered(int iters, int chunk_size) { + ReadWriteTest(iters, chunk_size, fread, false); +} +BENCHMARK(BM_stdio_fread_unbuffered)->AT_COMMON_SIZES; - StopBenchmarkTiming(); - SetBenchmarkBytesProcessed(int64_t(iters) * int64_t(chunk_size)); - delete[] buf; - fclose(fp); +static void BM_stdio_fwrite_unbuffered(int iters, int chunk_size) { + ReadWriteTest(iters, chunk_size, fwrite, false); } -BENCHMARK(BM_stdio_fwrite)->AT_COMMON_SIZES; +BENCHMARK(BM_stdio_fwrite_unbuffered)->AT_COMMON_SIZES; |