def int(value, _min, _max, scale=10): """ Well, it's tricky function writen by all the twitter """ value = any2int(value) return min( scale, max( 1, int(1 + round_((value - _min) * (scale - 1.) / (_max - _min) + .001))))
def test_any2int(self): self.assertEqual(any2int(None), 0) self.assertEqual(any2int(23), 23) self.assertEqual(any2int(23.1), 23) self.assertEqual(any2int('23'), 23) self.assertEqual(any2int('23K'), 23) self.assertEqual(any2int('23 K'), 23) self.assertEqual(any2int(' '), 0)
def detect_layouts(self, lscpu_output=None): """ Determine NUMA and sockets layout """ stdout = self.detect_layout_lscpu(lscpu_output) rows = [ row for row in stdout.strip().split('\n') if not row.startswith('#') ] layouts = [[any2int(value) for value in row.split(',')][2:4] for row in rows] socket_layout, numa_layout = zip(*layouts) self.numa_layout = dict(enumerate(numa_layout)) self.socket_layout = dict(enumerate(socket_layout))
def __eval(self, postfix, interrupts): """ :param postfix: '-TxRx-' :return: list of tuples(irq, queue_name, socket) """ print_('- distribute interrupts of {0} ({1}) on socket {2}'.format( self.options.dev, postfix, self.options.socket)) queue_regex = r'{0}{1}[^ \n]+'.format(self.options.dev, postfix) rss_cpus = self.rss_cpus_detect() for _ in xrange(self.options.offset): rss_cpus.pop() for line in interrupts: queue_name = re.findall(queue_regex, line) if queue_name: yield any2int(line.split()[0]), queue_name[0], rss_cpus.pop()