aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core
diff options
context:
space:
mode:
authorGravatar Craig Tiller <ctiller@google.com>2017-03-23 15:14:48 -0700
committerGravatar Craig Tiller <ctiller@google.com>2017-03-23 15:14:48 -0700
commit878a7c2a09d01baec4df8eb99ba9cbe1dc9af7e3 (patch)
tree27e2137631a6221ddc7ee493cdc42ec6e5656be7 /src/core
parent6f1e443a519cd28d97be78c5ca2ca72a45f6b598 (diff)
Memory usage tweaks
- Improve estimation to give a more reliable slop space in the arena - Improve measurement by issuing sufficient throw-away calls on a channel to allow call size estimation to settle
Diffstat (limited to 'src/core')
-rw-r--r--src/core/lib/surface/channel.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/core/lib/surface/channel.c b/src/core/lib/surface/channel.c
index d6c7aee40d..a80f24e740 100644
--- a/src/core/lib/surface/channel.c
+++ b/src/core/lib/surface/channel.c
@@ -194,13 +194,22 @@ grpc_channel *grpc_channel_create(grpc_exec_ctx *exec_ctx, const char *target,
size_t grpc_channel_get_call_size_estimate(grpc_channel *channel) {
#define ROUND_UP_SIZE 256
- return ((size_t)gpr_atm_no_barrier_load(&channel->call_size_estimate) +
- ROUND_UP_SIZE) &
- ~(size_t)(ROUND_UP_SIZE - 1);
+ /* We round up our current estimate to the NEXT value of ROUND_UP_SIZE.
+ This ensures:
+ 1. a consistent size allocation when our estimate is drifting slowly
+ (which is common) - which tends to help most allocators reuse memory
+ 2. a small amount of allowed growth over the estimate without hitting
+ the arena size doubling case, reducing overall memory usage */
+ size_t est = ((size_t)gpr_atm_no_barrier_load(&channel->call_size_estimate) +
+ 2 * ROUND_UP_SIZE) &
+ ~(size_t)(ROUND_UP_SIZE - 1);
+ gpr_log(GPR_DEBUG, "est: %d", (int)est);
+ return est;
}
void grpc_channel_update_call_size_estimate(grpc_channel *channel,
size_t size) {
+ gpr_log(GPR_DEBUG, "used: %d", (int)size);
size_t cur = (size_t)gpr_atm_no_barrier_load(&channel->call_size_estimate);
if (cur < size) {
/* size grew: update estimate */