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

Reply via email to