mirror of
https://codeberg.org/ziglang/zig.git
synced 2025-12-06 13:54:21 +00:00
Expanded std.os.linux perf-related definitions (#24264)
* Added perf_event_header definition * Added perf_event_mmap_page definition * Removed default values for perf_event_header * Fixed comments typos * Updated perf_event_attr definition * Explicit packet struct type * PERF.RECORD from struct to enum * fix typo: miscs to misc * misc as packed struct * cpu_mode as named enum * Rescoping CPU_MODE
This commit is contained in:
parent
001ec07772
commit
b734d03340
1 changed files with 166 additions and 1 deletions
|
|
@ -9162,8 +9162,26 @@ pub const perf_event_attr = extern struct {
|
||||||
write_backward: bool = false,
|
write_backward: bool = false,
|
||||||
/// include namespaces data
|
/// include namespaces data
|
||||||
namespaces: bool = false,
|
namespaces: bool = false,
|
||||||
|
/// include ksymbol events
|
||||||
|
ksymbol: bool = false,
|
||||||
|
/// include BPF events
|
||||||
|
bpf_event: bool = false,
|
||||||
|
/// generate AUX records instead of events
|
||||||
|
aux_output: bool = false,
|
||||||
|
/// include cgroup events
|
||||||
|
cgroup: bool = false,
|
||||||
|
/// include text poke events
|
||||||
|
text_poke: bool = false,
|
||||||
|
/// use build ID in mmap2 events
|
||||||
|
build_id: bool = false,
|
||||||
|
/// children only inherit if cloned with CLONE_THREAD
|
||||||
|
inherit_thread: bool = false,
|
||||||
|
/// event is removed from task on exec
|
||||||
|
remove_on_exec: bool = false,
|
||||||
|
/// send synchronous SIGTRAP on event
|
||||||
|
sigtrap: bool = false,
|
||||||
|
|
||||||
__reserved_1: u35 = 0,
|
__reserved_1: u26 = 0,
|
||||||
} = .{},
|
} = .{},
|
||||||
/// wakeup every n events, or
|
/// wakeup every n events, or
|
||||||
/// bytes before wakeup
|
/// bytes before wakeup
|
||||||
|
|
@ -9206,6 +9224,118 @@ pub const perf_event_attr = extern struct {
|
||||||
sample_max_stack: u16 = 0,
|
sample_max_stack: u16 = 0,
|
||||||
/// Align to u64
|
/// Align to u64
|
||||||
__reserved_2: u16 = 0,
|
__reserved_2: u16 = 0,
|
||||||
|
|
||||||
|
aux_sample_size: u32 = 0,
|
||||||
|
aux_action: packed struct(u32) {
|
||||||
|
/// start AUX area tracing paused
|
||||||
|
start_paused: bool = false,
|
||||||
|
/// on overflow, pause AUX area tracing
|
||||||
|
pause: bool = false,
|
||||||
|
/// on overflow, resume AUX area tracing
|
||||||
|
@"resume": bool = false,
|
||||||
|
|
||||||
|
__reserved_3: u29 = 0,
|
||||||
|
} = .{},
|
||||||
|
|
||||||
|
/// User provided data if sigtrap == true
|
||||||
|
sig_data: u64 = 0,
|
||||||
|
|
||||||
|
/// Extension of config2
|
||||||
|
config3: u64 = 0,
|
||||||
|
};
|
||||||
|
|
||||||
|
pub const perf_event_header = extern struct {
|
||||||
|
/// Event type: sample/mmap/fork/etc.
|
||||||
|
type: PERF.RECORD,
|
||||||
|
/// Additional informations on the event: kernel/user/hypervisor/etc.
|
||||||
|
misc: packed struct(u16) {
|
||||||
|
cpu_mode: PERF.RECORD.MISC.CPU_MODE,
|
||||||
|
_: u9,
|
||||||
|
PROC_MAP_PARSE_TIMEOUT: bool,
|
||||||
|
bit13: packed union {
|
||||||
|
MMAP_DATA: bool,
|
||||||
|
COMM_EXEC: bool,
|
||||||
|
FORK_EXEC: bool,
|
||||||
|
SWITCH_OUT: bool,
|
||||||
|
},
|
||||||
|
bit14: packed union {
|
||||||
|
EXACT_IP: bool,
|
||||||
|
SWITCH_OUT_PREEMPT: bool,
|
||||||
|
MMAP_BUILD_ID: bool,
|
||||||
|
},
|
||||||
|
EXT_RESERVED: bool,
|
||||||
|
},
|
||||||
|
/// Size of the following record
|
||||||
|
size: u16,
|
||||||
|
};
|
||||||
|
|
||||||
|
pub const perf_event_mmap_page = extern struct {
|
||||||
|
/// Version number of this struct
|
||||||
|
version: u32,
|
||||||
|
/// Lowest version this is compatible with
|
||||||
|
compt_version: u32,
|
||||||
|
/// Seqlock for synchronization
|
||||||
|
lock: u32,
|
||||||
|
/// Hardware counter identifier
|
||||||
|
index: u32,
|
||||||
|
/// Add to hardware counter value
|
||||||
|
offset: i64,
|
||||||
|
/// Time the event was active
|
||||||
|
time_enabled: u64,
|
||||||
|
/// Time the event was running
|
||||||
|
time_running: u64,
|
||||||
|
capabilities: packed struct(u64) {
|
||||||
|
/// If kernel version < 3.12
|
||||||
|
/// this rapresents both user_rdpmc and user_time (user_rdpmc | user_time)
|
||||||
|
/// otherwise deprecated.
|
||||||
|
bit0: bool,
|
||||||
|
/// Set if bit0 is deprecated
|
||||||
|
bit0_is_deprecated: bool,
|
||||||
|
/// Hardware support for userspace read of performance counters
|
||||||
|
user_rdpmc: bool,
|
||||||
|
/// Hardware support for a constant non stop timestamp counter (Eg. TSC on x86)
|
||||||
|
user_time: bool,
|
||||||
|
/// The time_zero field is used
|
||||||
|
user_time_zero: bool,
|
||||||
|
/// The time_{cycle,mask} fields are used
|
||||||
|
user_time_short: bool,
|
||||||
|
____res: u58,
|
||||||
|
},
|
||||||
|
/// If capabilities.user_rdpmc
|
||||||
|
/// this field reports the bit-width of the value read with rdpmc() or equivalent
|
||||||
|
pcm_width: u16,
|
||||||
|
/// If capabilities.user_time the following fields can be used to compute the time
|
||||||
|
/// delta since time_enabled (in ns) using RDTSC or similar
|
||||||
|
time_shift: u16,
|
||||||
|
time_mult: u32,
|
||||||
|
time_offset: u64,
|
||||||
|
/// If capabilities.user_time_zero the hardware clock can be calculated from
|
||||||
|
/// sample timestamps
|
||||||
|
time_zero: u64,
|
||||||
|
/// Header size
|
||||||
|
size: u32,
|
||||||
|
__reserved_1: u32,
|
||||||
|
/// The following fields are used to compute the timestamp when the hardware clock
|
||||||
|
/// is less than 64bit wide
|
||||||
|
time_cycles: u64,
|
||||||
|
time_mask: u64,
|
||||||
|
__reserved: [116 * 8]u8,
|
||||||
|
/// Head in the data section
|
||||||
|
data_head: u64,
|
||||||
|
/// Userspace written tail
|
||||||
|
data_tail: u64,
|
||||||
|
/// Where the buffer starts
|
||||||
|
data_offset: u64,
|
||||||
|
/// Data buffer size
|
||||||
|
data_size: u64,
|
||||||
|
// if aux is used, head in the data section
|
||||||
|
aux_head: u64,
|
||||||
|
// if aux is used, userspace written tail
|
||||||
|
aux_tail: u64,
|
||||||
|
// if aux is used, where the buffer starts
|
||||||
|
aux_offset: u64,
|
||||||
|
// if aux is used, data buffer size
|
||||||
|
aux_size: u64,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const PERF = struct {
|
pub const PERF = struct {
|
||||||
|
|
@ -9320,6 +9450,41 @@ pub const PERF = struct {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
pub const RECORD = enum(u32) {
|
||||||
|
MMAP = 1,
|
||||||
|
LOST = 2,
|
||||||
|
COMM = 3,
|
||||||
|
EXIT = 4,
|
||||||
|
THROTTLE = 5,
|
||||||
|
UNTHROTTLE = 6,
|
||||||
|
FORK = 7,
|
||||||
|
READ = 8,
|
||||||
|
SAMPLE = 9,
|
||||||
|
MMAP2 = 10,
|
||||||
|
AUX = 11,
|
||||||
|
ITRACE_START = 12,
|
||||||
|
LOST_SAMPLES = 13,
|
||||||
|
SWITCH = 14,
|
||||||
|
SWITCH_CPU_WIDE = 15,
|
||||||
|
NAMESPACES = 16,
|
||||||
|
KSYMBOL = 17,
|
||||||
|
BPF_EVENT = 18,
|
||||||
|
CGROUP = 19,
|
||||||
|
TEXT_POKE = 20,
|
||||||
|
AUX_OUTPUT_HW_ID = 21,
|
||||||
|
|
||||||
|
const MISC = struct {
|
||||||
|
pub const CPU_MODE = enum(u3) {
|
||||||
|
UNKNOWN = 0,
|
||||||
|
KERNEL = 1,
|
||||||
|
USER = 2,
|
||||||
|
HYPERVISOR = 3,
|
||||||
|
GUEST_KERNEL = 4,
|
||||||
|
GUEST_USER = 5,
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
pub const FLAG = struct {
|
pub const FLAG = struct {
|
||||||
pub const FD_NO_GROUP = 1 << 0;
|
pub const FD_NO_GROUP = 1 << 0;
|
||||||
pub const FD_OUTPUT = 1 << 1;
|
pub const FD_OUTPUT = 1 << 1;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue