|
|
@ -18,9 +18,11 @@ |
|
|
|
|
|
|
|
|
|
|
|
/* Microbenchmarks around CHTTP2 HPACK operations */ |
|
|
|
/* Microbenchmarks around CHTTP2 HPACK operations */ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include <benchmark/benchmark.h> |
|
|
|
#include <grpc/support/alloc.h> |
|
|
|
#include <grpc/support/alloc.h> |
|
|
|
#include <grpc/support/log.h> |
|
|
|
#include <grpc/support/log.h> |
|
|
|
#include <string.h> |
|
|
|
#include <string.h> |
|
|
|
|
|
|
|
#include <memory> |
|
|
|
#include <sstream> |
|
|
|
#include <sstream> |
|
|
|
|
|
|
|
|
|
|
|
#include "src/core/ext/transport/chttp2/transport/hpack_encoder.h" |
|
|
|
#include "src/core/ext/transport/chttp2/transport/hpack_encoder.h" |
|
|
@ -31,7 +33,6 @@ |
|
|
|
#include "src/core/lib/transport/timeout_encoding.h" |
|
|
|
#include "src/core/lib/transport/timeout_encoding.h" |
|
|
|
|
|
|
|
|
|
|
|
#include "test/cpp/microbenchmarks/helpers.h" |
|
|
|
#include "test/cpp/microbenchmarks/helpers.h" |
|
|
|
#include "third_party/benchmark/include/benchmark/benchmark.h" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
auto& force_library_initialization = Library::get(); |
|
|
|
auto& force_library_initialization = Library::get(); |
|
|
|
|
|
|
|
|
|
|
@ -51,10 +52,11 @@ static grpc_slice MakeSlice(std::vector<uint8_t> bytes) { |
|
|
|
static void BM_HpackEncoderInitDestroy(benchmark::State& state) { |
|
|
|
static void BM_HpackEncoderInitDestroy(benchmark::State& state) { |
|
|
|
TrackCounters track_counters; |
|
|
|
TrackCounters track_counters; |
|
|
|
grpc_core::ExecCtx exec_ctx; |
|
|
|
grpc_core::ExecCtx exec_ctx; |
|
|
|
grpc_chttp2_hpack_compressor c; |
|
|
|
std::unique_ptr<grpc_chttp2_hpack_compressor> c( |
|
|
|
|
|
|
|
new grpc_chttp2_hpack_compressor); |
|
|
|
while (state.KeepRunning()) { |
|
|
|
while (state.KeepRunning()) { |
|
|
|
grpc_chttp2_hpack_compressor_init(&c); |
|
|
|
grpc_chttp2_hpack_compressor_init(c.get()); |
|
|
|
grpc_chttp2_hpack_compressor_destroy(&c); |
|
|
|
grpc_chttp2_hpack_compressor_destroy(c.get()); |
|
|
|
grpc_core::ExecCtx::Get()->Flush(); |
|
|
|
grpc_core::ExecCtx::Get()->Flush(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -71,8 +73,9 @@ static void BM_HpackEncoderEncodeDeadline(benchmark::State& state) { |
|
|
|
grpc_metadata_batch_init(&b); |
|
|
|
grpc_metadata_batch_init(&b); |
|
|
|
b.deadline = saved_now + 30 * 1000; |
|
|
|
b.deadline = saved_now + 30 * 1000; |
|
|
|
|
|
|
|
|
|
|
|
grpc_chttp2_hpack_compressor c; |
|
|
|
std::unique_ptr<grpc_chttp2_hpack_compressor> c( |
|
|
|
grpc_chttp2_hpack_compressor_init(&c); |
|
|
|
new grpc_chttp2_hpack_compressor); |
|
|
|
|
|
|
|
grpc_chttp2_hpack_compressor_init(c.get()); |
|
|
|
grpc_transport_one_way_stats stats; |
|
|
|
grpc_transport_one_way_stats stats; |
|
|
|
memset(&stats, 0, sizeof(stats)); |
|
|
|
memset(&stats, 0, sizeof(stats)); |
|
|
|
grpc_slice_buffer outbuf; |
|
|
|
grpc_slice_buffer outbuf; |
|
|
@ -85,12 +88,12 @@ static void BM_HpackEncoderEncodeDeadline(benchmark::State& state) { |
|
|
|
static_cast<size_t>(1024), |
|
|
|
static_cast<size_t>(1024), |
|
|
|
&stats, |
|
|
|
&stats, |
|
|
|
}; |
|
|
|
}; |
|
|
|
grpc_chttp2_encode_header(&c, nullptr, 0, &b, &hopt, &outbuf); |
|
|
|
grpc_chttp2_encode_header(c.get(), nullptr, 0, &b, &hopt, &outbuf); |
|
|
|
grpc_slice_buffer_reset_and_unref_internal(&outbuf); |
|
|
|
grpc_slice_buffer_reset_and_unref_internal(&outbuf); |
|
|
|
grpc_core::ExecCtx::Get()->Flush(); |
|
|
|
grpc_core::ExecCtx::Get()->Flush(); |
|
|
|
} |
|
|
|
} |
|
|
|
grpc_metadata_batch_destroy(&b); |
|
|
|
grpc_metadata_batch_destroy(&b); |
|
|
|
grpc_chttp2_hpack_compressor_destroy(&c); |
|
|
|
grpc_chttp2_hpack_compressor_destroy(c.get()); |
|
|
|
grpc_slice_buffer_destroy_internal(&outbuf); |
|
|
|
grpc_slice_buffer_destroy_internal(&outbuf); |
|
|
|
|
|
|
|
|
|
|
|
std::ostringstream label; |
|
|
|
std::ostringstream label; |
|
|
@ -120,8 +123,9 @@ static void BM_HpackEncoderEncodeHeader(benchmark::State& state) { |
|
|
|
"addmd", grpc_metadata_batch_add_tail(&b, &storage[i], elems[i]))); |
|
|
|
"addmd", grpc_metadata_batch_add_tail(&b, &storage[i], elems[i]))); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
grpc_chttp2_hpack_compressor c; |
|
|
|
std::unique_ptr<grpc_chttp2_hpack_compressor> c( |
|
|
|
grpc_chttp2_hpack_compressor_init(&c); |
|
|
|
new grpc_chttp2_hpack_compressor); |
|
|
|
|
|
|
|
grpc_chttp2_hpack_compressor_init(c.get()); |
|
|
|
grpc_transport_one_way_stats stats; |
|
|
|
grpc_transport_one_way_stats stats; |
|
|
|
memset(&stats, 0, sizeof(stats)); |
|
|
|
memset(&stats, 0, sizeof(stats)); |
|
|
|
grpc_slice_buffer outbuf; |
|
|
|
grpc_slice_buffer outbuf; |
|
|
@ -134,7 +138,7 @@ static void BM_HpackEncoderEncodeHeader(benchmark::State& state) { |
|
|
|
static_cast<size_t>(state.range(1)), |
|
|
|
static_cast<size_t>(state.range(1)), |
|
|
|
&stats, |
|
|
|
&stats, |
|
|
|
}; |
|
|
|
}; |
|
|
|
grpc_chttp2_encode_header(&c, nullptr, 0, &b, &hopt, &outbuf); |
|
|
|
grpc_chttp2_encode_header(c.get(), nullptr, 0, &b, &hopt, &outbuf); |
|
|
|
if (!logged_representative_output && state.iterations() > 3) { |
|
|
|
if (!logged_representative_output && state.iterations() > 3) { |
|
|
|
logged_representative_output = true; |
|
|
|
logged_representative_output = true; |
|
|
|
for (size_t i = 0; i < outbuf.count; i++) { |
|
|
|
for (size_t i = 0; i < outbuf.count; i++) { |
|
|
@ -147,7 +151,7 @@ static void BM_HpackEncoderEncodeHeader(benchmark::State& state) { |
|
|
|
grpc_core::ExecCtx::Get()->Flush(); |
|
|
|
grpc_core::ExecCtx::Get()->Flush(); |
|
|
|
} |
|
|
|
} |
|
|
|
grpc_metadata_batch_destroy(&b); |
|
|
|
grpc_metadata_batch_destroy(&b); |
|
|
|
grpc_chttp2_hpack_compressor_destroy(&c); |
|
|
|
grpc_chttp2_hpack_compressor_destroy(c.get()); |
|
|
|
grpc_slice_buffer_destroy_internal(&outbuf); |
|
|
|
grpc_slice_buffer_destroy_internal(&outbuf); |
|
|
|
|
|
|
|
|
|
|
|
std::ostringstream label; |
|
|
|
std::ostringstream label; |
|
|
|