diff options
author | Tor Brede Vekterli <vekterli@yahooinc.com> | 2022-01-06 11:49:57 +0000 |
---|---|---|
committer | Tor Brede Vekterli <vekterli@yahooinc.com> | 2022-01-10 14:35:01 +0000 |
commit | 3f15206f090ce36c08282b8d64d6ff9c15c8fd69 (patch) | |
tree | edc117087a4fac59dc6f507e5c88f305845839ca /configdefinitions | |
parent | 6fc8a76d2062e6176510804be59faffe2e20662d (diff) |
Support dynamic throttling of async persistence operations
Adds an operation throttler that is intended to provide global throttling
of async operations across all persistence stripe threads. A throttler
wraps a logical max pending window size of in-flight operations. Depending
on the throttler implementation, the window size may expand and shrink
dynamically. Exactly how and when this happens is unspecified.
Commit adds two throttler implementations:
* An unlimited throttler that is no-op and never blocks.
* A throttler built around the mbus `DynamicThrottlePolicy` and defers
all window decisions to it.
Current config default is to use the unlimited throttler. Config changes
require a process restart.
Offers both polling and (timed, non-timed) blocking calls for acquiring
a throttle token. If the returned token is valid, the caller may proceed
to invoke the asynchronous operation.
The window slot taken up by a valid throttle token is implicitly freed up
when the token is destroyed.
Diffstat (limited to 'configdefinitions')
-rw-r--r-- | configdefinitions/src/vespa/stor-filestor.def | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/configdefinitions/src/vespa/stor-filestor.def b/configdefinitions/src/vespa/stor-filestor.def index 66700eff3e6..c351e52b557 100644 --- a/configdefinitions/src/vespa/stor-filestor.def +++ b/configdefinitions/src/vespa/stor-filestor.def @@ -75,3 +75,22 @@ use_async_message_handling_on_schedule bool default=false restart ## the entire resource usage sample is immediately reported to the cluster controller (via host info). ## This config can be live updated (doesn't require restart). resource_usage_reporter_noise_level double default=0.001 + +## Specify throttling used for async persistence operations. This throttling takes place +## before operations are dispatched to Proton and serves as a limiter for how many +## operations may be in flight in Proton's internal queues. +## +## - UNLIMITED is, as it says on the tin, unlimited. Offers no actual throttling, but +## has near zero overhead and never blocks. +## - DYNAMIC uses DynamicThrottlePolicy under the hood and will block if the window +## is full (if a blocking throttler API call is invoked). +## +async_operation_throttler_type enum { UNLIMITED, DYNAMIC } default=UNLIMITED restart + +## Specifies the extent the throttling window is increased by when the async throttle +## policy has decided that more concurrent operations are desirable. Also affects the +## _minimum_ size of the throttling window; its size is implicitly set to max(this config +## value, number of threads). +## +## Only applies if async_operation_throttler_type == DYNAMIC. +async_operation_dynamic_throttling_window_increment int default=20 restart |