コード例 #1
0
def test_get_measurements(*args):
    upc = UncorePerfCounters(
        [0], {17: [Event(event=227,
                         name=MetricName.PLATFORM_PMM_BANDWIDTH_READS,
                         umask=0, config1=0),
                   ]}, platform=platform_mock)
    upc._group_event_leader_files_per_pmu[17] = {0: mock_open()}
    expected_measurements = {MetricName.PLATFORM_PMM_BANDWIDTH_READS: {0: {17: 0.0}}}

    assert upc.get_measurements() == expected_measurements
コード例 #2
0
    def _init_uncore_pmu_events(self, enable_derived_metrics, uncore_events,
                                platform: platforms.Platform):
        _enable_perf_uncore = len(uncore_events) > 0
        self._uncore_pmu = []
        self._uncore_get_measurements = []
        if not _enable_perf_uncore:
            return
        if type(uncore_events[0]) == str:
            uncore_events = [uncore_events]
        for event_groups in uncore_events:
            pmu_events = {}
            imc_events, cha_events, upi_events = self._prepare_events(
                event_groups)
            try:
                # Cpus and events for perf uncore imc
                cpus_imc, pmu_events_imc = _discover_pmu_uncore_config(
                    imc_events, 'uncore_imc_')
                pmu_events.update(pmu_events_imc)
                # Cpus and events for perf uncore upi
                cpus_upi, pmu_events_upi = _discover_pmu_uncore_config(
                    upi_events, 'uncore_upi_')
                pmu_events.update(pmu_events_upi)
                # Cpus and events for perf uncore cha
                cpus_cha, pmu_events_cha = _discover_pmu_uncore_config(
                    cha_events, 'uncore_cha_')
                pmu_events.update(pmu_events_cha)
                cpus = list(set(cpus_imc + cpus_upi))
            except PMUNotAvailable:
                log.error('PMU metrics requested but PMU not available!')
                raise

            # Prepare uncore object
            uncore_pmu = UncorePerfCounters(cpus=cpus,
                                            pmu_events=pmu_events,
                                            platform=platform)
            self._uncore_pmu.append(uncore_pmu)

            # Wrap with derived..
            if enable_derived_metrics:
                derived_metrics_generator = UncoreDerivedMetricsGenerator(
                    uncore_pmu.get_measurements)
                self._uncore_get_measurements.append(
                    derived_metrics_generator.get_measurements)
            else:
                self._uncore_get_measurements.append(
                    uncore_pmu.get_measurements)
コード例 #3
0
    def _init_uncore_pmu(self, enable_derived_metrics, enable_perf_uncore,
                         platform: platforms.Platform):
        strict_mode = enable_perf_uncore is True
        _enable_perf_uncore = enable_perf_uncore in (True, None)
        self._uncore_pmu = None
        self._uncore_get_measurements = lambda: {}
        if _enable_perf_uncore:
            pmu_events = {}
            try:
                # Cpus and events for perf uncore imc
                cpus_imc, pmu_events_imc = _discover_pmu_uncore_config(
                    UNCORE_IMC_EVENTS, 'uncore_imc_')
                pmu_events.update(pmu_events_imc)
                # Cpus and events for perf uncore upi
                cpus_upi, pmu_events_upi = _discover_pmu_uncore_config(
                    UNCORE_UPI_EVENTS, 'uncore_upi_')
                pmu_events.update(pmu_events_upi)

                cpus = list(set(cpus_imc + cpus_upi))

            except PMUNotAvailable as e:
                self._uncore_pmu = None
                self._uncore_get_measurements = lambda: {}
                if strict_mode:
                    raise
                else:
                    log.warning(
                        'Perf pmu metrics requested, but not available. '
                        'Not collecting perf pmu metrics! '
                        'error={}'.format(e))
                    return

            # Prepare uncore object
            self._uncore_pmu = UncorePerfCounters(
                cpus=cpus,
                pmu_events=pmu_events,
                platform=platform,
            )

            # Wrap with derived..
            if enable_derived_metrics:
                self._uncore_derived_metrics = UncoreDerivedMetricsGenerator(
                    self._uncore_pmu.get_measurements)
                self._uncore_get_measurements = self._uncore_derived_metrics.get_measurements
            else:
                self._uncore_get_measurements = self._uncore_pmu.get_measurements
コード例 #4
0
def test_open_for_cpu(*args):
    event = Event(event=227,
                  name=MetricName.PLATFORM_PMM_BANDWIDTH_READS,
                  umask=0, config1=0)

    upc = UncorePerfCounters(cpus=[], pmu_events={}, platform=platform_mock)
    assert len(upc._group_event_leader_files_per_pmu) == 0
    upc._open_for_cpu(pmu=17, cpu=0, event=event)
    assert len(upc._event_files) == 0
    assert len(upc._group_event_leader_files_per_pmu) == 1
    upc._open_for_cpu(pmu=17, cpu=0, event=event)
    assert len(upc._event_files) == 1
    assert len(upc._group_event_leader_files_per_pmu) == 1
コード例 #5
0
    def _init_uncore_pmu(self, enable_derived_metrics, uncore_event_names,
                         platform: platforms.Platform):
        _enable_perf_uncore = len(uncore_event_names) > 0
        self._uncore_pmu = None
        self._uncore_get_measurements = lambda: {}
        if _enable_perf_uncore:
            pmu_events = {}
            imc_events = []
            upi_events = []
            for event in uncore_event_names:
                if event in UNCORE_IMC_EVENTS:
                    imc_events.append(UNCORE_IMC_EVENTS[event])
                elif event in UNCORE_UPI_EVENTS:
                    upi_events.append(UNCORE_UPI_EVENTS[event])
                else:
                    raise Exception('Unknown event name: {}'.format(event))
            try:
                # Cpus and events for perf uncore imc
                cpus_imc, pmu_events_imc = _discover_pmu_uncore_config(
                    imc_events, 'uncore_imc_')
                pmu_events.update(pmu_events_imc)
                # Cpus and events for perf uncore upi
                cpus_upi, pmu_events_upi = _discover_pmu_uncore_config(
                    upi_events, 'uncore_upi_')
                pmu_events.update(pmu_events_upi)
                cpus = list(set(cpus_imc + cpus_upi))
            except PMUNotAvailable:
                log.error('PMU metrics requested but PMU not available!')
                raise

            # Prepare uncore object
            self._uncore_pmu = UncorePerfCounters(
                cpus=cpus,
                pmu_events=pmu_events,
                platform=platform,
            )

            # Wrap with derived..
            if enable_derived_metrics:
                self._uncore_derived_metrics = UncoreDerivedMetricsGenerator(
                    self._uncore_pmu.get_measurements)
                self._uncore_get_measurements = self._uncore_derived_metrics.get_measurements
            else:
                self._uncore_get_measurements = self._uncore_pmu.get_measurements
コード例 #6
0
def test_cleanup(*args):
    reader = MagicMock()
    event_files = []
    call_count = 3
    for i in range(0, call_count - 1):
        event_files.append(MagicMock())

    event = Event(event=227,
                  name=MetricName.PLATFORM_PMM_BANDWIDTH_READS,
                  umask=0, config1=0)
    upc = UncorePerfCounters([0, 18], {17: [event]}, platform=platform_mock)
    upc._group_event_leader_files_per_pmu = {17: (None, {0: reader})}
    upc._event_files = event_files

    upc.cleanup()
    reader.close.assert_called_once()
    for event_file in event_files:
        event_file.close.assert_called_once()