[ovs-dev] [PATCH V2] ovsdb: Add new column to set the maximum number of worker threads

Ethan Jackson ethan at nicira.com
Wed Aug 14 01:18:15 UTC 2013


I'm having a look at it.

On Thu, Aug 8, 2013 at 6:42 AM, Alex Wang <alexw at nicira.com> wrote:
> Hey Ben,
>
> Could you help review this patch?
>
> Kind Regards,
> Alex Wang,
>
>
> On Wed, Aug 7, 2013 at 3:51 PM, Alex Wang <alexw at nicira.com> wrote:
>>
>> This commit adds a new column "n-worker-threads" to ovsdb Open_vSwitch
>> TABLE. This is used to set the maximum number of worker threads that
>> can be created. The upper bound of this value is either (number of
>> online cores - 2) or 1 (if number is less than 3).
>>
>> Signed-off-by: Alex Wang <alexw at nicira.com>
>> ---
>>
>> v1 -> v2:
>>
>> - fix a grammatical mistake.
>>
>> ---
>>  ofproto/ofproto.c    |   16 ++++++++++++++++
>>  ofproto/ofproto.h    |    3 +++
>>  vswitchd/bridge.c    |    4 ++++
>>  vswitchd/vswitch.xml |    9 +++++++++
>>  4 files changed, 32 insertions(+)
>>
>> diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c
>> index 0625ccf..6989263 100644
>> --- a/ofproto/ofproto.c
>> +++ b/ofproto/ofproto.c
>> @@ -21,6 +21,7 @@
>>  #include <inttypes.h>
>>  #include <stdbool.h>
>>  #include <stdlib.h>
>> +#include <unistd.h>
>>  #include "bitmap.h"
>>  #include "byte-order.h"
>>  #include "classifier.h"
>> @@ -224,6 +225,7 @@ static size_t n_ofproto_classes;
>>  static size_t allocated_ofproto_classes;
>>
>>  unsigned flow_eviction_threshold =
>> OFPROTO_FLOW_EVICTION_THRESHOLD_DEFAULT;
>> +unsigned n_worker_threads = OFPROTO_N_WORKER_THREADS_DEFAULT;
>>  enum ofproto_flow_miss_model flow_miss_model = OFPROTO_HANDLE_MISS_AUTO;
>>
>>  /* Map from datapath name to struct ofproto, for use by unixctl commands.
>> */
>> @@ -622,6 +624,20 @@ ofproto_set_mac_table_config(struct ofproto *ofproto,
>> unsigned idle_time,
>>      }
>>  }
>>
>> +/* Sets maximum number of worker threads allowed. The upper limit is
>> + * (number of online cores - 2) or 1 (if the number is less than 3). */
>> +void
>> +ofproto_set_n_worker_threads(unsigned limit)
>> +{
>> +    unsigned max_online_cores = sysconf(_SC_NPROCESSORS_ONLN);
>> +
>> +    if (limit > max_online_cores - 2) {
>> +        n_worker_threads = MAX(1, max_online_cores - 2);
>> +    } else {
>> +        n_worker_threads = limit;
>> +    }
>> +}
>> +
>>  void
>>  ofproto_set_dp_desc(struct ofproto *p, const char *dp_desc)
>>  {
>> diff --git a/ofproto/ofproto.h b/ofproto/ofproto.h
>> index 1bde385..73fb101 100644
>> --- a/ofproto/ofproto.h
>> +++ b/ofproto/ofproto.h
>> @@ -215,6 +215,8 @@ int ofproto_port_dump_done(struct ofproto_port_dump
>> *);
>>  #define OFPROTO_FLOW_EVICTION_THRESHOLD_DEFAULT  2500
>>  #define OFPROTO_FLOW_EVICTION_THRESHOLD_MIN 100
>>
>> +#define OFPROTO_N_WORKER_THREADS_DEFAULT  1
>> +
>>  /* How flow misses should be handled in ofproto-dpif */
>>  enum ofproto_flow_miss_model {
>>      OFPROTO_HANDLE_MISS_AUTO,           /* Based on flow eviction
>> threshold. */
>> @@ -247,6 +249,7 @@ void ofproto_set_flow_miss_model(unsigned model);
>>  void ofproto_set_forward_bpdu(struct ofproto *, bool forward_bpdu);
>>  void ofproto_set_mac_table_config(struct ofproto *, unsigned idle_time,
>>                                    size_t max_entries);
>> +void ofproto_set_n_worker_threads(unsigned limit);
>>  void ofproto_set_dp_desc(struct ofproto *, const char *dp_desc);
>>  int ofproto_set_snoops(struct ofproto *, const struct sset *snoops);
>>  int ofproto_set_netflow(struct ofproto *,
>> diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c
>> index abbda56..cfb633d 100644
>> --- a/vswitchd/bridge.c
>> +++ b/vswitchd/bridge.c
>> @@ -502,6 +502,10 @@ bridge_reconfigure(const struct ovsrec_open_vswitch
>> *ovs_cfg)
>>          smap_get_int(&ovs_cfg->other_config, "flow-eviction-threshold",
>>                       OFPROTO_FLOW_EVICTION_THRESHOLD_DEFAULT));
>>
>> +    ofproto_set_n_worker_threads(
>> +        smap_get_int(&ovs_cfg->other_config, "n-worker-threads",
>> +                     OFPROTO_N_WORKER_THREADS_DEFAULT));
>> +
>>      bridge_configure_flow_miss_model(smap_get(&ovs_cfg->other_config,
>>                                                "force-miss-model"));
>>
>> diff --git a/vswitchd/vswitch.xml b/vswitchd/vswitch.xml
>> index b89d58c..d58a9ba 100644
>> --- a/vswitchd/vswitch.xml
>> +++ b/vswitchd/vswitch.xml
>> @@ -158,6 +158,15 @@
>>            </dl>
>>          </p>
>>        </column>
>> +
>> +      <column name="other_config" key="n-worker-threads"
>> +              type='{"type": "integer", "minInteger": 1}'>
>> +        <p>
>> +          Specifies the maximum number of worker threads that can be
>> created.
>> +          The upper limit is (number of online core - 2) or 1 if there
>> are
>> +          fewer than 3 online cores.
>> +        </p>
>> +      </column>
>>      </group>
>>
>>      <group title="Status">
>> --
>> 1.7.9.5
>>
>
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
>
X-CudaMail-Whitelist-To: dev at openvswitch.org



More information about the dev mailing list