Make L3 IP tc filter rate limit more accurate
Currently the L3 agent qos extension does not set the mtu for
tc filter rules, the default value is 2kb. Tc filter rules use
such mtu will result in an inaccurate bandwidth.
So in order to improve the precision, we set the mtu to 64kb.
For the test results, you can read the bug description.
For more information you can read the linux tc man page:
[1] https://linux.die.net/man/8/tc-tbf
[2] http://man7.org/linux/man-pages/man8/tc-police.8.html
Closes-Bug: #1777598
Change-Id: I7a167ec6139ccc55988b34f82080a182116d02a3
(cherry picked from commit 5ddb2a4762
)
This commit is contained in:
parent
3d5cea9dbd
commit
c5e8d77430
|
@ -40,8 +40,8 @@ l3_tc_add_qdisc_ingress: RegExpFilter, tc, root, tc, qdisc, add, dev, .+, ingres
|
|||
l3_tc_add_qdisc_egress: RegExpFilter, tc, root, tc, qdisc, add, dev, .+, root, handle, 1:, htb
|
||||
l3_tc_show_filters: RegExpFilter, tc, root, tc, -p, -s, -d, filter, show, dev, .+, parent, .+, prio, 1
|
||||
l3_tc_delete_filters: RegExpFilter, tc, root, tc, filter, del, dev, .+, parent, .+, prio, 1, handle, .+, u32
|
||||
l3_tc_add_filter_ingress: RegExpFilter, tc, root, tc, filter, add, dev, .+, parent, .+, protocol, ip, prio, 1, u32, match, ip, dst, .+, police, rate, .+, burst, .+, drop, flowid, :1
|
||||
l3_tc_add_filter_egress: RegExpFilter, tc, root, tc, filter, add, dev, .+, parent, .+, protocol, ip, prio, 1, u32, match, ip, src, .+, police, rate, .+, burst, .+, drop, flowid, :1
|
||||
l3_tc_add_filter_ingress: RegExpFilter, tc, root, tc, filter, add, dev, .+, parent, .+, protocol, ip, prio, 1, u32, match, ip, dst, .+, police, rate, .+, burst, .+, mtu, 64kb, drop, flowid, :1
|
||||
l3_tc_add_filter_egress: RegExpFilter, tc, root, tc, filter, add, dev, .+, parent, .+, protocol, ip, prio, 1, u32, match, ip, src, .+, police, rate, .+, burst, .+, mtu, 64kb, drop, flowid, :1
|
||||
|
||||
# For ip monitor
|
||||
kill_ip_monitor: KillFilter, root, ip, -9
|
||||
|
|
|
@ -117,7 +117,7 @@ class FloatingIPTcCommandBase(ip_lib.IPDevice):
|
|||
_match = 'src' if direction == constants.EGRESS_DIRECTION else 'dst'
|
||||
match = ['u32', 'match', 'ip', _match, ip]
|
||||
police = ['police', 'rate', rate_value, 'burst', burst_value,
|
||||
'drop', 'flowid', ':1']
|
||||
'mtu', '64kb', 'drop', 'flowid', ':1']
|
||||
args = protocol + prio + match + police
|
||||
cmd = ['filter', 'add', 'dev', self.name,
|
||||
'parent', qdisc_id] + args
|
||||
|
|
|
@ -227,7 +227,7 @@ class TestFloatingIPTcCommandBase(base.BaseTestCase):
|
|||
prio = ['prio', 1]
|
||||
match = ['u32', 'match', 'ip', 'dst', FLOATING_IP_1]
|
||||
police = ['police', 'rate', '1kbit', 'burst', '1kbit',
|
||||
'drop', 'flowid', ':1']
|
||||
'mtu', '64kb', 'drop', 'flowid', ':1']
|
||||
args = protocol + prio + match + police
|
||||
cmd = ['tc', 'filter', 'add', 'dev', FLOATING_IP_DEVICE_NAME,
|
||||
'parent', INGRESS_QSIC_ID] + args
|
||||
|
@ -329,7 +329,7 @@ class TestFloatingIPTcCommand(base.BaseTestCase):
|
|||
_match = 'dst'
|
||||
match = ['u32', 'match', 'ip', _match, ip]
|
||||
police = ['police', 'rate', '1kbit', 'burst', '1kbit',
|
||||
'drop', 'flowid', ':1']
|
||||
'mtu', '64kb', 'drop', 'flowid', ':1']
|
||||
args = protocol + prio + match + police
|
||||
|
||||
self.execute.assert_called_once_with(
|
||||
|
|
Loading…
Reference in New Issue