diff options
author | Konstantin Ananyev <konstantin.ananyev@intel.com> | 2019-11-04 13:50:31 +0000 |
---|---|---|
committer | Konstantin Ananyev <konstantin.ananyev@intel.com> | 2019-12-31 11:51:05 +0000 |
commit | b8f1ef2b02b8709c72408ee4803f442efc9f4576 (patch) | |
tree | 95a16adc465206d351cbf1b823f793c7592f00e7 /app/nginx/src | |
parent | 47eb00f25ab06a699dc27507814c7656940340af (diff) |
v6: make TCP stream alloc/free to use memtank API
Introduce two extra parameters for TCP context creation:
struct {
uint32_t min;
/**< min number of free streams (grow threshold). */
uint32_t max;
/**< max number of free streams (shrink threshold). */
} free_streams;
By default these params are equal to max_streams value
(avoid dynamic allocation and preserve current beahviour).
grow() is invoked from accept() FE call to refill streams tank for BE.
shrink() is invoked from close() FE call.
Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
Change-Id: I7af6a76d64813ee4a535323e27ffbfd75037fc92
Diffstat (limited to 'app/nginx/src')
-rw-r--r-- | app/nginx/src/tldk/module.c | 2 | ||||
-rw-r--r-- | app/nginx/src/tldk/ngx_tldk.h | 4 | ||||
-rw-r--r-- | app/nginx/src/tldk/parse.c | 12 |
3 files changed, 18 insertions, 0 deletions
diff --git a/app/nginx/src/tldk/module.c b/app/nginx/src/tldk/module.c index 67d9746..8736529 100644 --- a/app/nginx/src/tldk/module.c +++ b/app/nginx/src/tldk/module.c @@ -95,6 +95,8 @@ init_context(struct tldk_ctx *tcx, const struct tldk_ctx_conf *cf, cprm.socket_id = sid; cprm.proto = TLE_PROTO_TCP; cprm.max_streams = cf->nb_stream; + cprm.free_streams.min = cf->free_streams.nb_min; + cprm.free_streams.max = cf->free_streams.nb_max; cprm.max_stream_rbufs = cf->nb_rbuf; cprm.max_stream_sbufs = cf->nb_sbuf; if (cf->be_in_worker != 0) diff --git a/app/nginx/src/tldk/ngx_tldk.h b/app/nginx/src/tldk/ngx_tldk.h index ffd479b..ed6ae35 100644 --- a/app/nginx/src/tldk/ngx_tldk.h +++ b/app/nginx/src/tldk/ngx_tldk.h @@ -86,6 +86,10 @@ struct tldk_ctx_conf { uint32_t lcore; uint32_t nb_mbuf; uint32_t nb_stream; + struct { + uint32_t nb_min; + uint32_t nb_max; + } free_streams; uint32_t nb_rbuf; uint32_t nb_sbuf; uint32_t nb_dev; diff --git a/app/nginx/src/tldk/parse.c b/app/nginx/src/tldk/parse.c index 5d71d9e..6e20b1b 100644 --- a/app/nginx/src/tldk/parse.c +++ b/app/nginx/src/tldk/parse.c @@ -413,6 +413,18 @@ tldk_ctx_parse(ngx_conf_t *cf, ngx_command_t *dummy, void *conf) &pvl) < 0) return NGX_CONF_ERROR; tcx->nb_stream = pvl.u64; + } else if (ngx_strcmp(v[0].data, "min_free_streams") == 0) { + if (cf->args->nelts != 2 || + parse_uint_val((const char *)v[1].data, + &pvl) < 0) + return NGX_CONF_ERROR; + tcx->free_streams.nb_min = pvl.u64; + } else if (ngx_strcmp(v[0].data, "max_free_streams") == 0) { + if (cf->args->nelts != 2 || + parse_uint_val((const char *)v[1].data, + &pvl) < 0) + return NGX_CONF_ERROR; + tcx->free_streams.nb_max = pvl.u64; } else if (ngx_strcmp(v[0].data, "rbufs") == 0) { if (cf->args->nelts != 2 || parse_uint_val((const char *)v[1].data, |