blob: a2be14aa74d80741ec5514c4d02b56df94947d8a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
# AGENTS.md
This file provides guidance to AI coding assistants working with the I/O Riot NG (ior) codebase.
## Build/Test Commands
**Prerequisites**: Ensure libbpfgo is cloned at `../libbpfgo` relative to this repository.
```bash
make all # Build everything (BPF objects and Go binary)
make test # Run all tests
make test_with_name TEST_NAME=TestEventloop # Run specific test
go test ./internal/event -v # Run tests for specific package
make generate # Generate code (required after modifying tracepoint definitions)
make bench # Run benchmarks
make clean # Clean build artifacts
```
## Code Generation
**Run `make generate` before building when tracepoint definitions change!**
Three Raku scripts generate code from Linux kernel tracepoint data:
```bash
make generate # Generate all code (C and Go)
make -C internal/c generate # Generate C tracepoint handlers from /sys/kernel/tracing
make -C internal/types generate # Generate Go types from C structs
make -C internal/tracepoints generate # Generate Go tracepoint list
```
Generated files (do not edit manually):
- `internal/c/generated_tracepoints.c` - BPF C handlers for syscall tracepoints
- `internal/types/generated_types.go` - Go structs matching C structs + type mappings
- `internal/tracepoints/generated_tracepoints.go` - List of available syscall tracepoints
## Architecture
- **Entry point**: `cmd/ior/main.go` - Linux-only BPF-based I/O syscall tracer
- **Core packages**: `/internal/event/` (BPF event handling), `/internal/flamegraph/` (FlameGraph generation), `/internal/c/` (BPF programs)
- **Output**: Compressed zstd files, collapsed stack format compatible with Inferno FlameGraphs
## Code Style
- Standard Go conventions with static linking (`-ldflags '-w -extldflags "-static"'`)
- Keep functions under 50 lines, refactor larger code to `/internal/` packages
- Use generated types from `/internal/types/generated_types.go` for kernel-userspace communication
- BPF C code in `/internal/c/ior.bpf.c` should be minimal for verification
- Import style: `"ior/internal/packagename"` for internal packages
- Error handling: Return errors, don't panic except for setup validation
|