This is an automated email from the ASF dual-hosted git repository.
sudheerv pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficserver.git
The following commit(s) were added to refs/heads/master by this push:
new e2a0d8c RateLimiting and Connection Config changes (#6968)
e2a0d8c is described below
commit e2a0d8cf580b0e954848fbc645a77040ebcbd1f3
Author: Sudheer Vinukonda <[email protected]>
AuthorDate: Thu Jul 2 09:29:01 2020 -0700
RateLimiting and Connection Config changes (#6968)
Conn config renaming to support a protocol agnostic
rate limiter (using request concurrency as opposed to
active connections)
---
doc/admin-guide/files/records.config.en.rst | 27 ++++++++--------
.../monitoring/statistics/core/network-io.en.rst | 2 +-
iocore/net/Net.cc | 4 +--
iocore/net/P_Net.h | 2 +-
iocore/net/P_UnixNet.h | 6 ++--
iocore/net/UnixNet.cc | 36 ++++++++++------------
mgmt/RecordsConfig.cc | 2 +-
7 files changed, 39 insertions(+), 40 deletions(-)
diff --git a/doc/admin-guide/files/records.config.en.rst
b/doc/admin-guide/files/records.config.en.rst
index 999f21a..9c24300 100644
--- a/doc/admin-guide/files/records.config.en.rst
+++ b/doc/admin-guide/files/records.config.en.rst
@@ -414,19 +414,20 @@ Network
.. ts:cv:: CONFIG proxy.config.net.max_connections_in INT 30000
- The total number of client connections that the :program:`traffic_server`
- can handle simultaneously. This should be tuned according to your memory
size,
- and expected work load (network, cpu etc). This limit includes both
keepalive
- and active client connections that :program:`traffic_server` can handle at
- any given instant.
-
-.. ts:cv:: CONFIG proxy.config.net.max_active_connections_in INT 10000
-
- The total number of active client connections that the |TS| can handle
- simultaneously. This should be tuned according to your memory size,
- and expected work load (network, cpu etc). If this is set to 0, active
- connection tracking is disabled and active connections have no separate
- limit and the total connections follow
`proxy.config.net.connections_throttle`
+ The total number of client requests that |TS| can handle simultaneously.
+ This should be tuned according to your memory size, and expected work load
+ (network, cpu etc). This limit includes both idle (keep alive) connections
+ and active requests that |TS| can handle at any given instant. The delta
+ between `proxy.config.net.max_connections_in` and
`proxy.config.net.max_requests_in`
+ is the amount of maximum idle (keepalive) connections |TS| will maintain.
+
+.. ts:cv:: CONFIG proxy.config.net.max_requests_in INT 0
+
+ The total number of concurrent requests or active client connections
+ that the |TS| can handle simultaneously. This should be tuned according
+ to your memory size, and expected work load (network, cpu etc). When
+ set to 0, active request tracking is disabled and max requests has no
+ separate limit and the total connections follow
`proxy.config.net.connections_throttle`
.. ts:cv:: CONFIG proxy.config.net.default_inactivity_timeout INT 86400
:reloadable:
diff --git a/doc/admin-guide/monitoring/statistics/core/network-io.en.rst
b/doc/admin-guide/monitoring/statistics/core/network-io.en.rst
index 3777359..5ea7687 100644
--- a/doc/admin-guide/monitoring/statistics/core/network-io.en.rst
+++ b/doc/admin-guide/monitoring/statistics/core/network-io.en.rst
@@ -66,7 +66,7 @@ Network I/O
.. ts:stat:: global proxy.process.net.connections_throttled_out integer
:type: counter
-.. ts:stat:: global proxy.process.net.max.active.connections_throttled_in
integer
+.. ts:stat:: global proxy.process.net.max.requests_throttled_in integer
:type: counter
.. ts:stat:: global proxy.process.net.default_inactivity_timeout_applied
integer
diff --git a/iocore/net/Net.cc b/iocore/net/Net.cc
index 2ee21f9..f0cac5b 100644
--- a/iocore/net/Net.cc
+++ b/iocore/net/Net.cc
@@ -142,8 +142,8 @@ register_net_stats()
(int)net_connections_throttled_in_stat,
RecRawStatSyncSum);
RecRegisterRawStat(net_rsb, RECT_PROCESS,
"proxy.process.net.connections_throttled_out", RECD_INT, RECP_PERSISTENT,
(int)net_connections_throttled_out_stat,
RecRawStatSyncSum);
- RecRegisterRawStat(net_rsb, RECT_PROCESS,
"proxy.process.net.max.active.connections_throttled_in", RECD_INT,
RECP_PERSISTENT,
- (int)net_connections_max_active_throttled_in_stat,
RecRawStatSyncSum);
+ RecRegisterRawStat(net_rsb, RECT_PROCESS,
"proxy.process.net.max.requests_throttled_in", RECD_INT, RECP_PERSISTENT,
+ (int)net_requests_max_throttled_in_stat,
RecRawStatSyncSum);
}
void
diff --git a/iocore/net/P_Net.h b/iocore/net/P_Net.h
index 45996a6..46a05c3 100644
--- a/iocore/net/P_Net.h
+++ b/iocore/net/P_Net.h
@@ -58,7 +58,7 @@ enum Net_Stats {
net_tcp_accept_stat,
net_connections_throttled_in_stat,
net_connections_throttled_out_stat,
- net_connections_max_active_throttled_in_stat,
+ net_requests_max_throttled_in_stat,
Net_Stat_Count
};
diff --git a/iocore/net/P_UnixNet.h b/iocore/net/P_UnixNet.h
index caae65d..2c74a3e 100644
--- a/iocore/net/P_UnixNet.h
+++ b/iocore/net/P_UnixNet.h
@@ -276,7 +276,7 @@ public:
/// configuration settings for managing the active and keep-alive queues
struct Config {
uint32_t max_connections_in = 0;
- uint32_t max_connections_active_in = 0;
+ uint32_t max_requests_in = 0;
uint32_t inactive_threshold_in = 0;
uint32_t transaction_no_activity_timeout_in = 0;
uint32_t keep_alive_no_activity_timeout_in = 0;
@@ -305,8 +305,8 @@ public:
Config config; ///< Per thread copy of the @c global_config
// Active and keep alive queue values that depend on other configuration
values.
// These are never updated directly, they are computed from other config
values.
- uint32_t max_connections_per_thread_in = 0;
- uint32_t max_connections_active_per_thread_in = 0;
+ uint32_t max_connections_per_thread_in = 0;
+ uint32_t max_requests_per_thread_in = 0;
/// Number of configuration items in @c Config.
static constexpr int CONFIG_ITEM_COUNT = sizeof(Config) / sizeof(uint32_t);
/// Which members of @c Config the per thread values depend on.
diff --git a/iocore/net/UnixNet.cc b/iocore/net/UnixNet.cc
index f368e07..3e15b97 100644
--- a/iocore/net/UnixNet.cc
+++ b/iocore/net/UnixNet.cc
@@ -276,9 +276,9 @@ NetHandler::update_nethandler_config(const char *str,
RecDataT, RecData data, vo
if (name == "proxy.config.net.max_connections_in"sv) {
updated_member = &NetHandler::global_config.max_connections_in;
Debug("net_queue", "proxy.config.net.max_connections_in updated to %"
PRId64, data.rec_int);
- } else if (name == "proxy.config.net.max_active_connections_in"sv) {
- updated_member = &NetHandler::global_config.max_connections_active_in;
- Debug("net_queue", "proxy.config.net.max_active_connections_in updated to
%" PRId64, data.rec_int);
+ } else if (name == "proxy.config.net.max_requests_in"sv) {
+ updated_member = &NetHandler::global_config.max_requests_in;
+ Debug("net_queue", "proxy.config.net.max_requests_in updated to %" PRId64,
data.rec_int);
} else if (name == "proxy.config.net.inactive_threshold_in"sv) {
updated_member = &NetHandler::global_config.inactive_threshold_in;
Debug("net_queue", "proxy.config.net.inactive_threshold_in updated to %"
PRId64, data.rec_int);
@@ -321,21 +321,21 @@ NetHandler::init_for_process()
{
// read configuration values and setup callbacks for when they change
REC_ReadConfigInt32(global_config.max_connections_in,
"proxy.config.net.max_connections_in");
- REC_ReadConfigInt32(global_config.max_connections_active_in,
"proxy.config.net.max_connections_active_in");
+ REC_ReadConfigInt32(global_config.max_requests_in,
"proxy.config.net.max_requests_in");
REC_ReadConfigInt32(global_config.inactive_threshold_in,
"proxy.config.net.inactive_threshold_in");
REC_ReadConfigInt32(global_config.transaction_no_activity_timeout_in,
"proxy.config.net.transaction_no_activity_timeout_in");
REC_ReadConfigInt32(global_config.keep_alive_no_activity_timeout_in,
"proxy.config.net.keep_alive_no_activity_timeout_in");
REC_ReadConfigInt32(global_config.default_inactivity_timeout,
"proxy.config.net.default_inactivity_timeout");
RecRegisterConfigUpdateCb("proxy.config.net.max_connections_in",
update_nethandler_config, nullptr);
- RecRegisterConfigUpdateCb("proxy.config.net.max_active_connections_in",
update_nethandler_config, nullptr);
+ RecRegisterConfigUpdateCb("proxy.config.net.max_requests_in",
update_nethandler_config, nullptr);
RecRegisterConfigUpdateCb("proxy.config.net.inactive_threshold_in",
update_nethandler_config, nullptr);
RecRegisterConfigUpdateCb("proxy.config.net.transaction_no_activity_timeout_in",
update_nethandler_config, nullptr);
RecRegisterConfigUpdateCb("proxy.config.net.keep_alive_no_activity_timeout_in",
update_nethandler_config, nullptr);
RecRegisterConfigUpdateCb("proxy.config.net.default_inactivity_timeout",
update_nethandler_config, nullptr);
Debug("net_queue", "proxy.config.net.max_connections_in updated to %d",
global_config.max_connections_in);
- Debug("net_queue", "proxy.config.net.max_active_connections_in updated to
%d", global_config.max_connections_active_in);
+ Debug("net_queue", "proxy.config.net.max_requests_in updated to %d",
global_config.max_requests_in);
Debug("net_queue", "proxy.config.net.inactive_threshold_in updated to %d",
global_config.inactive_threshold_in);
Debug("net_queue", "proxy.config.net.transaction_no_activity_timeout_in
updated to %d",
global_config.transaction_no_activity_timeout_in);
@@ -569,17 +569,16 @@ NetHandler::manage_active_queue(NetEvent *enabling_ne,
bool ignore_queue_size =
{
const int total_connections_in = active_queue_size + keep_alive_queue_size;
Debug("v_net_queue",
- "max_connections_per_thread_in: %d
max_connections_active_per_thread_in: %d total_connections_in: %d "
+ "max_connections_per_thread_in: %d max_requests_per_thread_in: %d
total_connections_in: %d "
"active_queue_size: %d keep_alive_queue_size: %d",
- max_connections_per_thread_in, max_connections_active_per_thread_in,
total_connections_in, active_queue_size,
- keep_alive_queue_size);
+ max_connections_per_thread_in, max_requests_per_thread_in,
total_connections_in, active_queue_size, keep_alive_queue_size);
- if (!max_connections_active_per_thread_in) {
+ if (!max_requests_per_thread_in) {
// active queue has no max
return true;
}
- if (ignore_queue_size == false && max_connections_active_per_thread_in >
active_queue_size) {
+ if (ignore_queue_size == false && max_requests_per_thread_in >
active_queue_size) {
return true;
}
@@ -603,12 +602,12 @@ NetHandler::manage_active_queue(NetEvent *enabling_ne,
bool ignore_queue_size =
(ne->active_timeout_in && ne->next_activity_timeout_at <= now)) {
_close_ne(ne, now, handle_event, closed, total_idle_time,
total_idle_count);
}
- if (ignore_queue_size == false && max_connections_active_per_thread_in >
active_queue_size) {
+ if (ignore_queue_size == false && max_requests_per_thread_in >
active_queue_size) {
return true;
}
}
- if (max_connections_active_per_thread_in > active_queue_size) {
+ if (max_requests_per_thread_in > active_queue_size) {
return true;
}
@@ -619,12 +618,11 @@ void
NetHandler::configure_per_thread_values()
{
// figure out the number of threads and calculate the number of connections
per thread
- int threads =
eventProcessor.thread_group[ET_NET]._count;
- max_connections_per_thread_in = config.max_connections_in / threads;
- max_connections_active_per_thread_in = config.max_connections_active_in /
threads;
+ int threads = eventProcessor.thread_group[ET_NET]._count;
+ max_connections_per_thread_in = config.max_connections_in / threads;
+ max_requests_per_thread_in = config.max_requests_in / threads;
Debug("net_queue", "max_connections_per_thread_in updated to %d threads:
%d", max_connections_per_thread_in, threads);
- Debug("net_queue", "max_connections_active_per_thread_in updated to %d
threads: %d", max_connections_active_per_thread_in,
- threads);
+ Debug("net_queue", "max_requests_per_thread_in updated to %d threads: %d",
max_requests_per_thread_in, threads);
}
void
@@ -756,7 +754,7 @@ NetHandler::add_to_active_queue(NetEvent *ne)
} else {
if (active_queue_full) {
// there is no room left in the queue
- NET_SUM_DYN_STAT(net_connections_max_active_throttled_in_stat, 1);
+ NET_SUM_DYN_STAT(net_requests_max_throttled_in_stat, 1);
return false;
}
// in the keep-alive queue or no queue, new to this queue
diff --git a/mgmt/RecordsConfig.cc b/mgmt/RecordsConfig.cc
index cd661dc..557c3e6 100644
--- a/mgmt/RecordsConfig.cc
+++ b/mgmt/RecordsConfig.cc
@@ -400,7 +400,7 @@ static const RecordElement RecordsConfig[] =
,
{RECT_CONFIG, "proxy.config.net.max_connections_in", RECD_INT, "30000",
RECU_DYNAMIC, RR_NULL, RECC_STR, "^[0-9]+$", RECA_NULL}
,
- {RECT_CONFIG, "proxy.config.net.max_connections_active_in", RECD_INT, "0",
RECU_DYNAMIC, RR_NULL, RECC_STR, "^[0-9]+$", RECA_NULL}
+ {RECT_CONFIG, "proxy.config.net.max_requests_active_in", RECD_INT, "0",
RECU_DYNAMIC, RR_NULL, RECC_STR, "^[0-9]+$", RECA_NULL}
,
// ###########################