We are using clock real time (which is very expensive) on every
RPC to update channelz. We should simply use cycle clock.
This patch exposes cycle clock, enables RDTSC on intel,
and use it for channelz.
This patch also changes the implementation of time_precise_init
to that more accurately using the monotonic clock and
shorter by looping at most a few hundred milliseconds.
This is part of a larger performance series.
This patch enables the open source portable enclave framework
[Asylo](https://github.com/google/asylo) to use gRPC within its
toolchain.
The Asylo EKEP handshaker does its own end-to-end testing by reusing
gRPC's own end2end testing targets. To do so, it requires those targets
to be visible.
Signed-off-by: Dionna Amalie Glaze <dionnaglaze@google.com>
grpc_byte_buffer_reader_next() copies and references the slice. This
is not always necessary since the caller will not use the slice
after destroying the byte buffer.
A prominent example is the protobuf parser, which
calls grpc_byte_buffer_reader_next() and immediately unrefs the slice
after the call. This ref() and unref() calls can be very expensive
in the hot path.
This commit introduces grpc_byte_buffer_reader_peek() which
essentialy return a pointer to the slice in the buffer, i.e.,
no copies, and no refs.
QPS of 1MiB 1 Channel callback benchmark increases by 5%.
More importantly insructions per cycle is increased by 10%.
Also add tests and benchmarks for byte_buffer_reader_peek()
This commit reaplies 509e77a5a3
grpc_byte_buffer_reader_next() copies and references the slice. This
is not always necessary since the caller will not use the slice
after destroying the byte buffer.
A prominent example is the protobuf parser, which
calls grpc_byte_buffer_reader_next() and immediately unrefs the slice
after the call. This ref() and unref() calls can be very expensive
in the hot path.
This commit introduces grpc_byte_buffer_reader_peek() which
essentialy return a pointer to the slice in the buffer, i.e.,
no copies, and no refs.
QPS of 1MiB 1 Channel callback benchmark increases by 5%.
More importantly insructions per cycle is increased by 10%.
Also add tests and benchmarks for byte_buffer_reader_peek()