summaryrefslogtreecommitdiff
path: root/docs
AgeCommit message (Collapse)Author
2026-05-29ioprio_set/ioprio_get: classify as Process familyPaul Buetow
Audit of ioprio_set found a family inconsistency. ioprio_set(which, who, ioprio) and ioprio_get(which, who) query/set the I/O scheduling class and priority of a process, process group, or user. They are the direct I/O-priority analogues of getpriority/setpriority (the CPU nice value) and share the identical which/who selector signature, yet were falling through to FamilyMisc while getpriority/setpriority are FamilyProcess. Reclassify both ioprio syscalls to FamilyProcess for consistency with their priority siblings, update docs/syscall-tracing-plan.md, and regenerate the tracepoint/type artifacts (mage generate is idempotent). Argument capture is unchanged and confirmed correct: the args are all ints (which/who/ioprio), none named fd/path, so ClassifyFormat returns KindNone and the generator promotes the enter format to KindNull (null_event). In particular the 'who' argument (a pid/pgid/uid, never an fd) is not misclassified as KindFd. The exit is a ret_event (UNCLASSIFIED, int 0/-1). Add lock-in tests: - TestClassifyIoprioNullKind asserts KindNone/KindNull using the real kernel tracepoint fields, proving 'who' is not captured as an fd. - Family assertions for the ioprio pair alongside getpriority/setpriority so a stray reclassification of any of them trips the test. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-29utime/utimes: classify as FS family (fix Misc misclassification)Paul Buetow
utime(2) and utimes(2) change a file's access/modification times by a real filesystem path (filename at args[0]). The path was already captured (KindPathname), but both syscalls fell through to FamilyMisc instead of joining their siblings utimensat/futimesat in FamilyFS. Add them to fsSyscalls and regenerate; the only generated change is trace IDs 1034-1037 flipping FamilyMisc -> FamilyFS. Lock-in coverage: - family_test.go asserts utime/utimes/utimensat/futimesat are all FamilyFS. - classify_test.go + FormatUtime fixture assert utime is KindPathname with PathnameField "filename" (path captured even though it is a char* string, unlike domain/host name args). - New ioworkload scenarios utime-basic/utimes/enoent and integration tests TestUtimeBasic/Utimes/Enoent verify the path is captured at runtime, including on the ENOENT error path. Docs updated: moved utime/utimes from Misc to FS in docs/syscall-tracing-plan.md to keep the drift tests green. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-29classify: move lsm_* syscalls from Misc to Security familyPaul Buetow
The Linux Security Module introspection syscalls lsm_list_modules, lsm_get_self_attr and lsm_set_self_attr (Linux 6.8+) were classified as FamilyMisc while every sibling LSM/security syscall (landlock_*, keyctl, add_key, request_key, seccomp) is FamilySecurity. This audited inconsistency is fixed by adding the three lsm_* entries to the syscallFamilies map; their kind stays KindNull (args are userspace pointers + flags, no fd/path) and the exit remains a ret_event. Docs (syscall-tracing-plan.md) updated accordingly, generated artifacts regenerated via mage generate, and lock-in family assertions added to TestClassifySyscallPairEmitsAllFamilies. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-29docs: sync IPC family list with generated map (futex reclassification)Paul Buetow
Commit 49b1641 reclassified the futex syscalls (futex, futex_requeue, futex_wait, futex_waitv, futex_wake) from FamilyMisc to FamilyIPC in the generated family map but left docs/syscall-tracing-plan.md listing them under Misc. This drift broke TestSyscallTracingPlanFamiliesStayInSyncWithGeneratedMap. Move the 5 futex syscalls into the documented IPC list (alphabetical order) and drop the stale Misc entries so the documented family membership matches the generated map again. The IPC rationale is already recorded in internal/generate/family.go (futexes are shared-memory synchronization/IPC primitives alongside the System V semaphores). Fixes regression tracked by task t10. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-28close_range: honor last bound and CLOSE_RANGE_CLOEXEC flagPaul Buetow
close_range was captured as a single-fd fd_event carrying only first, so the runtime evicted every tracked fd >= first, ignoring the last upper bound and the flags. Bounded calls wrongly dropped still-open higher fds, and CLOSE_RANGE_CLOEXEC (which keeps fds open) was treated as a full close. Reclassify close_range to the two_fd_event kind, mapping fd_a/fd_b/extra to first/last/flags. The runtime now closes only the inclusive [first, last] range (a negative last from ~0U means unbounded) and skips eviction when CLOSE_RANGE_CLOEXEC is set or the syscall fails. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-239c move Non-IO grouping policy from core stats/types into dashboardPaul Buetow
Snapshot.NonIOFamilies, Snapshot.NonIOFamiliesCount, and types.IsNonIOSyscallFamily encoded a TUI tab concept in core packages. Move this filtering into internal/tui/dashboard/nonio.go as unexported helpers so the dashboard owns its own grouping policy and Snapshot.Families remains the neutral core API. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-21q7 publish shipped syscall tracing coverage docsPaul Buetow
2026-05-19t6 update tutorial tab hotkeysPaul Buetow
2026-05-19t6 address family recording reviewPaul Buetow
2026-05-18t6 add syscall family dashboard aggregationPaul Buetow
2026-05-18j6: clean up phase a syscall docsPaul Buetow
2026-05-18j6: defer mmsg byte classificationPaul Buetow
2026-05-17docs: add comprehensive syscall tracing expansion planPaul Buetow
Plan-only document covering the ~230 Linux syscalls ior does not yet trace. For each not-yet-covered syscall the plan records whether it takes/returns a file descriptor, whether it has a meaningful bytes or size dimension that could feed the existing read/write/transfer accumulators, the suggested TracepointKind (existing or new), extra per-event metrics, and a priority tier. Also enumerates the taxonomy extensions required (new TracepointKind values, retClassification additions, family/dimension tags), risk areas (high-cardinality syscalls like futex/clock_gettime), and a phased rollout from "free wins" (network bytes already mapped but blocked by shouldIgnore) through process lifecycle to the long tail. No code changes.
2026-05-07update docs and ascii bannerPaul Buetow
2026-05-06updatesPaul Buetow
2026-05-06fixPaul Buetow
2026-05-06move demo/ to docs/tutorial/, commit assets, consolidate TUI docsPaul Buetow
- demo/ renamed to docs/tutorial/ (tapes, scripts, TUTORIAL.md) - docs/tutorial/assets/ added to git (51 MB of GIFs + PNGs); removed /demo/assets/ from .gitignore so images render on Codeberg - docs/tui-reference.md removed; its hotkey tables merged into a new "Hotkey Quick Reference" section at the end of TUTORIAL.md - TUTORIAL.md: updated install section (mage buildDocker, no GOTOOLCHAIN=auto), fixed README relative path (../../README.md), updated internal tapes/scripts/assets path prose - README.md: updated all demo/ image paths and links to docs/tutorial/; TUI and recording-modes links now point to TUTORIAL.md anchors - AGENTS.md: updated demo/ references to docs/tutorial/ - Magefile.go: updated demoDir/demoTapesDir/demoScriptsDir/demoRunTape/ demoSudoKeepers constants to docs/tutorial/ paths Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-06add Dockerfile and Rocky Linux 9 build docsPaul Buetow
Introduces a Docker-based build path so ior can be compiled on any Linux host without a native Rocky 9 toolchain setup: - Dockerfile: Rocky 9 minimal image with Go (version from ARG, default from go.mod), static libelf/libzstd built from source, libbpfgo at v0.9.2-libbpf-1.5.1, and mage; CMD runs mage generate + mage all against the repo root mounted as a volume. - scripts/build-with-docker.sh: reads GO_VERSION from go.mod, passes it as --build-arg to docker build, mounts tracefs and BTF into the container, writes the binary to the repo root. - Magefile.go: adds BuildDocker target that wraps the script. - README.md: simplified to the two build paths (Docker + native) with links to docs/; removed GOTOOLCHAIN=auto throughout. - docs/build-rocky-linux-9.md: full manual Rocky 9 steps, libbpfgo toolchain setup/rollback, compile-once-run-everywhere explanation, and timing semantics. - docs/tui-reference.md: complete TUI hotkey reference, recording mode details, and the .ior.zst vs Parquet trade-off table. - AGENTS.md: removed GOTOOLCHAIN=auto from all build commands. - internal/c/generated_tracepoints.c: regenerated against the host kernel. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-19moving the planPaul Buetow
2026-03-18cleanupPaul Buetow
2026-03-18feat: add ParquetValidate mage target and ClickHouse querying docsPaul Buetow
Adds a `mage parquetValidate` target that validates a Parquet recording via clickhouse-local in Docker (schema presence, row count, seq/time_ns sanity). Adds docs/parquet-querying.md with schema reference, invocation pattern, and seven example queries with representative outputs. Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-03-13perf: remove tui stream relay channelPaul Buetow
2026-03-13docs: add parquet recording perf baselinePaul Buetow
2026-03-12docs: finalize libbpfgo upgrade guidancePaul Buetow
2026-03-12chore: pin libbpfgo v0.9.2-libbpf-1.5.1 workflowPaul Buetow
2026-03-09docs: plan sortable dashboard table sorting (task 363)Paul Buetow
2026-03-09tui: harden paused flame renderingPaul Buetow
2026-03-08task 366: extract shared global filter typesPaul Buetow
2026-03-06refactor: remove web flamegrapher and keep TUI-onlyPaul Buetow
2026-03-05Make flame tab default and fix flame hotkey routingPaul Buetow