diff --git a/netutils_linux_tuning/auto_softirq_tune.py b/netutils_linux_tuning/auto_softirq_tune.py index dd65e0c..a9b8107 100644 --- a/netutils_linux_tuning/auto_softirq_tune.py +++ b/netutils_linux_tuning/auto_softirq_tune.py @@ -72,6 +72,13 @@ def cpus2mask(cpus, cpus_count): bitmap[cpu] = 1 return hex(int(''.join([str(cpu) for cpu in bitmap]), 2))[2:] # no need to write 0x + def cpus_sys_local(self): + cpus_local_file = '/sys/class/net/{0}/device/local_cpus'.format(self.options.dev) + if not os.path.isfile(cpus_local_file): + return + with open(cpus_local_file, 'r') as fd: + return fd.read().strip() + def mask_detect(self): """ Finds a way to calculate CPU mask to apply: @@ -79,11 +86,17 @@ def mask_detect(self): 2. --cpus 3. topology.layout """ + mask = None if self.options.cpu_mask: return if not self.options.cpus: - self.options.cpus = self.cpus_detect_real() - self.options.cpu_mask = self.cpus2mask(self.options.cpus, len(self.topology.socket_layout.keys())) + mask = self.cpus_sys_local() + if mask: + self.options.cpu_mask = mask + else: + self.options.cpus = self.cpus_detect_real() + if not mask: + self.options.cpu_mask = self.cpus2mask(self.options.cpus, len(self.topology.socket_layout.keys())) def detect_queues_real(self): """ diff --git a/setup.py b/setup.py index 578435c..d4a096a 100644 --- a/setup.py +++ b/setup.py @@ -16,7 +16,7 @@ def read(*paths): setuptools.setup( name='netutils-linux', - version='2.7.7', + version='2.7.8', author='Oleg Strizhechenko', author_email='oleg.strizhechenko@gmail.com', license='MIT',