|
|
@@ -231,6 +231,61 @@ struct my_epoll_event {
|
|
|
int32_t pad;
|
|
|
};
|
|
|
|
|
|
+// Copied from <linux/perf_event.h> with the following modifications:
|
|
|
+// 1) bit field after read_format redeclared as '__u64 bits' to make it
|
|
|
+// accessible from Go
|
|
|
+// 2) collapsed the unions, to avoid confusing godoc for the generated output
|
|
|
+// (e.g. having to use BpAddr as an extension of Config)
|
|
|
+struct perf_event_attr_go {
|
|
|
+ __u32 type;
|
|
|
+
|
|
|
+ __u32 size;
|
|
|
+ __u64 config;
|
|
|
+
|
|
|
+ // union {
|
|
|
+ // __u64 sample_period;
|
|
|
+ // __u64 sample_freq;
|
|
|
+ // };
|
|
|
+ __u64 sample;
|
|
|
+
|
|
|
+ __u64 sample_type;
|
|
|
+ __u64 read_format;
|
|
|
+
|
|
|
+ // Replaces the bit field. Flags are defined as constants.
|
|
|
+ __u64 bits;
|
|
|
+
|
|
|
+ // union {
|
|
|
+ // __u32 wakeup_events;
|
|
|
+ // __u32 wakeup_watermark;
|
|
|
+ // };
|
|
|
+ __u32 wakeup;
|
|
|
+
|
|
|
+ __u32 bp_type;
|
|
|
+
|
|
|
+ // union {
|
|
|
+ // __u64 bp_addr;
|
|
|
+ // __u64 config1;
|
|
|
+ // };
|
|
|
+ __u64 ext1;
|
|
|
+
|
|
|
+ // union {
|
|
|
+ // __u64 bp_len;
|
|
|
+ // __u64 config2;
|
|
|
+ // };
|
|
|
+ __u64 ext2;
|
|
|
+
|
|
|
+ __u64 branch_sample_type;
|
|
|
+
|
|
|
+ __u64 sample_regs_user;
|
|
|
+
|
|
|
+ __u32 sample_stack_user;
|
|
|
+
|
|
|
+ __s32 clockid;
|
|
|
+ __u64 sample_regs_intr;
|
|
|
+ __u32 aux_watermark;
|
|
|
+ __u32 __reserved_2;
|
|
|
+};
|
|
|
+
|
|
|
*/
|
|
|
import "C"
|
|
|
|
|
|
@@ -698,6 +753,138 @@ const (
|
|
|
BDADDR_LE_RANDOM = C.BDADDR_LE_RANDOM
|
|
|
)
|
|
|
|
|
|
+// Perf subsystem
|
|
|
+
|
|
|
+type PerfEventAttr C.struct_perf_event_attr_go
|
|
|
+
|
|
|
+type PerfEventMmapPage C.struct_perf_event_mmap_page
|
|
|
+
|
|
|
+// Bit field in struct perf_event_attr expanded as flags.
|
|
|
+// Set these on PerfEventAttr.Bits by ORing them together.
|
|
|
+const (
|
|
|
+ PerfBitDisabled uint64 = CBitFieldMaskBit0
|
|
|
+ PerfBitInherit = CBitFieldMaskBit1
|
|
|
+ PerfBitPinned = CBitFieldMaskBit2
|
|
|
+ PerfBitExclusive = CBitFieldMaskBit3
|
|
|
+ PerfBitExcludeUser = CBitFieldMaskBit4
|
|
|
+ PerfBitExcludeKernel = CBitFieldMaskBit5
|
|
|
+ PerfBitExcludeHv = CBitFieldMaskBit6
|
|
|
+ PerfBitExcludeIdle = CBitFieldMaskBit7
|
|
|
+ PerfBitMmap = CBitFieldMaskBit8
|
|
|
+ PerfBitComm = CBitFieldMaskBit9
|
|
|
+ PerfBitFreq = CBitFieldMaskBit10
|
|
|
+ PerfBitInheritStat = CBitFieldMaskBit11
|
|
|
+ PerfBitEnableOnExec = CBitFieldMaskBit12
|
|
|
+ PerfBitTask = CBitFieldMaskBit13
|
|
|
+ PerfBitWatermark = CBitFieldMaskBit14
|
|
|
+ PerfBitPreciseIPBit1 = CBitFieldMaskBit15
|
|
|
+ PerfBitPreciseIPBit2 = CBitFieldMaskBit16
|
|
|
+ PerfBitMmapData = CBitFieldMaskBit17
|
|
|
+ PerfBitSampleIDAll = CBitFieldMaskBit18
|
|
|
+ PerfBitExcludeHost = CBitFieldMaskBit19
|
|
|
+ PerfBitExcludeGuest = CBitFieldMaskBit20
|
|
|
+ PerfBitExcludeCallchainKernel = CBitFieldMaskBit21
|
|
|
+ PerfBitExcludeCallchainUser = CBitFieldMaskBit22
|
|
|
+ PerfBitMmap2 = CBitFieldMaskBit23
|
|
|
+ PerfBitCommExec = CBitFieldMaskBit24
|
|
|
+ PerfBitUseClockID = CBitFieldMaskBit25
|
|
|
+ PerfBitContextSwitch = CBitFieldMaskBit26
|
|
|
+)
|
|
|
+
|
|
|
+const (
|
|
|
+ PERF_TYPE_HARDWARE = C.PERF_TYPE_HARDWARE
|
|
|
+ PERF_TYPE_SOFTWARE = C.PERF_TYPE_SOFTWARE
|
|
|
+ PERF_TYPE_TRACEPOINT = C.PERF_TYPE_TRACEPOINT
|
|
|
+ PERF_TYPE_HW_CACHE = C.PERF_TYPE_HW_CACHE
|
|
|
+ PERF_TYPE_RAW = C.PERF_TYPE_RAW
|
|
|
+ PERF_TYPE_BREAKPOINT = C.PERF_TYPE_BREAKPOINT
|
|
|
+
|
|
|
+ PERF_COUNT_HW_CPU_CYCLES = C.PERF_COUNT_HW_CPU_CYCLES
|
|
|
+ PERF_COUNT_HW_INSTRUCTIONS = C.PERF_COUNT_HW_INSTRUCTIONS
|
|
|
+ PERF_COUNT_HW_CACHE_REFERENCES = C.PERF_COUNT_HW_CACHE_REFERENCES
|
|
|
+ PERF_COUNT_HW_CACHE_MISSES = C.PERF_COUNT_HW_CACHE_MISSES
|
|
|
+ PERF_COUNT_HW_BRANCH_INSTRUCTIONS = C.PERF_COUNT_HW_BRANCH_INSTRUCTIONS
|
|
|
+ PERF_COUNT_HW_BRANCH_MISSES = C.PERF_COUNT_HW_BRANCH_MISSES
|
|
|
+ PERF_COUNT_HW_BUS_CYCLES = C.PERF_COUNT_HW_BUS_CYCLES
|
|
|
+ PERF_COUNT_HW_STALLED_CYCLES_FRONTEND = C.PERF_COUNT_HW_STALLED_CYCLES_FRONTEND
|
|
|
+ PERF_COUNT_HW_STALLED_CYCLES_BACKEND = C.PERF_COUNT_HW_STALLED_CYCLES_BACKEND
|
|
|
+ PERF_COUNT_HW_REF_CPU_CYCLES = C.PERF_COUNT_HW_REF_CPU_CYCLES
|
|
|
+
|
|
|
+ PERF_COUNT_HW_CACHE_L1D = C.PERF_COUNT_HW_CACHE_L1D
|
|
|
+ PERF_COUNT_HW_CACHE_L1I = C.PERF_COUNT_HW_CACHE_L1I
|
|
|
+ PERF_COUNT_HW_CACHE_LL = C.PERF_COUNT_HW_CACHE_LL
|
|
|
+ PERF_COUNT_HW_CACHE_DTLB = C.PERF_COUNT_HW_CACHE_DTLB
|
|
|
+ PERF_COUNT_HW_CACHE_ITLB = C.PERF_COUNT_HW_CACHE_ITLB
|
|
|
+ PERF_COUNT_HW_CACHE_BPU = C.PERF_COUNT_HW_CACHE_BPU
|
|
|
+ PERF_COUNT_HW_CACHE_NODE = C.PERF_COUNT_HW_CACHE_NODE
|
|
|
+
|
|
|
+ PERF_COUNT_HW_CACHE_OP_READ = C.PERF_COUNT_HW_CACHE_OP_READ
|
|
|
+ PERF_COUNT_HW_CACHE_OP_WRITE = C.PERF_COUNT_HW_CACHE_OP_WRITE
|
|
|
+ PERF_COUNT_HW_CACHE_OP_PREFETCH = C.PERF_COUNT_HW_CACHE_OP_PREFETCH
|
|
|
+
|
|
|
+ PERF_COUNT_HW_CACHE_RESULT_ACCESS = C.PERF_COUNT_HW_CACHE_RESULT_ACCESS
|
|
|
+ PERF_COUNT_HW_CACHE_RESULT_MISS = C.PERF_COUNT_HW_CACHE_RESULT_MISS
|
|
|
+
|
|
|
+ PERF_COUNT_SW_CPU_CLOCK = C.PERF_COUNT_SW_CPU_CLOCK
|
|
|
+ PERF_COUNT_SW_TASK_CLOCK = C.PERF_COUNT_SW_TASK_CLOCK
|
|
|
+ PERF_COUNT_SW_PAGE_FAULTS = C.PERF_COUNT_SW_PAGE_FAULTS
|
|
|
+ PERF_COUNT_SW_CONTEXT_SWITCHES = C.PERF_COUNT_SW_CONTEXT_SWITCHES
|
|
|
+ PERF_COUNT_SW_CPU_MIGRATIONS = C.PERF_COUNT_SW_CPU_MIGRATIONS
|
|
|
+ PERF_COUNT_SW_PAGE_FAULTS_MIN = C.PERF_COUNT_SW_PAGE_FAULTS_MIN
|
|
|
+ PERF_COUNT_SW_PAGE_FAULTS_MAJ = C.PERF_COUNT_SW_PAGE_FAULTS_MAJ
|
|
|
+ PERF_COUNT_SW_ALIGNMENT_FAULTS = C.PERF_COUNT_SW_ALIGNMENT_FAULTS
|
|
|
+ PERF_COUNT_SW_EMULATION_FAULTS = C.PERF_COUNT_SW_EMULATION_FAULTS
|
|
|
+ PERF_COUNT_SW_DUMMY = C.PERF_COUNT_SW_DUMMY
|
|
|
+
|
|
|
+ PERF_SAMPLE_IP = C.PERF_SAMPLE_IP
|
|
|
+ PERF_SAMPLE_TID = C.PERF_SAMPLE_TID
|
|
|
+ PERF_SAMPLE_TIME = C.PERF_SAMPLE_TIME
|
|
|
+ PERF_SAMPLE_ADDR = C.PERF_SAMPLE_ADDR
|
|
|
+ PERF_SAMPLE_READ = C.PERF_SAMPLE_READ
|
|
|
+ PERF_SAMPLE_CALLCHAIN = C.PERF_SAMPLE_CALLCHAIN
|
|
|
+ PERF_SAMPLE_ID = C.PERF_SAMPLE_ID
|
|
|
+ PERF_SAMPLE_CPU = C.PERF_SAMPLE_CPU
|
|
|
+ PERF_SAMPLE_PERIOD = C.PERF_SAMPLE_PERIOD
|
|
|
+ PERF_SAMPLE_STREAM_ID = C.PERF_SAMPLE_STREAM_ID
|
|
|
+ PERF_SAMPLE_RAW = C.PERF_SAMPLE_RAW
|
|
|
+ PERF_SAMPLE_BRANCH_STACK = C.PERF_SAMPLE_BRANCH_STACK
|
|
|
+
|
|
|
+ PERF_SAMPLE_BRANCH_USER = C.PERF_SAMPLE_BRANCH_USER
|
|
|
+ PERF_SAMPLE_BRANCH_KERNEL = C.PERF_SAMPLE_BRANCH_KERNEL
|
|
|
+ PERF_SAMPLE_BRANCH_HV = C.PERF_SAMPLE_BRANCH_HV
|
|
|
+ PERF_SAMPLE_BRANCH_ANY = C.PERF_SAMPLE_BRANCH_ANY
|
|
|
+ PERF_SAMPLE_BRANCH_ANY_CALL = C.PERF_SAMPLE_BRANCH_ANY_CALL
|
|
|
+ PERF_SAMPLE_BRANCH_ANY_RETURN = C.PERF_SAMPLE_BRANCH_ANY_RETURN
|
|
|
+ PERF_SAMPLE_BRANCH_IND_CALL = C.PERF_SAMPLE_BRANCH_IND_CALL
|
|
|
+
|
|
|
+ PERF_FORMAT_TOTAL_TIME_ENABLED = C.PERF_FORMAT_TOTAL_TIME_ENABLED
|
|
|
+ PERF_FORMAT_TOTAL_TIME_RUNNING = C.PERF_FORMAT_TOTAL_TIME_RUNNING
|
|
|
+ PERF_FORMAT_ID = C.PERF_FORMAT_ID
|
|
|
+ PERF_FORMAT_GROUP = C.PERF_FORMAT_GROUP
|
|
|
+
|
|
|
+ PERF_RECORD_MMAP = C.PERF_RECORD_MMAP
|
|
|
+ PERF_RECORD_LOST = C.PERF_RECORD_LOST
|
|
|
+ PERF_RECORD_COMM = C.PERF_RECORD_COMM
|
|
|
+ PERF_RECORD_EXIT = C.PERF_RECORD_EXIT
|
|
|
+ PERF_RECORD_THROTTLE = C.PERF_RECORD_THROTTLE
|
|
|
+ PERF_RECORD_UNTHROTTLE = C.PERF_RECORD_UNTHROTTLE
|
|
|
+ PERF_RECORD_FORK = C.PERF_RECORD_FORK
|
|
|
+ PERF_RECORD_READ = C.PERF_RECORD_READ
|
|
|
+ PERF_RECORD_SAMPLE = C.PERF_RECORD_SAMPLE
|
|
|
+
|
|
|
+ PERF_CONTEXT_HV = C.PERF_CONTEXT_HV
|
|
|
+ PERF_CONTEXT_KERNEL = C.PERF_CONTEXT_KERNEL
|
|
|
+ PERF_CONTEXT_USER = C.PERF_CONTEXT_USER
|
|
|
+
|
|
|
+ PERF_CONTEXT_GUEST = C.PERF_CONTEXT_GUEST
|
|
|
+ PERF_CONTEXT_GUEST_KERNEL = C.PERF_CONTEXT_GUEST_KERNEL
|
|
|
+ PERF_CONTEXT_GUEST_USER = C.PERF_CONTEXT_GUEST_USER
|
|
|
+
|
|
|
+ PERF_FLAG_FD_NO_GROUP = C.PERF_FLAG_FD_NO_GROUP
|
|
|
+ PERF_FLAG_FD_OUTPUT = C.PERF_FLAG_FD_OUTPUT
|
|
|
+ PERF_FLAG_PID_CGROUP = C.PERF_FLAG_PID_CGROUP
|
|
|
+)
|
|
|
+
|
|
|
// Platform ABI and calling convention
|
|
|
|
|
|
// Bit field masks for interoperability with C code that uses bit fields.
|