[ovs-dev] [PATCH 3/5] conntrack: r/w clean-up interval.
Darrell Ball
dball at vmware.com
Thu Sep 21 07:12:00 UTC 2017
On 9/20/17, 11:33 AM, "Fischetti, Antonio" <antonio.fischetti at intel.com> wrote:
> -----Original Message-----
> From: Darrell Ball [mailto:dball at vmware.com]
> Sent: Tuesday, September 19, 2017 9:28 PM
> To: Fischetti, Antonio <antonio.fischetti at intel.com>; dev at openvswitch.org
> Subject: Re: [ovs-dev] [PATCH 3/5] conntrack: r/w clean-up interval.
>
> Hi Antonio
>
> What is the motivation for this ?
> I don’t think this is a good idea, as it should not be needed under normal
> usage and has the potential to create unnecessary issues for the user and
> also maintenance issues.
[Antonio]
Agree, this would be more for debugging/experimenting purposes.
I will remove this patch from the series.
BTW let me know if you think some other CT cfg parameters could be
read/written - or just read - by this ct-set-glbl-cfg command.
For example, the Alg expectation timeout?
[Darrell] I left the expectation timeout simple for now as the area can be dicey;
timeouts are probably best left as read-only for now.
Thanks,
Antonio
>
> Thanks Darrell
>
> On 9/18/17, 3:23 AM, "ovs-dev-bounces at openvswitch.org on behalf of
> antonio.fischetti at intel.com" <ovs-dev-bounces at openvswitch.org on behalf of
> antonio.fischetti at intel.com> wrote:
>
> Read/Write conntrack clean-up interval used by
> the clean_thread_main() thread.
>
> Example:
> ovs-appctl dpctl/ct-set cleanup=4000 # Set a new value
> ovs-appctl dpctl/ct-get cleanup # Read
>
> Signed-off-by: Antonio Fischetti <antonio.fischetti at intel.com>
> ---
> lib/conntrack.c | 27 ++++++++++++++++++++++++---
> lib/conntrack.h | 2 ++
> 2 files changed, 26 insertions(+), 3 deletions(-)
>
> diff --git a/lib/conntrack.c b/lib/conntrack.c
> index 6d86625..60eb376 100644
> --- a/lib/conntrack.c
> +++ b/lib/conntrack.c
> @@ -225,6 +225,9 @@ conn_key_cmp(const struct conn_key *key1, const struct
> conn_key *key2)
> return 1;
> }
>
> +#define CT_CLEAN_INTERVAL 5000 /* 5 seconds */
> +#define CT_CLEAN_MIN_INTERVAL 200 /* 0.2 seconds */
> +
> /* Initializes the connection tracker 'ct'. The caller is responsible for
> * calling 'conntrack_destroy()', when the instance is not needed anymore
> */
> void
> @@ -258,6 +261,7 @@ conntrack_init(struct conntrack *ct)
> ct->hash_basis = random_uint32();
> atomic_count_init(&ct->n_conn, 0);
> atomic_init(&ct->n_conn_limit, DEFAULT_N_CONN_LIMIT);
> + ct->clean_interval = CT_CLEAN_INTERVAL;
> latch_init(&ct->clean_thread_exit);
> ct->clean_thread = ovs_thread_create("ct_clean", clean_thread_main,
> ct);
> }
> @@ -1327,8 +1331,6 @@ next_bucket:
> * behind, there is at least some 200ms blocks of time when buckets will
> be
> * left alone, so the datapath can operate unhindered.
> */
> -#define CT_CLEAN_INTERVAL 5000 /* 5 seconds */
> -#define CT_CLEAN_MIN_INTERVAL 200 /* 0.2 seconds */
>
> static void *
> clean_thread_main(void *f_)
> @@ -1344,7 +1346,7 @@ clean_thread_main(void *f_)
> if (next_wake < now) {
> poll_timer_wait_until(now + CT_CLEAN_MIN_INTERVAL);
> } else {
> - poll_timer_wait_until(MAX(next_wake, now +
> CT_CLEAN_INTERVAL));
> + poll_timer_wait_until(MAX(next_wake, now + ct-
> >clean_interval));
> }
> latch_wait(&ct->clean_thread_exit);
> poll_block();
> @@ -2398,6 +2400,21 @@ conntrack_flush(struct conntrack *ct, const uint16_t
> *zone)
> return 0;
> }
>
> +/* Set an interval value to be used by clean_thread_main. */
> +static int
> +wr_clean_int(struct conntrack *ct, uint32_t new_val) {
> + ct->clean_interval = new_val;
> + VLOG_DBG("Set clean interval to %d", new_val);
> + return 0;
> +}
> +
> +/* Read current clean-up interval used by clean_thread_main. */
> +static int
> +rd_clean_int(struct conntrack *ct, uint32_t *cur_val) {
> + *cur_val = ct->clean_interval;
> + return 0;
> +}
> +
> /* Set a new value for the upper limit of connections. */
> static int
> wr_max_conn(struct conntrack *ct, uint32_t new_val) {
> @@ -2414,11 +2431,15 @@ rd_max_conn(struct conntrack *ct, uint32_t
> *cur_val) {
> }
>
> /* List of managed parameters. */
> +/* Max nr of connections managed by CT module. */
> #define CT_RW_MAX_CONN "maxconn"
> +/* Clean-up interval used by clean_thread_main() thread. */
> +#define CT_RW_CLEAN_INTERVAL "cleanup"
>
> /* List of parameters that can be read/written at run-time. */
> struct ct_wk_params wk_params[] = {
> {CT_RW_MAX_CONN, wr_max_conn, rd_max_conn},
> + {CT_RW_CLEAN_INTERVAL, wr_clean_int, rd_clean_int},
> };
>
> int
> diff --git a/lib/conntrack.h b/lib/conntrack.h
> index 4eb9a9a..ba9d3f1 100644
> --- a/lib/conntrack.h
> +++ b/lib/conntrack.h
> @@ -261,6 +261,8 @@ struct conntrack {
> pthread_t clean_thread;
> /* Latch to destroy the 'clean_thread' */
> struct latch clean_thread_exit;
> + /* Clean interval. */
> + uint32_t clean_interval;
>
> /* Number of connections currently in the connection tracker. */
> atomic_count n_conn;
> --
> 2.4.11
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> https://urldefense.proofpoint.com/v2/url?u=https-
> 3A__mail.openvswitch.org_mailman_listinfo_ovs-
> 2Ddev&d=DwICAg&c=uilaK90D4TOVoH58JNXRgQ&r=BVhFA09CGX7JQ5Ih-
> uZnsw&m=KufLQwhfzaOAv5qQm_yEbJGussIlaYUvadeEqpKvDwQ&s=q6sQTxV7hxR1iqdLjnyaom-
> K3njxys4KHag_KG8uoHM&e=
>
More information about the dev
mailing list