summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-05-10 22:43:46 +0300
committerPaul Buetow <paul@buetow.org>2026-05-10 22:43:46 +0300
commit2abf5add8251038f1b8af80f368fa4fffd66b37d (patch)
tree3ccb80b088a2f29aee02ae045c1a68e9c51ef7eb
parentd0d9d764153fbda610abd8dd943c96a512059ef1 (diff)
Update content for md
-rw-r--r--gemfeed/2026-05-11-unveiling-ior-ng-part-2.md20
-rw-r--r--gemfeed/index.md2
-rw-r--r--index.md4
-rw-r--r--uptime-stats.md16
4 files changed, 26 insertions, 16 deletions
diff --git a/gemfeed/2026-05-11-unveiling-ior-ng-part-2.md b/gemfeed/2026-05-11-unveiling-ior-ng-part-2.md
index 3a7799e5..76e9915e 100644
--- a/gemfeed/2026-05-11-unveiling-ior-ng-part-2.md
+++ b/gemfeed/2026-05-11-unveiling-ior-ng-part-2.md
@@ -1,4 +1,6 @@
- (or Podman)# Unveiling I/O Riot NG — Part 2: install and compile once, run everywhere
+# Unveiling I/O Riot NG — Part 2: install and compile once, run everywhere
+
+> Published at 2026-05-10T22:43:39+03:00
This is Part 2 of three. Part 1 is the demo-driven tour: what ior looks like, how the dashboard tabs work, how filtering and recording behave. This part is about the installation for Rocky Linux 8 and 9 and, more interestingly, why you only have to do that dance on a single machine: the resulting binary is portable to every other Linux box thanks to CO-RE (Compile Once, Run Everywhere) plus full static linking. Part 3 is the under-the-hood companion (per-event schema, async-syscall caveats, the syscall-coverage probe generator, and post-mortem SQL on the parquet output).
@@ -9,10 +11,7 @@ This is Part 2 of three. Part 1 is the demo-driven tour: what ior looks like, ho
## Table of Contents
-> Published at 2026-05-10T22:41:23+03:00
-
-> Published at 2026-05-10T22:39:24+03:00
-
+* [⇢ Unveiling I/O Riot NG — Part 2: install and compile once, run everywhere](#unveiling-io-riot-ng--part-2-install-and-compile-once-run-everywhere)
* [⇢ ⇢ Installing ior](#installing-ior)
* [⇢ ⇢ ⇢ Why native installation is a mess](#why-native-installation-is-a-mess)
* [⇢ ⇢ ⇢ What the Docker build is actually doing](#what-the-docker-build-is-actually-doing)
@@ -27,6 +26,10 @@ This is Part 2 of three. Part 1 is the demo-driven tour: what ior looks like, ho
## Installing ior
+> Published at 2026-05-10T22:41:23+03:00
+
+> Published at 2026-05-10T22:39:24+03:00
+
The short answer: Use Docker (or Podman). One command, no toolchain setup, works from any Docker-capable Linux host with BTF available:
```sh
@@ -112,6 +115,8 @@ If you see `Probing for 5s` followed by CSV rows, the build is good. `mage build
If you haven't touched eBPF before: it's a small in-kernel bytecode VM. You compile a tiny C program, the kernel verifies it can't crash or loop forever, and then it runs every time some hook fires — a syscall enter/exit, a kprobe, a tracepoint, a network packet. The program writes events into a ring buffer that userspace mmaps and drains. No kernel module, no patched kernel, no debug symbols required.
+[eBPF — the project's umbrella site (docs, talks, ecosystem)](https://ebpf.io)
+
`ior` plugs into the syscall tracepoints (`sys_enter_openat`, `sys_exit_read`, etc.) and the BPF side does the bare minimum: timestamp the event, copy a few fields, push to a perf ring buffer. All the heavy lifting (string interning, latency math, aggregation, the dashboard) is in Go on the userspace side.
The shape of the data flow:
@@ -139,9 +144,14 @@ The shape of the data flow:
The kernel ships a C library called libbpf that handles loading the program, attaching it to hooks, managing maps, and reading the ring buffer. There are two well-known ways to drive that from Go:
+[libbpf — the upstream C library](https://github.com/libbpf/libbpf)
+
* libbpfgo (Aqua Security): a thin cgo wrapper around libbpf. You ship libbpf along with your binary and call into the same C API that `bpftool` and `perf` use.
* cilium/ebpf: a from-scratch pure-Go reimplementation of everything libbpf does (ELF parser, BTF resolver, syscall layer, the lot).
+[libbpfgo — Aqua Security's cgo wrapper around libbpf](https://github.com/aquasecurity/libbpfgo)
+[cilium/ebpf — pure-Go reimplementation](https://github.com/cilium/ebpf)
+
I went with libbpfgo specifically because it's a wrapper, not a reimplementation.
## CO-RE — the part that makes the binary actually portable
diff --git a/gemfeed/index.md b/gemfeed/index.md
index ca4a6c78..4d6cd119 100644
--- a/gemfeed/index.md
+++ b/gemfeed/index.md
@@ -2,7 +2,7 @@
## To be in the .zone!
-[2026-05-11 - 1) Enable repos and install build dependencies. CRB ships zlib-static / glibc-static.](./2026-05-11-unveiling-ior-ng-part-2.md)
+[2026-05-11 - Unveiling I/O Riot NG — Part 2: install and compile once, run everywhere](./2026-05-11-unveiling-ior-ng-part-2.md)
[2026-05-08 - Unveiling I/O Riot NG — Part 1: a guided tour](./2026-05-08-unveiling-ior-ng-part-1.md)
[2026-04-02 - f3s: Kubernetes with FreeBSD - Part 9: GitOps with ArgoCD](./2026-04-02-f3s-kubernetes-with-freebsd-part-9.md)
[2026-04-02 - Distributed Systems Simulator - Part 3: Advanced Examples and Protocol API](./2026-04-02-distributed-systems-simulator-part-3.md)
diff --git a/index.md b/index.md
index 4835c4c5..e4b28454 100644
--- a/index.md
+++ b/index.md
@@ -1,6 +1,6 @@
# Hello!
-> This site was generated at 2026-05-10T22:41:48+03:00 by `Gemtexter`
+> This site was generated at 2026-05-10T22:43:40+03:00 by `Gemtexter`
Welcome to the foo.zone!
@@ -20,7 +20,7 @@ Everything you read on this site is my personal opinion and experience. You can
### Posts
-[2026-05-11 - 1) Enable repos and install build dependencies. CRB ships zlib-static / glibc-static.](./gemfeed/2026-05-11-unveiling-ior-ng-part-2.md)
+[2026-05-11 - Unveiling I/O Riot NG — Part 2: install and compile once, run everywhere](./gemfeed/2026-05-11-unveiling-ior-ng-part-2.md)
[2026-05-08 - Unveiling I/O Riot NG — Part 1: a guided tour](./gemfeed/2026-05-08-unveiling-ior-ng-part-1.md)
[2026-04-02 - f3s: Kubernetes with FreeBSD - Part 9: GitOps with ArgoCD](./gemfeed/2026-04-02-f3s-kubernetes-with-freebsd-part-9.md)
[2026-04-02 - Distributed Systems Simulator - Part 3: Advanced Examples and Protocol API](./gemfeed/2026-04-02-distributed-systems-simulator-part-3.md)
diff --git a/uptime-stats.md b/uptime-stats.md
index 89600508..ff6cb2d5 100644
--- a/uptime-stats.md
+++ b/uptime-stats.md
@@ -1,6 +1,6 @@
# My machine uptime stats
-> This site was last updated at 2026-05-10T22:41:48+03:00
+> This site was last updated at 2026-05-10T22:43:40+03:00
The following stats were collected via `uptimed` on all of my personal computers over many years and the output was generated by `goprecords`, the global uptime records stats analyser of mine.
@@ -13,7 +13,7 @@ Also check out my blog post:
[Unveiling `guprecords.raku`: Uptime records with Raku (and also there is a version in Go now)](./gemfeed/2023-05-01-unveiling-guprecords:-uptime-records-with-raku.md)
-> Uptime stats were last updated Sun 10 May 22:41:48 EEST 2026
+> Uptime stats were last updated Sun 10 May 22:43:40 EEST 2026
## Top 20 Uptime's by Host
@@ -80,8 +80,8 @@ Boots is the total number of host boots over the entire lifespan.
| 1. | *f2 | 245 | FreeBSD 15.0-RELEASE-p4 |
| 2. | *f1 | 243 | FreeBSD 15.0-RELEASE-p4 |
| 3. | *f0 | 242 | FreeBSD 15.0-RELEASE-p4 |
-| 4. | *pi0 | 26 | Linux 6.1.31-v8.1.el9.altarch |
-| 5. | *pi2 | 26 | Linux 6.1.31-v8.1.el9.altarch |
+| 4. | *pi2 | 26 | Linux 6.1.31-v8.1.el9.altarch |
+| 5. | *pi0 | 26 | Linux 6.1.31-v8.1.el9.altarch |
| 6. | pi1 | 1 | Linux 6.1.31-v8.1.el9.altarch |
| 7. | pi3 | 1 | Linux 6.1.31-v8.1.el9.altarch |
+-----+------+-------+-------------------------------+
@@ -98,10 +98,10 @@ Score is calculated by combining all other metrics.
| 1. | *f1 | 75 | FreeBSD 15.0-RELEASE-p4 |
| 2. | *f2 | 75 | FreeBSD 15.0-RELEASE-p4 |
| 3. | *f0 | 74 | FreeBSD 15.0-RELEASE-p4 |
-| 4. | *pi2 | 8 | Linux 6.1.31-v8.1.el9.altarch |
-| 5. | *pi0 | 8 | Linux 6.1.31-v8.1.el9.altarch |
-| 6. | pi3 | 0 | Linux 6.1.31-v8.1.el9.altarch |
-| 7. | pi1 | 0 | Linux 6.1.31-v8.1.el9.altarch |
+| 4. | *pi0 | 8 | Linux 6.1.31-v8.1.el9.altarch |
+| 5. | *pi2 | 8 | Linux 6.1.31-v8.1.el9.altarch |
+| 6. | pi1 | 0 | Linux 6.1.31-v8.1.el9.altarch |
+| 7. | pi3 | 0 | Linux 6.1.31-v8.1.el9.altarch |
+-----+------+-------+-------------------------------+
```