[ovs-discuss] which kernel module patch could repair the support of meter

taoyunupt taoyunupt at 126.com
Mon Jan 28 07:51:57 UTC 2019


Thanks justin!
You have gives me a great help!
Regards,
Yunxiang








At 2019-01-28 15:43:24, "Justin Pettit" <jpettit at ovn.org> wrote:
>Sorry, I was thinking of another system that used OVS's tc instead of meters to implement basic QoS.  OVN does use meters to implement most modes of QoS.  If you don't want to use meters, you could try looking at the "qos_max_rate" and "qos_burst" options in the ovn-nb man page, but I don't have any experience using them.
>
>--Justin
>
>
>> On Jan 27, 2019, at 11:26 PM, taoyunupt <taoyunupt at 126.com> wrote:
>> 
>> The method build_qos in  /ovn/northd/ovn-northd.c is as fellows,in the end of the method,it  adds logical flow by the code of
>> ovn_lflow_add(lflows, od, stage,qos->priority,qos->match, ds_cstr(&meter_action));
>> 
>> Does this mean the meter table is the only way for ovn to add Qos?
>> 
>>                           
>> 
>> build_qos(struct ovn_datapath *od, struct hmap *lflows) {
>>     ovn_lflow_add(lflows, od, S_SWITCH_IN_QOS_MARK, 0, "1", "next;");
>>     ovn_lflow_add(lflows, od, S_SWITCH_OUT_QOS_MARK, 0, "1", "next;");
>>     ovn_lflow_add(lflows, od, S_SWITCH_IN_QOS_METER, 0, "1", "next;");
>>     ovn_lflow_add(lflows, od, S_SWITCH_OUT_QOS_METER, 0, "1", "next;");
>> 
>>     for (size_t i = 0; i < od->nbs->n_qos_rules; i++) {
>>         struct nbrec_qos *qos = od->nbs->qos_rules[i];
>>         bool ingress = !strcmp(qos->direction, "from-lport") ? true :false;
>>         enum ovn_stage stage = ingress ? S_SWITCH_IN_QOS_MARK : S_SWITCH_OUT_QOS_MARK;
>>         int64_t rate = 0;
>>         int64_t burst = 0;
>> 
>>         for (size_t j = 0; j < qos->n_action; j++) {
>>             if (!strcmp(qos->key_action[j], "dscp")) {
>>                 struct ds dscp_action = DS_EMPTY_INITIALIZER;
>> 
>>                 ds_put_format(&dscp_action, "ip.dscp = %"PRId64"; next;",
>>                               qos->value_action[j]);
>>                 ovn_lflow_add(lflows, od, stage,
>>                               qos->priority,
>>                               qos->match, ds_cstr(&dscp_action));
>>                 ds_destroy(&dscp_action);
>>             }
>>         }
>> 
>>         for (size_t n = 0; n < qos->n_bandwidth; n++) {
>>             if (!strcmp(qos->key_bandwidth[n], "rate")) {
>>                 rate = qos->value_bandwidth[n];
>>             } else if (!strcmp(qos->key_bandwidth[n], "burst")) {
>>                 burst = qos->value_bandwidth[n];
>>             }
>>         }
>>         if (rate) {
>>             struct ds meter_action = DS_EMPTY_INITIALIZER;
>>             stage = ingress ? S_SWITCH_IN_QOS_METER : S_SWITCH_OUT_QOS_METER;
>>             if (burst) {
>>                 ds_put_format(&meter_action,
>>                               "set_meter(%"PRId64", %"PRId64"); next;",
>>                               rate, burst);
>>             } else {
>>                 ds_put_format(&meter_action,
>>                               "set_meter(%"PRId64"); next;",
>>                               rate);
>>             }
>> 
>>             /* Ingress and Egress QoS Meter Table.
>>              *
>>              * We limit the bandwidth of this flow by adding a meter table.
>>              */
>>             ovn_lflow_add(lflows, od, stage,
>>                           qos->priority,
>>                           qos->match, ds_cstr(&meter_action));
>>             ds_destroy(&meter_action);
>>         }
>>     }
>> }
>> 
>> 
>> 
>> 
>> 
>> At 2019-01-28 15:15:51, "Justin Pettit" <jpettit at ovn.org> wrote:
>> >QoS is most likely using the kernel's built-in traffic-shaping algorithms in tc.  Those should work the same on all supported kernels.
>> >
>> >--Justin
>> >
>> >
>> >> On Jan 27, 2019, at 11:10 PM, taoyunupt <taoyunupt at 126.com> wrote:
>> >> 
>> >> 
>> >> Thanks justin,
>> >> 
>> >> My environment is OVS for the OVN/openstack.I also want to know ,if i must use meter for the  openstack/ovn feature 'Qos'.Does any other methods to achive this?
>> >> 
>> >> Regards,
>> >> Yunxiang
>> >> 
>> >> 
>> >> 
>> >> 
>> >> 
>> >> At 2019-01-28 14:58:19, "Justin Pettit" <jpettit at ovn.org> wrote:
>> >> >This is the patch:
>> >> >
>> >> >	http://patchwork.ozlabs.org/patch/950513/
>> >> >
>> >> >I think it was only broken in kernels 4.15, 4.16, and 4.17.  I expect that 4.20 will be fine.
>> >> >
>> >> >--Justin
>> >> >
>> >> >
>> >> >> On Jan 27, 2019, at 10:16 PM, taoyunupt <taoyunupt at 126.com> wrote:
>> >> >> 
>> >> >> Hello,justin,
>> >> >>          I  met a supporting problem of meter of OVS 2.10. I found a mail from you,after searching the internet.The address of this mail is "https://www.mail-archive.com/ovs-discuss@openvswitch.org/msg04180.html"
>> >> >>          The kernel version of  "4.20.5-1.el7.elrepo.x86_64" goes well with meter table of ovs,but I want to know how to fit the  maintained older kernels.
>> >> >>          If i want to use ovs with maintained older kernels,which patch you metioned in the mail, should i import ?
>> >> >> 
>> >> >> 
>> >> >> 
>> >> >> 
>> >> >> Regards,
>> >> >> yunxiang
>> >> >> 
>> >> >> _______________________________________________
>> >> >> discuss mailing list
>> >> >> discuss at openvswitch.org
>> >> >> https://mail.openvswitch.org/mailman/listinfo/ovs-discuss
>> >> 
>> 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openvswitch.org/pipermail/ovs-discuss/attachments/20190128/7a60cc37/attachment.html>


More information about the discuss mailing list