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()
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)
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)))
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')
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)
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() == {}
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() == {}
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')
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}
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()