Documentation ¶
Index ¶
- Constants
- func AddKprobe(name string, address string, onReturn bool, output string) (string, error)
- func GetAvailableTraceEvents() ([]string, error)
- func GetTraceEventFormat(name string) (uint16, map[string]TraceEventField, error)
- func GetTraceEventID(name string) (uint16, error)
- func ReadTraceEventFormat(name string, reader io.Reader) (uint16, map[string]TraceEventField, error)
- func ReadTraceEventID(name string, reader io.Reader) (uint16, error)
- func RemoveKprobe(name string) error
- type BranchEntry
- type CommRecord
- type CounterGroup
- type CounterValue
- type EventAttr
- type EventMonitor
- func (monitor *EventMonitor) Close(wait bool) error
- func (monitor *EventMonitor) Disable(eventid uint64)
- func (monitor *EventMonitor) DisableAll()
- func (monitor *EventMonitor) Enable(eventid uint64)
- func (monitor *EventMonitor) EnableAll()
- func (monitor *EventMonitor) RegisterKprobe(address string, onReturn bool, output string, fn TraceEventDecoderFn, ...) (uint64, error)
- func (monitor *EventMonitor) RegisterTracepoint(name string, fn TraceEventDecoderFn, options ...RegisterEventOption) (uint64, error)
- func (monitor *EventMonitor) Run(fn SampleDispatchFn) error
- func (monitor *EventMonitor) SetFilter(eventid uint64, filter string) error
- func (monitor *EventMonitor) Stop(wait bool)
- func (monitor *EventMonitor) UnregisterEvent(eventid uint64) error
- type EventMonitorOption
- func WithCgroup(cgroup string) EventMonitorOption
- func WithCgroups(cgroups []string) EventMonitorOption
- func WithDefaultEventAttr(defaultEventAttr *EventAttr) EventMonitorOption
- func WithFlags(flags uintptr) EventMonitorOption
- func WithPerfEventDir(dir string) EventMonitorOption
- func WithPid(pid int) EventMonitorOption
- func WithPids(pids []int) EventMonitorOption
- func WithRingBufferNumPages(numPages int) EventMonitorOption
- type ExitRecord
- type ForkRecord
- type LostRecord
- type RegisterEventOption
- type Sample
- type SampleDispatchFn
- type SampleID
- type SampleRecord
- type TraceEvent
- type TraceEventDecoderFn
- type TraceEventDecoderMap
- type TraceEventField
- type TraceEventSampleData
Constants ¶
const ( PERF_EVENT_IOC_ENABLE uintptr = 0x2400 + 0 PERF_EVENT_IOC_DISABLE = 0x2400 + 1 PERF_EVENT_IOC_REFRESH = 0x2400 + 2 PERF_EVENT_IOC_RESET = 0x2400 + 3 PERF_EVENT_IOC_PERIOD = 0x40080000 | (0x2400 + 4) PERF_EVENT_IOC_SET_OUTPUT = 0x2400 + 5 PERF_EVENT_IOC_SET_FILTER = 0x40080000 | (0x2400 + 6) PERF_EVENT_IOC_ID = 0x80080000 | (0x2400 + 7) PERF_EVENT_IOC_SET_BPF = 0x40040000 | (0x2400 + 8) PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40040000 | (0x2400 + 9) )
const ( PERF_FLAG_FD_NO_GROUP uintptr = 1 << iota PERF_FLAG_FD_OUTPUT PERF_FLAG_PID_CGROUP PERF_FLAG_FD_CLOEXEC )
const ( PERF_FORMAT_TOTAL_TIME_ENABLED uint64 = 1 << iota PERF_FORMAT_TOTAL_TIME_RUNNING PERF_FORMAT_ID PERF_FORMAT_GROUP )
const ( PERF_TYPE_HARDWARE uint32 = iota PERF_TYPE_SOFTWARE PERF_TYPE_TRACEPOINT PERF_TYPE_HW_CACHE PERF_TYPE_RAW PERF_TYPE_BREAKPOINT PERF_TYPE_MAX )
const ( PERF_COUNT_HW_CPU_CYCLES uint64 = iota PERF_COUNT_HW_INSTRUCTIONS PERF_COUNT_HW_CACHE_REFERENCES PERF_COUNT_HW_CACHE_MISSES PERF_COUNT_HW_BRANCH_INSTRUCTIONS PERF_COUNT_HW_BRANCH_MISSES PERF_COUNT_HW_BUS_CYCLES PERF_COUNT_HW_STALLED_CYCLES_FRONTEND PERF_COUNT_HW_STALLED_CYCLES_BACKEND PERF_COUNT_HW_REF_CPU_CYCLES PERF_COUNT_HW_MAX )
const ( PERF_COUNT_HW_CACHE_L1D uint64 = iota PERF_COUNT_HW_CACHE_L1I PERF_COUNT_HW_CACHE_LL PERF_COUNT_HW_CACHE_DTLB PERF_COUNT_HW_CACHE_ITLB PERF_COUNT_HW_CACHE_BPU PERF_COUNT_HW_CACHE_NODE PERF_COUNT_HW_CACHE_MAX )
const ( PERF_COUNT_HW_CACHE_OP_READ uint64 = iota PERF_COUNT_HW_CACHE_OP_WRITE PERF_COUNT_HW_CACHE_OP_PREFETCH PERF_COUNT_HW_CACHE_OP_MAX )
const ( PERF_COUNT_HW_CACHE_RESULT_ACCESS uint64 = iota PERF_COUNT_HW_CACHE_RESULT_MISS PERF_COUNT_HW_CACHE_RESULT_MAX )
const ( PERF_COUNT_SW_CPU_CLOCK uint64 = iota PERF_COUNT_SW_TASK_CLOCK PERF_COUNT_SW_PAGE_FAULTS PERF_COUNT_SW_CONTEXT_SWITCHES PERF_COUNT_SW_CPU_MIGRATIONS PERF_COUNT_SW_PAGE_FAULTS_MIN PERF_COUNT_SW_PAGE_FAULTS_MAJ PERF_COUNT_SW_ALIGNMENT_FAULTS PERF_COUNT_SW_EMULATION_FAULTS PERF_COUNT_SW_DUMMY PERF_COUNT_BPF_OUTPUT PERF_COUNT_SW_MAX )
const ( PERF_RECORD_INVALID uint32 = iota PERF_RECORD_MMAP PERF_RECORD_LOST PERF_RECORD_COMM PERF_RECORD_EXIT PERF_RECORD_THROTTLE PERF_RECORD_UNTHROTTLE PERF_RECORD_FORK PERF_RECORD_READ PERF_RECORD_SAMPLE PERF_RECORD_MMAP2 PERF_RECORD_AUX PERF_RECORD_ITRACE_START PERF_RECORD_LOST_SAMPLES PERF_RECORD_SWITCH PERF_RECORD_SWITCH_CPU_WIDE PERF_RECORD_MAX )
const ( PERF_SAMPLE_IP uint64 = 1 << iota PERF_SAMPLE_TID PERF_SAMPLE_TIME PERF_SAMPLE_ADDR PERF_SAMPLE_READ PERF_SAMPLE_CALLCHAIN PERF_SAMPLE_ID PERF_SAMPLE_CPU PERF_SAMPLE_PERIOD PERF_SAMPLE_STREAM_ID PERF_SAMPLE_RAW PERF_SAMPLE_BRANCH_STACK PERF_SAMPLE_REGS_USER PERF_SAMPLE_STACK_USER PERF_SAMPLE_WEIGHT PERF_SAMPLE_DATA_SRC PERF_SAMPLE_IDENTIFIER PERF_SAMPLE_TRANSACTION PERF_SAMPLE_REGS_INTR PERF_SAMPLE_MAX )
const (
PERF_EVENT_IOC_FLAG_GROUP uintptr = 1 << iota
)
const (
PERF_RECORD_MISC_COMM_EXEC uint16 = (1 << 13)
)
Variables ¶
This section is empty.
Functions ¶
func GetAvailableTraceEvents ¶
func GetTraceEventFormat ¶
func GetTraceEventFormat(name string) (uint16, map[string]TraceEventField, error)
func GetTraceEventID ¶
func ReadTraceEventFormat ¶
func RemoveKprobe ¶
Types ¶
type BranchEntry ¶
type CommRecord ¶
type CounterGroup ¶
type CounterGroup struct { TimeEnabled uint64 TimeRunning uint64 Values []CounterValue }
CounterGroup represents the read values of a group of counter events
type CounterValue ¶
type CounterValue struct { // Globally unique identifier for this counter event. Only // present if PERF_FORMAT_ID was specified. ID uint64 // The counter result Value uint64 }
CounterValue resepresents the read value of a counter event
type EventAttr ¶
type EventAttr struct { Type uint32 Size uint32 Config uint64 SamplePeriod uint64 SampleFreq uint64 SampleType uint64 ReadFormat uint64 Disabled bool Inherit bool Pinned bool Exclusive bool ExclusiveUser bool ExclusiveKernel bool ExclusiveHV bool ExclusiveIdle bool Mmap bool Comm bool Freq bool InheritStat bool EnableOnExec bool Task bool Watermark bool PreciseIP uint8 MmapData bool SampleIDAll bool ExcludeHost bool ExcludeGuest bool ExcludeCallchainKernel bool ExcludeCallchainUser bool Mmap2 bool CommExec bool UseClockID bool ContextSwitch bool WakeupEvents uint32 WakeupWatermark uint32 BPType uint32 BPAddr uint64 Config1 uint64 BPLen uint64 Config2 uint64 BranchSampleType uint64 SampleRegsUser uint64 SampleStackUser uint32 ClockID int32 SampleRegsIntr uint64 AuxWatermark uint32 SampleMaxStack uint16 }
EventAttr is a translation of the Linux kernel's struct perf_event_attr into Go. It provides detailed configuration information for the event being created.
type EventMonitor ¶
type EventMonitor struct {
// contains filtered or unexported fields
}
func NewEventMonitor ¶
func NewEventMonitor(options ...EventMonitorOption) (*EventMonitor, error)
func (*EventMonitor) Close ¶
func (monitor *EventMonitor) Close(wait bool) error
func (*EventMonitor) Disable ¶
func (monitor *EventMonitor) Disable(eventid uint64)
func (*EventMonitor) DisableAll ¶
func (monitor *EventMonitor) DisableAll()
func (*EventMonitor) Enable ¶
func (monitor *EventMonitor) Enable(eventid uint64)
func (*EventMonitor) EnableAll ¶
func (monitor *EventMonitor) EnableAll()
func (*EventMonitor) RegisterKprobe ¶
func (monitor *EventMonitor) RegisterKprobe(address string, onReturn bool, output string, fn TraceEventDecoderFn, options ...RegisterEventOption) (uint64, error)
func (*EventMonitor) RegisterTracepoint ¶
func (monitor *EventMonitor) RegisterTracepoint(name string, fn TraceEventDecoderFn, options ...RegisterEventOption) (uint64, error)
func (*EventMonitor) Run ¶
func (monitor *EventMonitor) Run(fn SampleDispatchFn) error
func (*EventMonitor) SetFilter ¶
func (monitor *EventMonitor) SetFilter(eventid uint64, filter string) error
func (*EventMonitor) Stop ¶
func (monitor *EventMonitor) Stop(wait bool)
func (*EventMonitor) UnregisterEvent ¶
func (monitor *EventMonitor) UnregisterEvent(eventid uint64) error
type EventMonitorOption ¶
type EventMonitorOption func(*eventMonitorOptions)
func WithCgroup ¶
func WithCgroup(cgroup string) EventMonitorOption
func WithCgroups ¶
func WithCgroups(cgroups []string) EventMonitorOption
func WithDefaultEventAttr ¶
func WithDefaultEventAttr(defaultEventAttr *EventAttr) EventMonitorOption
func WithFlags ¶
func WithFlags(flags uintptr) EventMonitorOption
func WithPerfEventDir ¶
func WithPerfEventDir(dir string) EventMonitorOption
func WithPid ¶
func WithPid(pid int) EventMonitorOption
func WithPids ¶
func WithPids(pids []int) EventMonitorOption
func WithRingBufferNumPages ¶
func WithRingBufferNumPages(numPages int) EventMonitorOption
type ExitRecord ¶
type ForkRecord ¶
type LostRecord ¶
type RegisterEventOption ¶
type RegisterEventOption func(*registerEventOptions)
func WithEventAttr ¶
func WithEventAttr(eventAttr *EventAttr) RegisterEventOption
func WithEventsDisabled ¶
func WithEventsDisabled() RegisterEventOption
func WithEventsEnabled ¶
func WithEventsEnabled() RegisterEventOption
func WithFilter ¶
func WithFilter(filter string) RegisterEventOption
type Sample ¶
type Sample struct { Record interface{} SampleID // contains filtered or unexported fields }
type SampleDispatchFn ¶
type SampleRecord ¶
type SampleRecord struct { SampleID uint64 IP uint64 Pid uint32 Tid uint32 Time uint64 Addr uint64 ID uint64 StreamID uint64 CPU uint32 Period uint64 V CounterGroup IPs []uint64 RawData []byte Branches []BranchEntry UserABI uint64 UserRegs []uint64 StackData []uint64 Weight uint64 DataSrc uint64 Transaction uint64 IntrABI uint64 IntrRegs []uint64 }
type TraceEvent ¶
TraceEvent represents the common header on all trace events
type TraceEventDecoderFn ¶
type TraceEventDecoderFn func(*SampleRecord, TraceEventSampleData) (interface{}, error)
type TraceEventDecoderMap ¶
type TraceEventDecoderMap struct { sync.Mutex // used only by writers // contains filtered or unexported fields }
func NewTraceEventDecoderMap ¶
func NewTraceEventDecoderMap() *TraceEventDecoderMap
func (*TraceEventDecoderMap) AddDecoder ¶
func (m *TraceEventDecoderMap) AddDecoder(name string, fn TraceEventDecoderFn) (uint16, error)
Add a decoder safely. Proper synchronization is used to prevent multiple writers from stomping on each other while allowing readers to always operate without locking
func (*TraceEventDecoderMap) DecodeSample ¶
func (m *TraceEventDecoderMap) DecodeSample(sample *SampleRecord) (interface{}, error)
func (*TraceEventDecoderMap) RemoveDecoder ¶
func (m *TraceEventDecoderMap) RemoveDecoder(name string)
Remove a decoder safely. Proper synchronization is used to prevent multiple writers from stomping on each other while allowing readers to always operate without locking
type TraceEventField ¶
type TraceEventSampleData ¶
type TraceEventSampleData map[string]interface{}