BBlack has uploaded a new change for review. (
https://gerrit.wikimedia.org/r/355223 )
Change subject: interface-rps: add mq subqueue qdisc setup
......................................................................
interface-rps: add mq subqueue qdisc setup
Change-Id: I21780730f6755aabdc90b0e09b5aac6055b428b3
---
M modules/interface/files/interface-rps.py
M modules/interface/manifests/rps.pp
M modules/interface/templates/interface-rps-config.erb
3 files changed, 33 insertions(+), 1 deletion(-)
git pull ssh://gerrit.wikimedia.org:29418/operations/puppet
refs/changes/23/355223/1
diff --git a/modules/interface/files/interface-rps.py
b/modules/interface/files/interface-rps.py
index f7a9857..63f000f 100755
--- a/modules/interface/files/interface-rps.py
+++ b/modules/interface/files/interface-rps.py
@@ -53,6 +53,7 @@
import re
import warnings
import ConfigParser
+import subprocess
def get_value(path):
@@ -64,6 +65,18 @@
"""Write a (sysfs) value to path"""
print '%s = %s' % (path, value)
open(path, 'w').write(value)
+
+
+def cmd_nofail(cmd):
+ """echo + exec cmd with normal output, raises on rv!=0"""
+ print 'Executing: %s' % cmd
+ subprocess.check_call(cmd, Shell=True)
+
+
+def cmd_failable(cmd):
+ """echo + exec cmd with normal output, ignores errors"""
+ print 'Executing: %s' % cmd
+ subprocess.call(cmd, Shell=True)
def get_cpu_list():
@@ -200,6 +213,19 @@
set_cpus(device, cpus, rxq, rx_irqs[rxq], tx_qmap[rxq])
+def setup_qdisc(device, num_queues, qdisc):
+ """Sets up transmit qdiscs"""
+ cmd_failable('/sbin/tc qdisc del dev %s root' % device)
+ if num_queues < 2:
+ cmd_nofail('/sbin/tc qdisc add dev %s root handle 100: %s'
+ % (device, qdisc))
+ else:
+ cmd_nofail('/sbin/tc qdisc add dev %s root handle 100: mq' % (device))
+ for slot in range(1, num_queues + 1):
+ cmd_nofail('/sbin/tc qdisc add dev %s handle %x: parent 100:%x %s',
+ % (device, slot, slot, qdisc))
+
+
def get_options(device):
"""Get configured options from /etc/interface-rps.d/$device"""
@@ -256,6 +282,8 @@
tx_queue_map = {rxq: None for rxq in rx_queues}
dist_queues_to_cpus(device, cpu_list, rx_queues, rx_irqs, tx_queue_map)
+ if opts['qdisc']:
+ setup_qdisc(device, len(tx_queues), opts['qdisc'])
if __name__ == '__main__':
main()
diff --git a/modules/interface/manifests/rps.pp
b/modules/interface/manifests/rps.pp
index 6430575..e3a60ab 100644
--- a/modules/interface/manifests/rps.pp
+++ b/modules/interface/manifests/rps.pp
@@ -7,7 +7,10 @@
# The network interface to operate on
# - $rss_pattern:
# Optional RSS IRQ name pattern (normally auto-detected)
-define interface::rps($interface=$name, $rss_pattern='') {
+# - $qdisc
+# Options qdisc string to populate mq subqueues, e.g.:
+# "fq flow_limit 422"
+define interface::rps($interface=$name, $rss_pattern='', $qdisc='') {
require interface::rpstools
require interface::rps::modparams
diff --git a/modules/interface/templates/interface-rps-config.erb
b/modules/interface/templates/interface-rps-config.erb
index 8f66cd3..7f97513 100644
--- a/modules/interface/templates/interface-rps-config.erb
+++ b/modules/interface/templates/interface-rps-config.erb
@@ -1,2 +1,3 @@
[Options]
<% if @rss_pattern != '' %>rss_pattern = <%= @rss_pattern %><% end %>
+<% if @qdisc != '' %>qdisc = <%= @qdisc %><% end %>
--
To view, visit https://gerrit.wikimedia.org/r/355223
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I21780730f6755aabdc90b0e09b5aac6055b428b3
Gerrit-PatchSet: 1
Gerrit-Project: operations/puppet
Gerrit-Branch: production
Gerrit-Owner: BBlack <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits