Documentation
¶
Index ¶
- type CacheOptions
- type ElfCache
- func (e *ElfCache) CacheByBuildID(buildID elf.BuildID, v SymbolNameResolver)
- func (e *ElfCache) CacheByStat(s Stat, v SymbolNameResolver)
- func (e *ElfCache) Cleanup()
- func (e *ElfCache) DebugInfo() ElfCacheDebugInfo
- func (e *ElfCache) GetSymbolsByBuildID(buildID elf.BuildID) SymbolNameResolver
- func (e *ElfCache) GetSymbolsByStat(s Stat) SymbolNameResolver
- func (e *ElfCache) NextRound()
- func (e *ElfCache) Update(buildIDCacheOptions GCacheOptions, sameFileCacheOptions GCacheOptions)
- type ElfCacheDebugInfo
- type ElfDebugInfo
- type ElfTable
- type ElfTableOptions
- type GCache
- func (g *GCache[K, V]) Cache(k K, v V)
- func (g *GCache[K, V]) Cleanup()
- func (g *GCache[K, V]) Each(f func(k K, v V))
- func (g *GCache[K, V]) EachLRU(f func(k K, v V))
- func (g *GCache[K, V]) EachRound(f func(k K, v V))
- func (g *GCache[K, V]) Get(k K) V
- func (g *GCache[K, V]) LRUSize() int
- func (g *GCache[K, V]) NextRound()
- func (g *GCache[K, V]) Remove(k K)
- func (g *GCache[K, V]) RoundSize() int
- func (g *GCache[K, V]) Update(options GCacheOptions)
- type GCacheDebugInfo
- type GCacheOptions
- type Metrics
- type PidKey
- type ProcMap
- type ProcMapPermissions
- type ProcTable
- type ProcTableDebugInfo
- type ProcTableOptions
- type Resource
- type Stat
- type Sym
- type SymTab
- type Symbol
- type SymbolCache
- func (sc *SymbolCache) Cleanup()
- func (sc *SymbolCache) ElfCacheDebugInfo() ElfCacheDebugInfo
- func (sc *SymbolCache) NextRound()
- func (sc *SymbolCache) PidCacheDebugInfo() GCacheDebugInfo[ProcTableDebugInfo]
- func (sc *SymbolCache) Resolve(pid uint32, addr uint64) Symbol
- func (sc *SymbolCache) UpdateOptions(options CacheOptions)
- type SymbolNameResolver
- type SymbolTab
- type SymbolTable
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type CacheOptions ¶
type CacheOptions struct {
PidCacheOptions GCacheOptions
BuildIDCacheOptions GCacheOptions
SameFileCacheOptions GCacheOptions
Metrics *Metrics // may be nil for tests
}
type ElfCache ¶
type ElfCache struct {
BuildIDCache *GCache[elf.BuildID, SymbolNameResolver]
SameFileCache *GCache[Stat, SymbolNameResolver]
}
func NewElfCache ¶
func NewElfCache(buildIDCacheOptions GCacheOptions, sameFileCacheOptions GCacheOptions) (*ElfCache, error)
func (*ElfCache) CacheByBuildID ¶
func (e *ElfCache) CacheByBuildID(buildID elf.BuildID, v SymbolNameResolver)
func (*ElfCache) CacheByStat ¶
func (e *ElfCache) CacheByStat(s Stat, v SymbolNameResolver)
func (*ElfCache) DebugInfo ¶
func (e *ElfCache) DebugInfo() ElfCacheDebugInfo
func (*ElfCache) GetSymbolsByBuildID ¶
func (e *ElfCache) GetSymbolsByBuildID(buildID elf.BuildID) SymbolNameResolver
func (*ElfCache) GetSymbolsByStat ¶
func (e *ElfCache) GetSymbolsByStat(s Stat) SymbolNameResolver
func (*ElfCache) Update ¶
func (e *ElfCache) Update(buildIDCacheOptions GCacheOptions, sameFileCacheOptions GCacheOptions)
type ElfCacheDebugInfo ¶
type ElfCacheDebugInfo struct {
BuildIDCache GCacheDebugInfo[elf.SymTabDebugInfo] `river:"build_id_cache,attr,optional"`
SameFileCache GCacheDebugInfo[elf.SymTabDebugInfo] `river:"same_file_cache,attr,optional"`
}
type ElfDebugInfo ¶
type ElfTable ¶
type ElfTable struct {
// contains filtered or unexported fields
}
func NewElfTable ¶
func (*ElfTable) DebugInfo ¶
func (et *ElfTable) DebugInfo() elf2.SymTabDebugInfo
type ElfTableOptions ¶
type GCache ¶
type GCache[K comparable, V Resource] struct { // contains filtered or unexported fields }
func NewGCache ¶
func NewGCache[K comparable, V Resource](options GCacheOptions) (*GCache[K, V], error)
func (*GCache[K, V]) Update ¶
func (g *GCache[K, V]) Update(options GCacheOptions)
type GCacheDebugInfo ¶
type GCacheDebugInfo[T any] struct { LRUSize int `river:"lru_size,attr,optional"` RoundSize int `river:"round_size,attr,optional"` LRU []T `river:"lru_dump,block,optional"` Round []T `river:"round_dump,block,optional"` }
func DebugInfo ¶
func DebugInfo[K comparable, V Resource, D any](g *GCache[K, V], ff func(K, V) D) GCacheDebugInfo[D]
type GCacheOptions ¶
type Metrics ¶
type Metrics struct {
ElfErrors *prometheus.CounterVec
ProcErrors *prometheus.CounterVec
KnownSymbols *prometheus.CounterVec
UnknownSymbols *prometheus.CounterVec
UnknownModules *prometheus.CounterVec
UnknownStacks *prometheus.CounterVec
}
func NewMetrics ¶
func NewMetrics(reg prometheus.Registerer) *Metrics
type ProcMap ¶
type ProcMap struct {
// The start address of current mapping.
StartAddr uint64
// The end address of the current mapping
EndAddr uint64
// The permissions for this mapping
Perms *ProcMapPermissions
// The current offset into the file/fd (e.g., shared libs)
Offset int64
// Device owner of this mapping (major:minor) in Mkdev format.
Dev uint64
// The inode of the device above
Inode uint64
// The file or psuedofile (or empty==anonymous)
Pathname string
}
ProcMap contains the process memory-mappings of the process read from `/proc/[pid]/maps`.
type ProcMapPermissions ¶
type ProcMapPermissions struct {
// mapping has the [R]ead flag set
Read bool
// mapping has the [W]rite flag set
Write bool
// mapping has the [X]ecutable flag set
Execute bool
Shared bool
// mapping is marked as [P]rivate (copy on write)
Private bool
}
ProcMapPermissions contains permission settings read from `/proc/[pid]/maps`.
type ProcTable ¶
type ProcTable struct {
// contains filtered or unexported fields
}
func NewProcTable ¶
func NewProcTable(logger log.Logger, options ProcTableOptions) *ProcTable
func (*ProcTable) DebugInfo ¶
func (p *ProcTable) DebugInfo() ProcTableDebugInfo
type ProcTableDebugInfo ¶
type ProcTableDebugInfo struct {
ElfTables map[string]elf.SymTabDebugInfo `river:"elfs,block,optional"`
Size int `river:"size,attr,optional"`
Pid int `river:"pid,attr,optional"`
}
type ProcTableOptions ¶
type ProcTableOptions struct {
Pid int
ElfTableOptions
}
type SymbolCache ¶
type SymbolCache struct {
// contains filtered or unexported fields
}
SymbolCache is responsible for resolving PC address to Symbol maintaining a pid -> ProcTable cache resolving kernel symbols
func NewSymbolCache ¶
func NewSymbolCache(logger log.Logger, options CacheOptions) (*SymbolCache, error)
func (*SymbolCache) Cleanup ¶
func (sc *SymbolCache) Cleanup()
func (*SymbolCache) ElfCacheDebugInfo ¶
func (sc *SymbolCache) ElfCacheDebugInfo() ElfCacheDebugInfo
func (*SymbolCache) NextRound ¶
func (sc *SymbolCache) NextRound()
func (*SymbolCache) PidCacheDebugInfo ¶
func (sc *SymbolCache) PidCacheDebugInfo() GCacheDebugInfo[ProcTableDebugInfo]
func (*SymbolCache) UpdateOptions ¶
func (sc *SymbolCache) UpdateOptions(options CacheOptions)
type SymbolNameResolver ¶
type SymbolNameResolver interface {
Refresh()
Cleanup()
DebugInfo() elf.SymTabDebugInfo
IsDead() bool
Resolve(addr uint64) string
}
type SymbolTab ¶
type SymbolTab struct {
// contains filtered or unexported fields
}
func NewKallsyms ¶
func NewSymbolTab ¶
func (*SymbolTab) DebugString ¶
type SymbolTable ¶
Source Files
¶
Click to show internal directories.
Click to hide internal directories.