Exemplo n.º 1
0
def test_reset_and_enable_group_event_leaders_enable_fail(
        _open_mock, _get_cgroup_fd_mock, ioctl_mock):
    prf = perf.PerfCounters('/mycgroup', [metrics.MetricName.CYCLES])
    # cpu0 group event leader mock
    prf._group_event_leader_files = {0: Mock()}
    with pytest.raises(OSError, message="Cannot enable perf counts"):
        prf._reset_and_enable_group_event_leaders()
Exemplo n.º 2
0
def test_reset_and_enable_group_event_leaders(_open_mock, _get_cgroup_fd_mock,
                                              ioctl_mock):
    prf = perf.PerfCounters('/mycgroup', [metrics.MetricName.CYCLES])
    # cpu0 group event leader mock
    prf._group_event_leader_files = {0: Mock()}
    prf._reset_and_enable_group_event_leaders()
    ioctl_mock.assert_has_calls([mock.ANY] * 2)
Exemplo n.º 3
0
def test_cleanup(_open_mock, _get_cgroup_fd_mock, os_close_mock):
    prf = perf.PerfCounters('/mycgroup', [metrics.MetricName.CYCLES])
    file_descriptor_mock = Mock()
    file_descriptor_mock.close = Mock()
    prf._group_event_leader_files = {'mock1': file_descriptor_mock, 'mock2': file_descriptor_mock}
    prf._event_files = [file_descriptor_mock] * 3
    prf.cleanup()
    os_close_mock.assert_called_once_with(10)
    file_descriptor_mock.close.assert_has_calls(
        [mock.call()] * (len(prf._event_files)
                         + len(prf._group_event_leader_files)))
Exemplo n.º 4
0
def test_open_for_cpu(_open_mock, _get_cgroup_fd_mock, _perf_event_open_mock,
                      fdopen_mock):
    prf = perf.PerfCounters('/mycgroup', [metrics.MetricName.CYCLES])
    prf._open_for_cpu(0, metrics.MetricName.CYCLES)
    assert prf._group_event_leader_files == {0: mock.ANY}
    assert prf._event_files == []
    # perf_event_open call for the event group leader
    _perf_event_open_mock.assert_called_once_with(perf_event_attr=mock.ANY,
                                                  pid=10,
                                                  cpu=0,
                                                  group_fd=-1,
                                                  flags=pc.PERF_FLAG_PID_CGROUP
                                                  | pc.PERF_FLAG_FD_CLOEXEC)
    fdopen_mock.assert_called_once_with(5, 'rb')
Exemplo n.º 5
0
def test_open_for_cpu_with_existing_event_group_leader(_open_mock,
                                                       _get_cgroup_fd_mock,
                                                       _perf_event_open_mock, fdopen_mock):
    prf = perf.PerfCounters('/mycgroup', [metrics.MetricName.CYCLES])
    # Create event group leader
    prf._open_for_cpu(0, metrics.MetricName.CYCLES)
    # Create non leading event
    prf._open_for_cpu(0, metrics.MetricName.INSTRUCTIONS)
    assert prf._group_event_leader_files[0].fileno() == 5
    assert prf._event_files[0].fileno() == 6
    # perf_event_open call for non leading event
    _perf_event_open_mock.assert_called_with(perf_event_attr=mock.ANY,
                                             pid=-1,
                                             cpu=0,
                                             group_fd=5,
                                             flags=pc.PERF_FLAG_FD_CLOEXEC)
Exemplo n.º 6
0
def test_read_events_zero_values_one_cpu(_open_mock, _get_cgroup_fd_mock):
    prf = perf.PerfCounters('/mycgroup', [])
    # File descriptor mock for single cpu
    prf._group_event_leaders = {0: Mock()}
    assert prf._read_events() == {}
Exemplo n.º 7
0
def test_read_events_zero_values_zero_cpus(_open_mock, _get_cgroup_fd_mock):
    prf = perf.PerfCounters('/mycgroup', [])
    prf._group_event_leaders = {}
    assert prf._read_events() == {}
Exemplo n.º 8
0
def test_open_for_cpu_wrong_arg(_open_mock, _get_cgroup_fd_mock):
    prf = perf.PerfCounters('/mycgroup', [])
    # let's check non-existent type of measurement
    with pytest.raises(KeyError):
        prf._open_for_cpu(0, 'invalid_event_name')
Exemplo n.º 9
0
def test_read_metrics(_open_mock, _get_cgroup_fd_mock):
    prf = perf.PerfCounters('/mycgroup', [metrics.MetricName.CYCLES])
    assert prf.get_measurements() == {metrics.MetricName.CYCLES: 0}
Exemplo n.º 10
0
def test_perf_counters_init(_open_mock, _get_cgroup_fd_mock):
    prf = perf.PerfCounters('/mycgroup', [metrics.MetricName.CYCLES])
    assert prf._group_event_leader_files == {}
    _get_cgroup_fd_mock.assert_called_once()
    _open_mock.assert_called_once()