Merge pull request #61 from olysonek/udev_monitor_buffer_size
Increase udev monitor buffer size, make it configurable
This commit is contained in:
commit
a83170deb7
6 changed files with 45 additions and 2 deletions
|
|
@ -29,3 +29,6 @@ reapply_sysctl = 1
|
|||
|
||||
# Default priority assigned to instances
|
||||
default_instance_priority = 0
|
||||
|
||||
# Udev buffer size
|
||||
udev_buffer_size = 1MB
|
||||
|
|
|
|||
|
|
@ -63,6 +63,7 @@ CFG_UPDATE_INTERVAL = "update_interval"
|
|||
CFG_RECOMMEND_COMMAND = "recommend_command"
|
||||
CFG_REAPPLY_SYSCTL = "reapply_sysctl"
|
||||
CFG_DEFAULT_INSTANCE_PRIORITY = "default_instance_priority"
|
||||
CFG_UDEV_BUFFER_SIZE = "udev_buffer_size"
|
||||
|
||||
# no_daemon mode
|
||||
CFG_DEF_DAEMON = True
|
||||
|
|
@ -78,6 +79,8 @@ CFG_DEF_RECOMMEND_COMMAND = True
|
|||
CFG_DEF_REAPPLY_SYSCTL = True
|
||||
# default instance priority
|
||||
CFG_DEF_DEFAULT_INSTANCE_PRIORITY = 0
|
||||
# default pyudev.Monitor buffer size
|
||||
CFG_DEF_UDEV_BUFFER_SIZE = 1024 * 1024
|
||||
|
||||
PATH_CPU_DMA_LATENCY = "/dev/cpu_dma_latency"
|
||||
|
||||
|
|
|
|||
|
|
@ -22,7 +22,8 @@ class Application(object):
|
|||
storage_factory = storage.Factory(storage_provider)
|
||||
|
||||
monitors_repository = monitors.Repository()
|
||||
hardware_inventory = hardware.Inventory()
|
||||
udev_buffer_size = config.get_size("udev_buffer_size", consts.CFG_DEF_UDEV_BUFFER_SIZE)
|
||||
hardware_inventory = hardware.Inventory(buffer_size=udev_buffer_size)
|
||||
device_matcher = hardware.DeviceMatcher()
|
||||
device_matcher_udev = hardware.DeviceMatcherUdev()
|
||||
plugin_instance_factory = plugins.instance.Factory()
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
import pyudev
|
||||
import tuned.logs
|
||||
from tuned import consts
|
||||
|
||||
__all__ = ["Inventory"]
|
||||
|
||||
|
|
@ -11,7 +12,7 @@ class Inventory(object):
|
|||
about related hardware events.
|
||||
"""
|
||||
|
||||
def __init__(self, udev_context=None, udev_monitor_cls=None, monitor_observer_factory=None):
|
||||
def __init__(self, udev_context=None, udev_monitor_cls=None, monitor_observer_factory=None, buffer_size=None):
|
||||
if udev_context is not None:
|
||||
self._udev_context = udev_context
|
||||
else:
|
||||
|
|
@ -20,6 +21,9 @@ class Inventory(object):
|
|||
if udev_monitor_cls is None:
|
||||
udev_monitor_cls = pyudev.Monitor
|
||||
self._udev_monitor = udev_monitor_cls.from_netlink(self._udev_context)
|
||||
if buffer_size is None:
|
||||
buffer_size = consts.CFG_DEF_UDEV_BUFFER_SIZE
|
||||
self._udev_monitor.set_receive_buffer_size(buffer_size)
|
||||
|
||||
if monitor_observer_factory is None:
|
||||
monitor_observer_factory = _MonitorObserverFactory()
|
||||
|
|
|
|||
|
|
@ -432,3 +432,24 @@ class commands:
|
|||
return terminate.wait(time, False)
|
||||
except:
|
||||
return terminate.wait(time)
|
||||
|
||||
def get_size(self, s):
|
||||
s = str(s).strip().upper()
|
||||
for unit in ["KB", "MB", "GB", ""]:
|
||||
unit_ix = s.rfind(unit)
|
||||
if unit_ix == -1:
|
||||
continue
|
||||
try:
|
||||
val = int(s[:unit_ix])
|
||||
u = s[unit_ix:]
|
||||
if u == "KB":
|
||||
val *= 1024
|
||||
elif u == "MB":
|
||||
val *= 1024 * 1024
|
||||
elif u == "GB":
|
||||
val *= 1024 * 1024 * 1024
|
||||
elif u != "":
|
||||
val = None
|
||||
return val
|
||||
except ValueError:
|
||||
return None
|
||||
|
|
|
|||
|
|
@ -47,3 +47,14 @@ class GlobalConfig():
|
|||
|
||||
def set(self, key, value):
|
||||
self._cfg[key] = value
|
||||
|
||||
def get_size(self, key, default = None):
|
||||
val = self.get(key)
|
||||
if val is None:
|
||||
return default
|
||||
ret = self._cmd.get_size(val)
|
||||
if ret is None:
|
||||
log.error("Error parsing value '%s', using '%s'." %(val, default))
|
||||
return default
|
||||
else:
|
||||
return ret
|
||||
|
|
|
|||
Loading…
Reference in a new issue