diff options
| author | Paul Buetow <paul@buetow.org> | 2026-05-10 22:43:45 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-05-10 22:43:45 +0300 |
| commit | a6637a63df5286a18cd4aea25719ef4b4a164803 (patch) | |
| tree | 93650ca22bb4b42abdc9521c5a5f4f57604b09d2 /gemfeed/atom.xml | |
| parent | f728cc9dec3a80088bc1d75739c34ab6acd27d31 (diff) | |
Update content for html
Diffstat (limited to 'gemfeed/atom.xml')
| -rw-r--r-- | gemfeed/atom.xml | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/gemfeed/atom.xml b/gemfeed/atom.xml index 71ab0dad..982d99d8 100644 --- a/gemfeed/atom.xml +++ b/gemfeed/atom.xml @@ -1,16 +1,16 @@ <?xml version="1.0" encoding="utf-8"?> <feed xmlns="http://www.w3.org/2005/Atom"> - <updated>2026-05-10T22:41:22+03:00</updated> + <updated>2026-05-10T22:43:40+03:00</updated> <title>foo.zone feed</title> <subtitle>To be in the .zone!</subtitle> <link href="https://foo.zone/gemfeed/atom.xml" rel="self" /> <link href="https://foo.zone/" /> <id>https://foo.zone/</id> <entry> - <title>1) Enable repos and install build dependencies. CRB ships zlib-static / glibc-static.</title> + <title>Unveiling I/O Riot NG — Part 2: install and compile once, run everywhere</title> <link href="https://foo.zone/gemfeed/2026-05-11-unveiling-ior-ng-part-2.html" /> <id>https://foo.zone/gemfeed/2026-05-11-unveiling-ior-ng-part-2.html</id> - <updated>2026-05-10T22:39:24+03:00</updated> + <updated>2026-05-10T22:43:39+03:00</updated> <author> <name>Paul Buetow aka snonux</name> <email>paul@dev.buetow.org</email> @@ -18,7 +18,7 @@ <summary>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).</summary> <content type="xhtml"> <div xmlns="http://www.w3.org/1999/xhtml"> - <span> (or Podman)# Unveiling I/O Riot NG — Part 2: install and compile once, run everywhere</span><br /> + <h1 style='display: inline' id='unveiling-io-riot-ng--part-2-install-and-compile-once-run-everywhere'>Unveiling I/O Riot NG — Part 2: install and compile once, run everywhere</h1><br /> <br /> <span>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).</span><br /> <br /> @@ -30,6 +30,7 @@ <h2 style='display: inline' id='table-of-contents'>Table of Contents</h2><br /> <br /> <ul> +<li><a href='#unveiling-io-riot-ng--part-2-install-and-compile-once-run-everywhere'>Unveiling I/O Riot NG — Part 2: install and compile once, run everywhere</a></li> <li>⇢ <a href='#installing-ior'>Installing ior</a></li> <li>⇢ ⇢ <a href='#why-native-installation-is-a-mess'>Why native installation is a mess</a></li> <li>⇢ ⇢ <a href='#what-the-docker-build-is-actually-doing'>What the Docker build is actually doing</a></li> @@ -44,6 +45,10 @@ </ul><br /> <h2 style='display: inline' id='installing-ior'>Installing ior</h2><br /> <br /> +<span class='quote'>Published at 2026-05-10T22:41:23+03:00</span><br /> +<br /> +<span class='quote'>Published at 2026-05-10T22:39:24+03:00</span><br /> +<br /> <span>The short answer: Use Docker (or Podman). One command, no toolchain setup, works from any Docker-capable Linux host with BTF available:</span><br /> <br /> <!-- Generator: GNU source-highlight 3.1.9 @@ -135,6 +140,8 @@ sudo ./ior -plain -duration <font color="#000000">5</font> <br /> <span>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.</span><br /> <br /> +<a class='textlink' href='https://ebpf.io'>eBPF — the project's umbrella site (docs, talks, ecosystem)</a><br /> +<br /> <span><span class='inlinecode'>ior</span> plugs into the syscall tracepoints (<span class='inlinecode'>sys_enter_openat</span>, <span class='inlinecode'>sys_exit_read</span>, 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.</span><br /> <br /> <span>The shape of the data flow:</span><br /> @@ -162,10 +169,15 @@ sudo ./ior -plain -duration <font color="#000000">5</font> <br /> <span>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:</span><br /> <br /> +<a class='textlink' href='https://github.com/libbpf/libbpf'>libbpf — the upstream C library</a><br /> +<br /> <ul> <li>libbpfgo (Aqua Security): a thin cgo wrapper around libbpf. You ship libbpf along with your binary and call into the same C API that <span class='inlinecode'>bpftool</span> and <span class='inlinecode'>perf</span> use.</li> <li>cilium/ebpf: a from-scratch pure-Go reimplementation of everything libbpf does (ELF parser, BTF resolver, syscall layer, the lot).</li> </ul><br /> +<a class='textlink' href='https://github.com/aquasecurity/libbpfgo'>libbpfgo — Aqua Security's cgo wrapper around libbpf</a><br /> +<a class='textlink' href='https://github.com/cilium/ebpf'>cilium/ebpf — pure-Go reimplementation</a><br /> +<br /> <span>I went with libbpfgo specifically because it's a wrapper, not a reimplementation.</span><br /> <br /> <h2 style='display: inline' id='co-re--the-part-that-makes-the-binary-actually-portable'>CO-RE — the part that makes the binary actually portable</h2><br /> |
