Hello,justin
Forgive me! I have another question. As OVN use meters to
implement QoS and meters was added from ovs2.10, how the ovn(<2.10) support
QoS?
Regards,
Yunxiang
At 2019-01-28 15:43:24, "Justin Pettit" <[email protected]> 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 <[email protected]> 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" <[email protected]> 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 <[email protected]> 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" <[email protected]> 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 <[email protected]> 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/[email protected]/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
>> >> >> [email protected]
>> >> >> https://mail.openvswitch.org/mailman/listinfo/ovs-discuss
>> >>
>>
_______________________________________________
discuss mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-discuss