Ejemplo n.º 1
0
  def test_basic_sampler(self):
    # Set up state sampler.
    counter_factory = CounterFactory()
    sampler = statesampler.StateSampler('basic', counter_factory,
                                        sampling_period_ms=1)

    # Run basic workload transitioning between 3 states.
    sampler.start()
    with sampler.scoped_state('statea'):
      time.sleep(0.1)
      with sampler.scoped_state('stateb'):
        time.sleep(0.2 / 2)
        with sampler.scoped_state('statec'):
          time.sleep(0.3)
        time.sleep(0.2 / 2)
    sampler.stop()
    sampler.commit_counters()

    # Test that sampled state timings are close to their expected values.
    expected_counter_values = {
        'basic-statea-msecs': 100,
        'basic-stateb-msecs': 200,
        'basic-statec-msecs': 300,
    }
    for counter in counter_factory.get_counters():
      self.assertIn(counter.name, expected_counter_values)
      expected_value = expected_counter_values[counter.name]
      actual_value = counter.value()
      self.assertGreater(actual_value, expected_value * 0.75)
      self.assertLess(actual_value, expected_value * 1.25)
Ejemplo n.º 2
0
    def test_basic_sampler(self):
        # Set up state sampler.
        counter_factory = CounterFactory()
        sampler = statesampler.StateSampler('basic-',
                                            counter_factory,
                                            sampling_period_ms=1)

        # Run basic workload transitioning between 3 states.
        sampler.start()
        with sampler.scoped_state('statea'):
            time.sleep(0.1)
            with sampler.scoped_state('stateb'):
                time.sleep(0.2 / 2)
                with sampler.scoped_state('statec'):
                    time.sleep(0.3)
                time.sleep(0.2 / 2)
        sampler.stop()
        sampler.commit_counters()

        # Test that sampled state timings are close to their expected values.
        expected_counter_values = {
            'basic-statea-msecs': 100,
            'basic-stateb-msecs': 200,
            'basic-statec-msecs': 300,
        }
        for counter in counter_factory.get_counters():
            self.assertIn(counter.name, expected_counter_values)
            expected_value = expected_counter_values[counter.name]
            actual_value = counter.value()
            self.assertGreater(actual_value, expected_value * 0.75)
            self.assertLess(actual_value, expected_value * 1.25)
Ejemplo n.º 3
0
  def test_basic_sampler(self):
    # Set up state sampler.
    counter_factory = CounterFactory()
    sampler = statesampler.StateSampler(
        'basic', counter_factory, sampling_period_ms=1)

    # Duration of the fastest state. Total test duration is 6 times longer.
    state_duration_ms = 1000
    margin_of_error = 0.25
    # Run basic workload transitioning between 3 states.
    sampler.start()
    with sampler.scoped_state('step1', 'statea'):
      time.sleep(state_duration_ms / 1000)
      self.assertEqual(
          sampler.current_state().name,
          CounterName('statea-msecs', step_name='step1', stage_name='basic'))
      with sampler.scoped_state('step1', 'stateb'):
        time.sleep(state_duration_ms / 1000)
        self.assertEqual(
            sampler.current_state().name,
            CounterName('stateb-msecs', step_name='step1', stage_name='basic'))
        with sampler.scoped_state('step1', 'statec'):
          time.sleep(3 * state_duration_ms / 1000)
          self.assertEqual(
              sampler.current_state().name,
              CounterName(
                  'statec-msecs', step_name='step1', stage_name='basic'))
        time.sleep(state_duration_ms / 1000)

    sampler.stop()
    sampler.commit_counters()

    if not statesampler.FAST_SAMPLER:
      # The slow sampler does not implement sampling, so we won't test it.
      return

    # Test that sampled state timings are close to their expected values.
    # yapf: disable
    expected_counter_values = {
        CounterName('statea-msecs', step_name='step1', stage_name='basic'):
            state_duration_ms,
        CounterName('stateb-msecs', step_name='step1', stage_name='basic'): 2 *
        state_duration_ms,
        CounterName('statec-msecs', step_name='step1', stage_name='basic'): 3 *
        state_duration_ms,
    }
    # yapf: enable
    for counter in counter_factory.get_counters():
      self.assertIn(counter.name, expected_counter_values)
      expected_value = expected_counter_values[counter.name]
      actual_value = counter.value()
      deviation = float(abs(actual_value - expected_value)) / expected_value
      _LOGGER.info('Sampling deviation from expectation: %f', deviation)
      self.assertGreater(actual_value, expected_value * (1.0 - margin_of_error))
      self.assertLess(actual_value, expected_value * (1.0 + margin_of_error))
Ejemplo n.º 4
0
  def test_basic_sampler(self):
    # Set up state sampler.
    counter_factory = CounterFactory()
    sampler = statesampler.StateSampler('basic', counter_factory,
                                        sampling_period_ms=1)

    # Run basic workload transitioning between 3 states.
    sampler.start()
    with sampler.scoped_state('step1', 'statea'):
      time.sleep(0.1)
      self.assertEqual(
          sampler.current_state().name,
          CounterName(
              'statea-msecs', step_name='step1', stage_name='basic'))
      with sampler.scoped_state('step1', 'stateb'):
        time.sleep(0.2 / 2)
        self.assertEqual(
            sampler.current_state().name,
            CounterName(
                'stateb-msecs', step_name='step1', stage_name='basic'))
        with sampler.scoped_state('step1', 'statec'):
          time.sleep(0.3)
          self.assertEqual(
              sampler.current_state().name,
              CounterName(
                  'statec-msecs', step_name='step1', stage_name='basic'))
        time.sleep(0.2 / 2)

    sampler.stop()
    sampler.commit_counters()

    if not statesampler.FAST_SAMPLER:
      # The slow sampler does not implement sampling, so we won't test it.
      return

    # Test that sampled state timings are close to their expected values.
    expected_counter_values = {
        CounterName('statea-msecs', step_name='step1', stage_name='basic'): 100,
        CounterName('stateb-msecs', step_name='step1', stage_name='basic'): 200,
        CounterName('statec-msecs', step_name='step1', stage_name='basic'): 300,
    }
    for counter in counter_factory.get_counters():
      self.assertIn(counter.name, expected_counter_values)
      expected_value = expected_counter_values[counter.name]
      actual_value = counter.value()
      deviation = float(abs(actual_value - expected_value)) / expected_value
      logging.info('Sampling deviation from expectation: %f', deviation)
      self.assertGreater(actual_value, expected_value * 0.75)
      self.assertLess(actual_value, expected_value * 1.25)
Ejemplo n.º 5
0
    def test_basic_counters(self):
        counter_factory = CounterFactory()
        sampler = statesampler.StateSampler('stage1', counter_factory)
        sampler.start()

        with sampler.scoped_state('step1', 'stateA'):
            counter = opcounters.SideInputReadCounter(counter_factory,
                                                      sampler,
                                                      declaring_step='step1',
                                                      input_index=1)
        with sampler.scoped_state('step2', 'stateB'):
            with counter:
                counter.add_bytes_read(10)

            counter.update_current_step()

        sampler.stop()
        sampler.commit_counters()

        actual_counter_names = set(
            [c.name for c in counter_factory.get_counters()])
        expected_counter_names = set([
            # Counter names for STEP 1
            counters.CounterName('read-sideinput-msecs',
                                 stage_name='stage1',
                                 step_name='step1',
                                 io_target=counters.side_input_id('step1', 1)),
            counters.CounterName('read-sideinput-byte-count',
                                 step_name='step1',
                                 io_target=counters.side_input_id('step1', 1)),

            # Counter names for STEP 2
            counters.CounterName('read-sideinput-msecs',
                                 stage_name='stage1',
                                 step_name='step1',
                                 io_target=counters.side_input_id('step2', 1)),
            counters.CounterName('read-sideinput-byte-count',
                                 step_name='step1',
                                 io_target=counters.side_input_id('step2', 1)),
        ])
        self.assertTrue(
            actual_counter_names.issuperset(expected_counter_names))
Ejemplo n.º 6
0
  def test_basic_counters(self):
    counter_factory = CounterFactory()
    sampler = statesampler.StateSampler('stage1', counter_factory)
    sampler.start()

    with sampler.scoped_state('step1', 'stateA'):
      counter = opcounters.SideInputReadCounter(counter_factory, sampler,
                                                declaring_step='step1',
                                                input_index=1)
    with sampler.scoped_state('step2', 'stateB'):
      with counter:
        counter.add_bytes_read(10)

      counter.update_current_step()

    sampler.stop()
    sampler.commit_counters()

    actual_counter_names = set([c.name for c in counter_factory.get_counters()])
    expected_counter_names = set([
        # Counter names for STEP 1
        counters.CounterName('read-sideinput-msecs',
                             stage_name='stage1',
                             step_name='step1',
                             io_target=counters.side_input_id('step1', 1)),
        counters.CounterName('read-sideinput-byte-count',
                             step_name='step1',
                             io_target=counters.side_input_id('step1', 1)),

        # Counter names for STEP 2
        counters.CounterName('read-sideinput-msecs',
                             stage_name='stage1',
                             step_name='step1',
                             io_target=counters.side_input_id('step2', 1)),
        counters.CounterName('read-sideinput-byte-count',
                             step_name='step1',
                             io_target=counters.side_input_id('step2', 1)),
    ])
    self.assertTrue(actual_counter_names.issuperset(expected_counter_names))