Skip to content

Instantly share code, notes, and snippets.

@aeppert
Last active May 13, 2019 19:03
Show Gist options
  • Save aeppert/e365359347f63441949bea0e86671bc2 to your computer and use it in GitHub Desktop.
Save aeppert/e365359347f63441949bea0e86671bc2 to your computer and use it in GitHub Desktop.
Broctl plugin to tune optimizations and system parameters on startup
import BroControl.plugin
import sys
import os
class TuneBro(BroControl.plugin.Plugin):
def __init__(self):
super(TuneBro, self).__init__(apiversion=1)
def name(self):
return "TuneBro"
def pluginVersion(self):
return 1
def cmd_stop_post(self, results):
for node in self.nodes():
self.execute(node, "killall -9 /usr/local/bro/bin/bro || :")
def cmd_start_pre(self, nodes):
for node in nodes:
self.execute(node, "/usr/sbin/sysctl net.core.rmem_max=50000000")
self.execute(node, "/usr/sbin/sysctl net.core.rmem_default=50000000")
self.execute(node, "/usr/bin/test -f /sys/kernel/mm/transparent_hugepage/enabled && /usr/bin/echo never > /sys/kernel/mm/transparent_hugepage/enabled")
self.execute(node, "/usr/bin/test -f /sys/kernel/mm/transparent_hugepage/defrag && /usr/bin/echo never > /sys/kernel/mm/transparent_hugepage/defrag")
# self.execute(node, "/bin/rm -rf /usr/local/bro/spool/tmp/*")
workers = [i for i in self.nodes() if i.type == "worker"]
for worker_node in workers:
self.message(format("Turning off NIC optimizations for %s" % worker_node.name))
opts = [ 'rx', 'tx', 'sg', 'tso', 'ufo', 'gso', 'gro', 'lro', '' ]
ethtool_opts = ' off '.join(opts)
iface = worker_node.interface
if ':' in iface:
iface = iface.split(':')[2]
self.message(format("/sbin/ethtool -K %s %s" % (iface, ethtool_opts)))
self.execute(worker_node, format("/sbin/ethtool -K %s %s" % (iface, ethtool_opts)))
self.execute(worker_node, format("ethtool -X %s equal 1" % (iface)))
self.message(format("/sbin/ip link set %s up" % (iface)))
self.execute(worker_node, format("/sbin/ip link set %s up" % (iface)))
def cmd_cron_pre(self, arg, watch):
# for node in self.nodes():
# self.execute(node, "/bin/rm -rf /usr/local/bro/spool/tmp/*")
return True
def cmd_start_post(self, results):
return True
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment