#c #rust #perf #linux-capabilities
Вопрос:
Я пишу инструмент анализа производительности в Rust/C.
Я использую системный вызов perf_event_open
в Rust и написал тест. Тест выглядит так:
#[test]
fn syscall_test() {
let event = amp;mut perf_event_attr {
type_: perf_type_id_PERF_TYPE_HARDWARE,
size: std::mem::size_of::<perf_event_attr>() as u32,
// something to consider fixing, for now leave it alone.
config: perf_hw_id_PERF_COUNT_HW_INSTRUCTIONS as u64,
..Default::default()
};
event.set_disabled(1);
event.set_exclude_kernel(1);
event.set_exclude_hv(1);
let fd: isize = perf_event_open(amp;event, 0, -1, -1, 0);
assert_ne!(fd, -1, "Testing for failure");
}
Как я могу увеличить привилегии тестового исполняемого файла? perf_event_open всегда будет возвращать -1, если для исполняемого файла не заданы ни CAP_PERFMON, ни CAP_SYS_ADMIN.
Комментарии:
1. Если это ограничение является одним из контролируемых
/proc/sys/kernel/yama/ptrace_scope
, может быть проще просто установить его в масштабах всей системы (0
вместо значения по умолчанию3
или что-то в этом роде) с помощью sysctl.conf. В противном случае предположительноsudo setcap
или каким-либо другим способом вызова setcap. (Извините, я не знаю, что определяет возможность установки битов возможностей в файлах.)