Message ID | 20230421151651.3032616-3-amorenoz@redhat.com |
---|---|
State | Changes Requested |
Headers | show |
Series | Improve linux QoS for exotic and fast links | expand |
Context | Check | Description |
---|---|---|
ovsrobot/apply-robot | success | apply and check: success |
ovsrobot/github-robot-_Build_and_Test | success | github build: passed |
ovsrobot/intel-ovs-compilation | success | test: success |
On 4/21/23 17:16, Adrian Moreno wrote: > Instead of relying on feature bits, use the speed value directly as > maximum rate for htb and hfsc classes. > > There is still a limitation with the maximum rate that we can express > with a 32-bit number in bytes/s (~ 34.3Gbps), but using the actual link speed > instead of the feature bits, we can at least use an accurate maximum for > some link speeds (such as 25Gbps) which are not supported by netdev's feature > bits. > > Signed-off-by: Adrian Moreno <amorenoz@redhat.com> > --- > lib/netdev-linux.c | 14 ++++++-------- > 1 file changed, 6 insertions(+), 8 deletions(-) > > diff --git a/lib/netdev-linux.c b/lib/netdev-linux.c > index 576adbf3f..6d5cf8114 100644 > --- a/lib/netdev-linux.c > +++ b/lib/netdev-linux.c > @@ -4744,11 +4744,10 @@ htb_parse_qdisc_details__(struct netdev *netdev_, > > hc->max_rate = smap_get_ullong(details, "max-rate", 0) / 8; > if (!hc->max_rate) { > - enum netdev_features current; > - > netdev_linux_read_features(netdev); > - current = !netdev->get_features_error ? netdev->current : 0; > - hc->max_rate = netdev_features_to_bps(current, NETDEV_DEFAULT_BPS) / 8; > + hc->max_rate = !netdev->get_features_error > + ? (uint64_t) netdev->speed / 8 * 1000000 > + : NETDEV_DEFAULT_BPS / 8; Indentation to the position of the condition. > } > hc->min_rate = hc->max_rate; > hc->burst = 0; > @@ -5216,11 +5215,10 @@ hfsc_parse_qdisc_details__(struct netdev *netdev_, const struct smap *details, > > uint32_t max_rate = smap_get_ullong(details, "max-rate", 0) / 8; > if (!max_rate) { > - enum netdev_features current; > - > netdev_linux_read_features(netdev); > - current = !netdev->get_features_error ? netdev->current : 0; > - max_rate = netdev_features_to_bps(current, NETDEV_DEFAULT_BPS) / 8; > + max_rate = !netdev->get_features_error > + ? (uint64_t) netdev->speed / 8 * 1000000 > + : NETDEV_DEFAULT_BPS / 8; Same here. > } > > class->min_rate = max_rate;
diff --git a/lib/netdev-linux.c b/lib/netdev-linux.c index 576adbf3f..6d5cf8114 100644 --- a/lib/netdev-linux.c +++ b/lib/netdev-linux.c @@ -4744,11 +4744,10 @@ htb_parse_qdisc_details__(struct netdev *netdev_, hc->max_rate = smap_get_ullong(details, "max-rate", 0) / 8; if (!hc->max_rate) { - enum netdev_features current; - netdev_linux_read_features(netdev); - current = !netdev->get_features_error ? netdev->current : 0; - hc->max_rate = netdev_features_to_bps(current, NETDEV_DEFAULT_BPS) / 8; + hc->max_rate = !netdev->get_features_error + ? (uint64_t) netdev->speed / 8 * 1000000 + : NETDEV_DEFAULT_BPS / 8; } hc->min_rate = hc->max_rate; hc->burst = 0; @@ -5216,11 +5215,10 @@ hfsc_parse_qdisc_details__(struct netdev *netdev_, const struct smap *details, uint32_t max_rate = smap_get_ullong(details, "max-rate", 0) / 8; if (!max_rate) { - enum netdev_features current; - netdev_linux_read_features(netdev); - current = !netdev->get_features_error ? netdev->current : 0; - max_rate = netdev_features_to_bps(current, NETDEV_DEFAULT_BPS) / 8; + max_rate = !netdev->get_features_error + ? (uint64_t) netdev->speed / 8 * 1000000 + : NETDEV_DEFAULT_BPS / 8; } class->min_rate = max_rate;
Instead of relying on feature bits, use the speed value directly as maximum rate for htb and hfsc classes. There is still a limitation with the maximum rate that we can express with a 32-bit number in bytes/s (~ 34.3Gbps), but using the actual link speed instead of the feature bits, we can at least use an accurate maximum for some link speeds (such as 25Gbps) which are not supported by netdev's feature bits. Signed-off-by: Adrian Moreno <amorenoz@redhat.com> --- lib/netdev-linux.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-)