On Wed, Feb 1, 2017 at 12:22 PM, Ben Pfaff <b...@ovn.org> wrote:

> Until now, ovn-controller has unconditionally configured linux-htb on
> physical interfaces.  QoS is pretty much always trouble, but it's even more
> trouble if we set it up for no good reason.  We received a bug report, in
> particular, that doing this disrupts connectivity in Docker.
>

This isn't related to this commit, but last time I was looking at this I
noticed that QoS also doesn't work when traffic leaves the host on a
physical network (via a logical switch with a localnet port) instead of via
a tunnel.  It also doesn't work between ports on the same host, but I'm not
sure if that really matters.


> This commit attempts to make that less likely, by making ovn-controller
> only configure a qdisc if QoS support has in turn been configured in OVN.
> The same problems as before will recur if QoS support is actually
> configured, but at least now there's some purpose, and possibly a symptom
> that the user can better diagnose ("I turned on QoS and OVN stopped
> working" is at least a cause-and-effect chain that makes some sense).
>
> Reported-by: Ritesh Rekhi <ritesh.re...@nutanix.com>
> Reported-by: Hexin Wang <hexin.w...@nutanix.com>
> Reported-at: https://mail.openvswitch.org/pipermail/ovs-discuss/2017-
> February/043564.html
> Signed-off-by: Ben Pfaff <b...@ovn.org>
> ---
>  ovn/controller/binding.c | 41 +++++++++++++++++++++++++++++++++++------
>  1 file changed, 35 insertions(+), 6 deletions(-)
>

Acked-by: Russell Bryant <russ...@ovn.org>

but note the comment inline ...


> @@ -257,12 +268,30 @@ setup_qos(const char *egress_iface, struct hmap
> *queue_map)
>      }
>      smap_destroy(&qdisc_details);
>
> -    if (strcmp(qdisc_type, OVN_QOS_TYPE)) {
> -        error = netdev_set_qos(netdev_phy, OVN_QOS_TYPE, NULL);
> -        if (error) {
> -            VLOG_WARN_RL(&rl, "%s: could not configure QoS (%s)",
> -                         egress_iface, ovs_strerror(error));
> +    /* If we're not actually being requested to do any QoS:
> +     *
> +     *     - If the current qdisc type is OVN_QOS_TYPE, then we clear the
> qdisc
> +     *       type to "".  Otherwise, it's possible that our own leftover
> qdisc
> +     *       settings could cause strange behavior on egress.  Also, QoS
> is
> +     *       expensive and may waste CPU time even if it's not really in
> use.
> +     *
> +     *       OVN isn't the only software that can configure qdiscs, and
> +     *       physical interfaces are shared resources, so there is some
> risk in
> +     *       this strategy: we could disrupt some other program's QoS.
> +     *       Probably, to entirely avoid this possibility we would need
> to add
> +     *       a configuration setting.
> +     *
> +     *     - Otherwise leave the qdisc alone. */
> +    if (hmap_is_empty(queue_map)) {
> +        if (!strcmp(qdisc_type, OVN_QOS_TYPE)) {
> +            set_qos_type(netdev_phy, "");
>          }
>

I think we need a netdev_close(netdev_phy); here.

There's also another "return;" where netdev_close was missed in the code
just above these changes in the same function.

Otherwise, lgtm.


> +        return;
> +    }
> +
> +    /* Configure qdisc. */
> +    if (strcmp(qdisc_type, OVN_QOS_TYPE)) {
> +        set_qos_type(netdev_phy, OVN_QOS_TYPE);
>      }
>
>      /* Check and delete if needed. */
> --
> 2.10.2
>
> _______________________________________________
> dev mailing list
> d...@openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>



-- 
Russell Bryant
_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to