Exemplo n.º 1
0
 def smp_affinity_list_make(self, postfix):
     """
     :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)
     if self.options.cpus:
         # 16 is in case of someone decide to bind up to 16 queues to one CPU for cache locality
         # and manually distribute workload by RPS to other CPUs.
         rss_cpus = self.options.cpus * MAX_QUEUE_PER_DEVICE
     else:
         cpus = [
             k for k, v in iteritems(self.numa.socket_layout)
             if v == self.options.socket
         ]
         rss_cpus = cpus * MAX_QUEUE_PER_DEVICE
     rss_cpus.reverse()
     for _ in xrange(self.options.offset):
         rss_cpus.pop()
     for line in self.interrupts:
         queue_name = re.findall(queue_regex, line)
         if queue_name:
             yield any2int(line.split()[0]), queue_name[0], rss_cpus.pop()
Exemplo n.º 2
0
 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))))
Exemplo n.º 3
0
 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)
Exemplo n.º 4
0
 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)
Exemplo n.º 5
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]
     numa_layout, socket_layout = zip(*layouts)
     self.numa_layout = dict(enumerate(numa_layout))
     self.socket_layout = dict(enumerate(socket_layout))
Exemplo n.º 6
0
 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()
Exemplo n.º 7
0
 def smp_affinity_list_make(self, postfix):
     """
     :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)
     socket_cpus = [
         k for k, v in iteritems(self.numa.socket_layout)
         if v == self.options.socket
     ] * 4
     socket_cpus.reverse()
     for line in self.interrupts:
         queue_name = re.findall(queue_regex, line)
         if queue_name:
             yield any2int(
                 line.split()[0]), queue_name[0], socket_cpus.pop()