From 2abf5add8251038f1b8af80f368fa4fffd66b37d Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Sun, 10 May 2026 22:43:46 +0300 Subject: Update content for md --- gemfeed/2026-05-11-unveiling-ior-ng-part-2.md | 20 +++++++++++++++----- gemfeed/index.md | 2 +- index.md | 4 ++-- uptime-stats.md | 16 ++++++++-------- 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 | +-----+------+-------+-------------------------------+ ``` -- cgit v1.2.3