diff --git a/SOURCES/openvswitch-2.13.0.patch b/SOURCES/openvswitch-2.13.0.patch index afa2297..6537811 100644 --- a/SOURCES/openvswitch-2.13.0.patch +++ b/SOURCES/openvswitch-2.13.0.patch @@ -39595,9 +39595,18 @@ index 416cb769d2..47261c7551 100644 } diff --git a/lib/conntrack.c b/lib/conntrack.c -index ff5a89457c..0cbc8f6d2b 100644 +index ff5a89457c..bb98395cd2 100644 --- a/lib/conntrack.c +++ b/lib/conntrack.c +@@ -813,7 +813,7 @@ static void + reverse_nat_packet(struct dp_packet *pkt, const struct conn *conn) + { + char *tail = dp_packet_tail(pkt); +- uint8_t pad = dp_packet_l2_pad_size(pkt); ++ uint16_t pad = dp_packet_l2_pad_size(pkt); + struct conn_key inner_key; + const char *inner_l4 = NULL; + uint16_t orig_l3_ofs = pkt->l3_ofs; @@ -1277,6 +1277,11 @@ process_one(struct conntrack *ct, struct dp_packet *pkt, const struct nat_action_info_t *nat_action_info, ovs_be16 tp_src, ovs_be16 tp_dst, const char *helper) @@ -39623,6 +39632,47 @@ index ff5a89457c..0cbc8f6d2b 100644 free(log_msg); return; } +diff --git a/lib/dp-packet.h b/lib/dp-packet.h +index 9f8991faad..45655af461 100644 +--- a/lib/dp-packet.h ++++ b/lib/dp-packet.h +@@ -81,7 +81,7 @@ struct dp_packet { + + /* All the following elements of this struct are copied in a single call + * of memcpy in dp_packet_clone_with_headroom. */ +- uint8_t l2_pad_size; /* Detected l2 padding size. ++ uint16_t l2_pad_size; /* Detected l2 padding size. + * Padding is non-pullable. */ + uint16_t l2_5_ofs; /* MPLS label stack offset, or UINT16_MAX */ + uint16_t l3_ofs; /* Network-level header offset, +@@ -118,8 +118,8 @@ void *dp_packet_resize_l2(struct dp_packet *, int increment); + void *dp_packet_resize_l2_5(struct dp_packet *, int increment); + static inline void *dp_packet_eth(const struct dp_packet *); + static inline void dp_packet_reset_offsets(struct dp_packet *); +-static inline uint8_t dp_packet_l2_pad_size(const struct dp_packet *); +-static inline void dp_packet_set_l2_pad_size(struct dp_packet *, uint8_t); ++static inline uint16_t dp_packet_l2_pad_size(const struct dp_packet *); ++static inline void dp_packet_set_l2_pad_size(struct dp_packet *, uint16_t); + static inline void *dp_packet_l2_5(const struct dp_packet *); + static inline void dp_packet_set_l2_5(struct dp_packet *, void *); + static inline void *dp_packet_l3(const struct dp_packet *); +@@ -327,14 +327,14 @@ dp_packet_reset_offsets(struct dp_packet *b) + b->l4_ofs = UINT16_MAX; + } + +-static inline uint8_t ++static inline uint16_t + dp_packet_l2_pad_size(const struct dp_packet *b) + { + return b->l2_pad_size; + } + + static inline void +-dp_packet_set_l2_pad_size(struct dp_packet *b, uint8_t pad_size) ++dp_packet_set_l2_pad_size(struct dp_packet *b, uint16_t pad_size) + { + ovs_assert(pad_size <= dp_packet_size(b)); + b->l2_pad_size = pad_size; diff --git a/lib/dpctl.c b/lib/dpctl.c index db2b1f8961..09ae97f25c 100644 --- a/lib/dpctl.c @@ -39649,10 +39699,32 @@ index 68c33a0f96..9b251f81fa 100644 * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c -index d393aab5e3..42e1c44ae8 100644 +index d393aab5e3..1d6b54ff16 100644 --- a/lib/dpif-netdev.c +++ b/lib/dpif-netdev.c -@@ -481,6 +481,12 @@ struct dp_netdev_flow_stats { +@@ -83,9 +83,9 @@ + VLOG_DEFINE_THIS_MODULE(dpif_netdev); + + /* Auto Load Balancing Defaults */ +-#define ALB_ACCEPTABLE_IMPROVEMENT 25 +-#define ALB_PMD_LOAD_THRESHOLD 95 +-#define ALB_PMD_REBALANCE_POLL_INTERVAL 1 /* 1 Min */ ++#define ALB_IMPROVEMENT_THRESHOLD 25 ++#define ALB_LOAD_THRESHOLD 95 ++#define ALB_REBALANCE_INTERVAL 1 /* 1 Min */ + #define MIN_TO_MSEC 60000 + + #define FLOW_DUMP_MAX_BATCH 50 +@@ -294,6 +294,8 @@ struct pmd_auto_lb { + bool is_enabled; /* Current status of Auto load balancing. */ + uint64_t rebalance_intvl; + uint64_t rebalance_poll_timer; ++ uint8_t rebalance_improve_thresh; ++ atomic_uint8_t rebalance_load_thresh; + }; + + /* Datapath based on the network device interface from netdev.h. +@@ -481,6 +483,12 @@ struct dp_netdev_flow_stats { atomic_uint16_t tcp_flags; /* Bitwise-OR of seen tcp_flags values. */ }; @@ -39665,7 +39737,7 @@ index d393aab5e3..42e1c44ae8 100644 /* A flow in 'dp_netdev_pmd_thread's 'flow_table'. * * -@@ -541,6 +547,11 @@ struct dp_netdev_flow { +@@ -541,6 +549,11 @@ struct dp_netdev_flow { /* Statistics. */ struct dp_netdev_flow_stats stats; @@ -39677,7 +39749,7 @@ index d393aab5e3..42e1c44ae8 100644 /* Actions. */ OVSRCU_TYPE(struct dp_netdev_actions *) actions; -@@ -2149,7 +2160,11 @@ dp_netdev_pmd_find_dpcls(struct dp_netdev_pmd_thread *pmd, +@@ -2149,7 +2162,11 @@ dp_netdev_pmd_find_dpcls(struct dp_netdev_pmd_thread *pmd, } #define MAX_FLOW_MARK (UINT32_MAX - 1) @@ -39690,7 +39762,7 @@ index d393aab5e3..42e1c44ae8 100644 struct megaflow_to_mark_data { const struct cmap_node node; -@@ -2175,7 +2190,7 @@ flow_mark_alloc(void) +@@ -2175,7 +2192,7 @@ flow_mark_alloc(void) if (!flow_mark.pool) { /* Haven't initiated yet, do it here */ @@ -39699,7 +39771,7 @@ index d393aab5e3..42e1c44ae8 100644 } if (id_pool_alloc_id(flow_mark.pool, &mark)) { -@@ -2280,6 +2295,12 @@ mark_to_flow_disassociate(struct dp_netdev_pmd_thread *pmd, +@@ -2280,6 +2297,12 @@ mark_to_flow_disassociate(struct dp_netdev_pmd_thread *pmd, struct cmap_node *mark_node = CONST_CAST(struct cmap_node *, &flow->mark_node); @@ -39712,7 +39784,7 @@ index d393aab5e3..42e1c44ae8 100644 cmap_remove(&flow_mark.mark_to_flow, mark_node, hash_int(mark, 0)); flow->mark = INVALID_FLOW_MARK; -@@ -2433,6 +2454,7 @@ dp_netdev_flow_offload_put(struct dp_flow_offload_item *offload) +@@ -2433,6 +2456,7 @@ dp_netdev_flow_offload_put(struct dp_flow_offload_item *offload) mark = flow_mark_alloc(); if (mark == INVALID_FLOW_MARK) { VLOG_ERR("Failed to allocate flow mark!\n"); @@ -39720,7 +39792,7 @@ index d393aab5e3..42e1c44ae8 100644 } } info.flow_mark = mark; -@@ -2512,6 +2534,7 @@ dp_netdev_flow_offload_main(void *data OVS_UNUSED) +@@ -2512,6 +2536,7 @@ dp_netdev_flow_offload_main(void *data OVS_UNUSED) VLOG_DBG("%s to %s netdev flow\n", ret == 0 ? "succeed" : "failed", op); dp_netdev_free_flow_offload(offload); @@ -39728,7 +39800,7 @@ index d393aab5e3..42e1c44ae8 100644 } return NULL; -@@ -3032,9 +3055,56 @@ dp_netdev_pmd_find_flow(const struct dp_netdev_pmd_thread *pmd, +@@ -3032,9 +3057,56 @@ dp_netdev_pmd_find_flow(const struct dp_netdev_pmd_thread *pmd, return NULL; } @@ -39786,7 +39858,7 @@ index d393aab5e3..42e1c44ae8 100644 struct dpif_flow_stats *stats, struct dpif_flow_attrs *attrs) { -@@ -3056,11 +3126,31 @@ dpif_netdev_get_flow_offload_status(const struct dp_netdev *dp, +@@ -3056,11 +3128,31 @@ dpif_netdev_get_flow_offload_status(const struct dp_netdev *dp, } ofpbuf_use_stack(&buf, &act_buf, sizeof act_buf); /* Taking a global 'port_mutex' to fulfill thread safety @@ -39823,7 +39895,7 @@ index d393aab5e3..42e1c44ae8 100644 netdev_close(netdev); if (ret) { return false; -@@ -3329,6 +3419,9 @@ dp_netdev_flow_add(struct dp_netdev_pmd_thread *pmd, +@@ -3329,6 +3421,9 @@ dp_netdev_flow_add(struct dp_netdev_pmd_thread *pmd, /* Do not allocate extra space. */ flow = xmalloc(sizeof *flow - sizeof flow->cr.flow.mf + mask.len); memset(&flow->stats, 0, sizeof flow->stats); @@ -39833,7 +39905,111 @@ index d393aab5e3..42e1c44ae8 100644 flow->dead = false; flow->batch = NULL; flow->mark = INVALID_FLOW_MARK; -@@ -4940,9 +5033,17 @@ reconfigure_datapath(struct dp_netdev *dp) +@@ -3875,11 +3970,12 @@ dpif_netdev_operate(struct dpif *dpif, struct dpif_op **ops, size_t n_ops, + + /* Enable or Disable PMD auto load balancing. */ + static void +-set_pmd_auto_lb(struct dp_netdev *dp) ++set_pmd_auto_lb(struct dp_netdev *dp, bool always_log) + { + unsigned int cnt = 0; + struct dp_netdev_pmd_thread *pmd; + struct pmd_auto_lb *pmd_alb = &dp->pmd_alb; ++ uint8_t rebalance_load_thresh; + + bool enable_alb = false; + bool multi_rxq = false; +@@ -3906,18 +4002,24 @@ set_pmd_auto_lb(struct dp_netdev *dp) + enable_alb = enable_alb && pmd_rxq_assign_cyc && + pmd_alb->auto_lb_requested; + +- if (pmd_alb->is_enabled != enable_alb) { ++ if (pmd_alb->is_enabled != enable_alb || always_log) { + pmd_alb->is_enabled = enable_alb; + if (pmd_alb->is_enabled) { ++ atomic_read_relaxed(&pmd_alb->rebalance_load_thresh, ++ &rebalance_load_thresh); + VLOG_INFO("PMD auto load balance is enabled " +- "(with rebalance interval:%"PRIu64" msec)", +- pmd_alb->rebalance_intvl); ++ "interval %"PRIu64" mins, " ++ "pmd load threshold %"PRIu8"%%, " ++ "improvement threshold %"PRIu8"%%", ++ pmd_alb->rebalance_intvl / MIN_TO_MSEC, ++ rebalance_load_thresh, ++ pmd_alb->rebalance_improve_thresh); ++ + } else { + pmd_alb->rebalance_poll_timer = 0; + VLOG_INFO("PMD auto load balance is disabled"); + } + } +- + } + + /* Applies datapath configuration from the database. Some of the changes are +@@ -3935,6 +4037,9 @@ dpif_netdev_set_config(struct dpif *dpif, const struct smap *other_config) + uint32_t insert_min, cur_min; + uint32_t tx_flush_interval, cur_tx_flush_interval; + uint64_t rebalance_intvl; ++ uint8_t rebalance_load, cur_rebalance_load; ++ uint8_t rebalance_improve; ++ bool log_autolb = false; + + tx_flush_interval = smap_get_int(other_config, "tx-flush-interval", + DEFAULT_TX_FLUSH_INTERVAL); +@@ -4012,7 +4117,7 @@ dpif_netdev_set_config(struct dpif *dpif, const struct smap *other_config) + false); + + rebalance_intvl = smap_get_int(other_config, "pmd-auto-lb-rebal-interval", +- ALB_PMD_REBALANCE_POLL_INTERVAL); ++ ALB_REBALANCE_INTERVAL); + + /* Input is in min, convert it to msec. */ + rebalance_intvl = +@@ -4020,9 +4125,38 @@ dpif_netdev_set_config(struct dpif *dpif, const struct smap *other_config) + + if (pmd_alb->rebalance_intvl != rebalance_intvl) { + pmd_alb->rebalance_intvl = rebalance_intvl; +- } +- +- set_pmd_auto_lb(dp); ++ VLOG_INFO("PMD auto load balance interval set to " ++ "%"PRIu64" mins\n", rebalance_intvl / MIN_TO_MSEC); ++ log_autolb = true; ++ } ++ ++ rebalance_improve = smap_get_int(other_config, ++ "pmd-auto-lb-improvement-threshold", ++ ALB_IMPROVEMENT_THRESHOLD); ++ if (rebalance_improve > 100) { ++ rebalance_improve = ALB_IMPROVEMENT_THRESHOLD; ++ } ++ if (rebalance_improve != pmd_alb->rebalance_improve_thresh) { ++ pmd_alb->rebalance_improve_thresh = rebalance_improve; ++ VLOG_INFO("PMD auto load balance improvement threshold set to " ++ "%"PRIu8"%%", rebalance_improve); ++ log_autolb = true; ++ } ++ ++ rebalance_load = smap_get_int(other_config, "pmd-auto-lb-load-threshold", ++ ALB_LOAD_THRESHOLD); ++ if (rebalance_load > 100) { ++ rebalance_load = ALB_LOAD_THRESHOLD; ++ } ++ atomic_read_relaxed(&pmd_alb->rebalance_load_thresh, &cur_rebalance_load); ++ if (rebalance_load != cur_rebalance_load) { ++ atomic_store_relaxed(&pmd_alb->rebalance_load_thresh, ++ rebalance_load); ++ VLOG_INFO("PMD auto load balance load threshold set to %"PRIu8"%%", ++ rebalance_load); ++ log_autolb = true; ++ } ++ set_pmd_auto_lb(dp, log_autolb); + return 0; + } + +@@ -4940,9 +5074,17 @@ reconfigure_datapath(struct dp_netdev *dp) /* Check for all the ports that need reconfiguration. We cache this in * 'port->need_reconfigure', because netdev_is_reconf_required() can @@ -39853,6 +40029,43 @@ index d393aab5e3..42e1c44ae8 100644 port->need_reconfigure = true; } } +@@ -5076,7 +5218,7 @@ reconfigure_datapath(struct dp_netdev *dp) + reload_affected_pmds(dp); + + /* Check if PMD Auto LB is to be enabled */ +- set_pmd_auto_lb(dp); ++ set_pmd_auto_lb(dp, false); + } + + /* Returns true if one of the netdevs in 'dp' requires a reconfiguration */ +@@ -5320,7 +5462,7 @@ pmd_rebalance_dry_run(struct dp_netdev *dp) + improvement = + ((curr_variance - new_variance) * 100) / curr_variance; + } +- if (improvement < ALB_ACCEPTABLE_IMPROVEMENT) { ++ if (improvement < dp->pmd_alb.rebalance_improve_thresh) { + ret = false; + } + } +@@ -8040,6 +8182,7 @@ dp_netdev_pmd_try_optimize(struct dp_netdev_pmd_thread *pmd, + + if (pmd->ctx.now > pmd->rxq_next_cycle_store) { + uint64_t curr_tsc; ++ uint8_t rebalance_load_trigger; + struct pmd_auto_lb *pmd_alb = &pmd->dp->pmd_alb; + if (pmd_alb->is_enabled && !pmd->isolated + && (pmd->perf_stats.counters.n[PMD_CYCLES_ITER_IDLE] >= +@@ -8056,7 +8199,9 @@ dp_netdev_pmd_try_optimize(struct dp_netdev_pmd_thread *pmd, + pmd_load = ((tot_proc * 100) / (tot_idle + tot_proc)); + } + +- if (pmd_load >= ALB_PMD_LOAD_THRESHOLD) { ++ atomic_read_relaxed(&pmd_alb->rebalance_load_thresh, ++ &rebalance_load_trigger); ++ if (pmd_load >= rebalance_load_trigger) { + atomic_count_inc(&pmd->pmd_overloaded); + } else { + atomic_count_set(&pmd->pmd_overloaded, 0); diff --git a/lib/dpif-netlink.c b/lib/dpif-netlink.c index 5b5c96d727..f9c732886f 100644 --- a/lib/dpif-netlink.c @@ -39886,6 +40099,30 @@ index 5b5c96d727..f9c732886f 100644 if (!del_err) { /* Delete from hw success, so old flow was offloaded. +diff --git a/lib/flow.c b/lib/flow.c +index 45bb96b543..353d5cd3ed 100644 +--- a/lib/flow.c ++++ b/lib/flow.c +@@ -655,7 +655,7 @@ ipv4_sanity_check(const struct ip_header *nh, size_t size, + + tot_len = ntohs(nh->ip_tot_len); + if (OVS_UNLIKELY(tot_len > size || ip_len > tot_len || +- size - tot_len > UINT8_MAX)) { ++ size - tot_len > UINT16_MAX)) { + return false; + } + +@@ -693,8 +693,8 @@ ipv6_sanity_check(const struct ovs_16aligned_ip6_hdr *nh, size_t size) + if (OVS_UNLIKELY(plen + IPV6_HEADER_LEN > size)) { + return false; + } +- /* Jumbo Payload option not supported yet. */ +- if (OVS_UNLIKELY(size - (plen + IPV6_HEADER_LEN) > UINT8_MAX)) { ++ ++ if (OVS_UNLIKELY(size - (plen + IPV6_HEADER_LEN) > UINT16_MAX)) { + return false; + } + diff --git a/lib/jsonrpc.c b/lib/jsonrpc.c index ed748dbde7..e74771e2bc 100644 --- a/lib/jsonrpc.c @@ -40055,7 +40292,7 @@ index a44114e8dc..d75d66b863 100644 #endif /* jsonrpc.h */ diff --git a/lib/lldp/lldp.c b/lib/lldp/lldp.c -index 74f747fcdc..e5755307fb 100644 +index 74f747fcdc..18afbab9a7 100644 --- a/lib/lldp/lldp.c +++ b/lib/lldp/lldp.c @@ -59,7 +59,7 @@ VLOG_DEFINE_THIS_MODULE(lldp); @@ -40166,7 +40403,21 @@ index 74f747fcdc..e5755307fb 100644 CHECK_TLV_SIZE(2, "TTL"); chassis->c_ttl = PEEK_UINT16; ttl_received = true; -@@ -481,6 +530,11 @@ lldp_decode(struct lldpd *cfg OVS_UNUSED, char *frame, int s, +@@ -464,10 +513,13 @@ lldp_decode(struct lldpd *cfg OVS_UNUSED, char *frame, int s, + b = xzalloc(tlv_size + 1); + PEEK_BYTES(b, tlv_size); + if (tlv_type == LLDP_TLV_PORT_DESCR) { ++ free(port->p_descr); + port->p_descr = b; + } else if (tlv_type == LLDP_TLV_SYSTEM_NAME) { ++ free(chassis->c_name); + chassis->c_name = b; + } else { ++ free(chassis->c_descr); + chassis->c_descr = b; + } + break; +@@ -481,6 +533,11 @@ lldp_decode(struct lldpd *cfg OVS_UNUSED, char *frame, int s, case LLDP_TLV_MGMT_ADDR: CHECK_TLV_SIZE(1, "Management address"); addr_str_length = PEEK_UINT8; @@ -40178,7 +40429,7 @@ index 74f747fcdc..e5755307fb 100644 CHECK_TLV_SIZE(1 + addr_str_length, "Management address"); PEEK_BYTES(addr_str_buffer, addr_str_length); addr_length = addr_str_length - 1; -@@ -505,7 +559,7 @@ lldp_decode(struct lldpd *cfg OVS_UNUSED, char *frame, int s, +@@ -505,7 +562,7 @@ lldp_decode(struct lldpd *cfg OVS_UNUSED, char *frame, int s, break; case LLDP_TLV_ORG: @@ -40187,7 +40438,7 @@ index 74f747fcdc..e5755307fb 100644 PEEK_BYTES(orgid, sizeof orgid); tlv_subtype = PEEK_UINT8; if (memcmp(dot1, orgid, sizeof orgid) == 0) { -@@ -625,6 +679,7 @@ lldp_decode(struct lldpd *cfg OVS_UNUSED, char *frame, int s, +@@ -625,6 +682,7 @@ lldp_decode(struct lldpd *cfg OVS_UNUSED, char *frame, int s, VLOG_WARN("unknown tlv (%d) received on %s", tlv_type, hardware->h_ifname); @@ -43566,6 +43817,50 @@ index d48463e263..904f1381c7 100644 +OVS_APP_EXIT_AND_WAIT([ovs-vswitchd]) +OVS_APP_EXIT_AND_WAIT([ovsdb-server]) +AT_CLEANUP +diff --git a/tests/classifier.at b/tests/classifier.at +index 88818618be..cdcd72c156 100644 +--- a/tests/classifier.at ++++ b/tests/classifier.at +@@ -304,3 +304,39 @@ ovs-ofctl: "conjunction" actions may be used along with "note" but not any other + ]) + OVS_VSWITCHD_STOP + AT_CLEANUP ++ ++# Flow classifier a packet with excess of padding. ++AT_SETUP([flow classifier - packet with extra padding]) ++OVS_VSWITCHD_START ++add_of_ports br0 1 2 ++AT_DATA([flows.txt], [dnl ++priority=5,ip,ip_dst=1.1.1.1,actions=1 ++priority=5,ip,ip_dst=1.1.1.2,actions=2 ++priority=0,actions=drop ++]) ++AT_CHECK([ovs-ofctl add-flows br0 flows.txt]) ++packet=00020202020000010101010008004500001c00010000401176cc01010101010101020d6a00350008ee3a ++AT_CHECK([ovs-appctl ofproto/trace br0 in_port=1 $packet] , [0], [stdout]) ++AT_CHECK([tail -2 stdout], [0], ++ [Megaflow: recirc_id=0,eth,ip,in_port=1,nw_dst=1.1.1.2,nw_frag=no ++Datapath actions: 2 ++]) ++# normal packet plus 255 bytes of padding (8bit padding). ++# 255 * 2 = 510 ++padding=$(printf '%*s' 510 | tr ' ' '0') ++AT_CHECK([ovs-appctl ofproto/trace br0 in_port=1 ${packet}${padding}] , [0], [stdout]) ++AT_CHECK([tail -2 stdout], [0], ++ [Megaflow: recirc_id=0,eth,ip,in_port=1,nw_dst=1.1.1.2,nw_frag=no ++Datapath actions: 2 ++]) ++# normal packet plus padding up to 65535 bytes of length (16bit limit). ++# 65535 - 43 = 65492 ++# 65492 * 2 = 130984 ++padding=$(printf '%*s' 130984 | tr ' ' '0') ++AT_CHECK([ovs-appctl ofproto/trace br0 in_port=1 ${packet}${padding}], [0], [stdout]) ++AT_CHECK([tail -2 stdout], [0], ++ [Megaflow: recirc_id=0,eth,ip,in_port=1,nw_dst=1.1.1.2,nw_frag=no ++Datapath actions: 2 ++]) ++OVS_VSWITCHD_STOP ++AT_CLEANUP diff --git a/tests/dpif-netdev.at b/tests/dpif-netdev.at index 0aeb4e788f..1651e02d29 100644 --- a/tests/dpif-netdev.at @@ -45432,6 +45727,55 @@ index e591c26a6c..ce348b9d16 100644 } } +diff --git a/vswitchd/vswitch.xml b/vswitchd/vswitch.xml +index 3ddaaefda8..9f07ec9b22 100644 +--- a/vswitchd/vswitch.xml ++++ b/vswitchd/vswitch.xml +@@ -653,8 +653,9 @@ + type='{"type": "boolean"}'> +

+ Configures PMD Auto Load Balancing that allows automatic assignment of +- RX queues to PMDs if any of PMDs is overloaded (i.e. processing cycles +- > 95%). ++ RX queues to PMDs if any of PMDs is overloaded (i.e. a processing ++ cycles > ++ ). +

+

+ It uses current scheme of cycle based assignment of RX queues that +@@ -690,6 +691,32 @@ + once in few hours or a day or a week. +

+ ++ ++

++ Specifies the minimum PMD thread load threshold (% of used cycles) of ++ any non-isolated PMD threads when a PMD Auto Load Balance may be ++ triggered. ++

++

++ The default value is 95%. ++

++
++ ++

++ Specifies the minimum evaluated % improvement in load distribution ++ across the non-isolated PMD threads that will allow a PMD Auto Load ++ Balance to occur. ++

++

++ Note, setting this parameter to 0 will always allow an auto load ++ balance to occur regardless of estimated improvement or not. ++

++

++ The default value is 25%. ++

++
+ +

diff --git a/xenserver/etc_xapi.d_plugins_openvswitch-cfg-update b/xenserver/etc_xapi.d_plugins_openvswitch-cfg-update index e7404e3b00..b8db881949 100755 --- a/xenserver/etc_xapi.d_plugins_openvswitch-cfg-update diff --git a/SPECS/openvswitch2.13.spec b/SPECS/openvswitch2.13.spec index 49ff927..6745df9 100644 --- a/SPECS/openvswitch2.13.spec +++ b/SPECS/openvswitch2.13.spec @@ -31,11 +31,8 @@ # FIXME Test "STP - flush the fdb and mdb when topology changed" fails on s390x # FIXME 2 tests fails on ppc64le. They will be hopefully fixed before official 2.11 -# Disable Tests due to https://bugs.centos.org/view.php?id=16969, tests failing -# as build is running on CentOS7 builder, once builders are CentOS8 based tests can -# be re enabled. %ifarch %{ix86} x86_64 aarch64 -%bcond_with check +%bcond_without check %else %bcond_with check %endif @@ -62,7 +59,7 @@ Summary: Open vSwitch Group: System Environment/Daemons daemon/database/utilities URL: http://www.openvswitch.org/ Version: 2.13.0 -Release: 79%{?commit0:.%{date}git%{shortcommit0}}%{?commit1:dpdk%{shortcommit1}}%{?dist} +Release: 79.5%{?commit0:.%{date}git%{shortcommit0}}%{?commit1:dpdk%{shortcommit1}}%{?dist} # Nearly all of openvswitch is ASL 2.0. The bugtool is LGPLv2+, and the # lib/sflow*.[ch] files are SISSL @@ -706,6 +703,26 @@ exit 0 %endif %changelog +* Thu Feb 04 2021 Timothy Redaelli - 2.13.0-79.5 +- lldp: do not leak memory on multiple instances of TLVs + [5a1158c1bbca87260491048219d08189b2367797] + +* Thu Feb 04 2021 Timothy Redaelli - 2.13.0-79.4 +- flow: Support extra padding length. + [c9ada1e1249d7729954c4154f0cc7bd375f40686] + +* Tue Feb 02 2021 Timothy Redaelli - 2.13.0-79.3 +- dpif-netdev: Add PMD auto load balance status log. + [793de3fd0a2b32dc7f45d4e9f01daa419b144013] + +* Tue Feb 02 2021 Timothy Redaelli - 2.13.0-79.2 +- dpif-netdev: Add parameters to configure PMD auto load balance. + [75555d8352c7151ec5dd02653ac820229775caf2] + +* Tue Feb 02 2021 Timothy Redaelli - 2.13.0-79.1 +- dpif-netdev: Add log for PMD auto load balance interval parameter. + [f22c01de8773a60069e2371fb110fc207756dcd4] + * Wed Jan 06 2021 Open vSwitch CI - 2.13.0-79 - Merging upstream branch-2.13 [86c9f9af773d8564a7d26e4e80fba389617fab17]