Reading Notes on "Issues Driven"
This is a book I bought several years ago and left unread, but when I read it, the content really resonated with me. Being highly productive doesn’t mean you can complete tasks faster than others or handle a large volume. Time (and many other things) is finite, so identifying the right problems to solve is important. You can’t become a highly productive person by working to your limits or competing on work hours....
Ishigaki Island Marathon 2026
On 2026/01/18, I ran a half marathon on Ishigaki Island. It seems it was usually rainy in past years, but this year there was only a little rain before the start, and after that it was cloudy. I think it was about 20°C, but it didn’t particularly affect my running. Since I hurt my knee and retired in the previous marathon, and recently even light running sometimes caused the same pain, I decided to aim for completion without pushing myself....
97 Things Every Programmer Should Know - Reading Notes
I was reading 97 Things Every Programmer Should Know in my spare time. Here are notes on what caught my attention. Technical debt must be repaid immediately in the next iteration. Otherwise, the interest will accumulate. You must resist the impulse and temptation to rewrite from scratch. Make the most of existing code. When adding new changes, improve at least one place. Writing code is designing. It’s not mechanical work, but creative work....
Learning eBPF Reading Notes
I read Learning eBPF, so I’d like to leave some reading notes. This book was released last year and I’ve been wanting to read it for a while. lizrice/learning-ebpf - github.com has abundant sample code for reference. I’ll just note things that caught my attention personally, without paying much attention to context. BCC It starts with an example using BCC. Using bpf_trace_printk() allows you to output text to the pseudo-file /sys/kernel/debug/tracing/trace_pipe....
Using SRv6 with OVS
OVS (Open vSwitch) 3.2 added support for SRv61, so let’s try using it. To put it simply, you create a port with type=srv6 as shown below. Since it’s implemented using the same framework as existing tunneling protocols like VXLAN and Geneve, you specify both tunnel endpoints (corresponding to SIDs on both sides in SRv6) with options:remote_ip and options:local_ip. In addition to these, SRv6 has a special option options:srv6_segs to set intermediate routers as a Segment List....
Ansible Practical Guide [Basic Edition] 4th Edition Reading Notes
Apparently I studied Ansible in 2016 1, but I completely forgot, so I read Ansible Practical Guide 4th Edition [Basic Edition] again. I’ll note down what caught my attention. Playbook Hierarchy One Playbook consists of several Plays. A Play consists of four sections: Targets, Vars, Tasks, and Handlers. Targets and Tasks are basic sections, used to specify target hosts and a list of tasks to execute, respectively. Vars and Handlers are auxiliary sections, used to specify variables and execution control (for example, restarting systemd services), respectively....
Learning Kubebuilder: Reading Notes
I read Learning Kubebuilder. It was a concise and well-organized resource that taught me a lot. My impression after reading is that Custom Resources (CRs) have high flexibility, making them tempting to create, but carelessly increasing their number makes them unmanageable. I felt it’s probably best to adopt them only for issues that fundamentally cannot be realized without CRs, and to create and use them minimally. For example, regarding the MarkdownView used as an example here, in reality it would be better to realize it with a combination of standard resources rather than a CR....
Running SRv6 L3VPN with Mininet
I conducted an experiment to run SRv6 L3VPN in Mininet 1. The script is here. I was able to run it with a small configuration as shown in the diagram, so I’d like to introduce it here. Two routers (r1 and r2) are responsible for Encap/Decap with SRv6, and they exchange L3VPN information between r1 and r2 via eBGP. r1 and r2 each have two VRFs (vrf10 and vrf20), and tenants are separated by VRF (Tenant10 and Tenant20)....
Created a TRex Wrapper
First, let me introduce TRex. TRex 1 is a software-implemented traffic generator that supports two modes: Stateful/Stateless. Stateless is a mode for generating packet sequences to a stateless target DUT (Device Under Test), and can be used as a performance measurement tool for switching and routing. Although TRex has many features, personally I often need to generate simple TCP/IP packet sequences while changing their size, so I created autotrex 2 as a wrapper for TRex....
Reading Notes on "CPU Introduction for Programmers"
This was an excellent book with key points organized in a very clear way. I was especially pleased that it included experimental sample code written in assembly 1. Even if you know concepts theoretically, running them gives you a deeper understanding. Here I’ll leave some miscellaneous notes for myself. Assembly Notation Intel syntax is easier to understand than AT&T syntax. I feel the same way. In Intel syntax, the destination comes on the left side....
Building a Virtual Environment on Intel NUC 12 Pro
I bought an Intel NUC 12 Pro 1 as a development machine and installed Proxmox VE 2. Until now, I was using an old Thinkpad as a development machine, so I think it’s become more comfortable. The specs are like this. I wanted to prioritize memory and disk, so I went with more. On the other hand, I didn’t care much about core count, so I chose the i3 model. I considered a vPro-equipped model, but I passed on it because of limited availability and the assumption that virtualization would reduce the frequency of remote management operations....
Installing LUA4-U3-AGTE-NBK Driver
It seems I broke something under /lib/modules while playing with a privileged container. I’m not sure why, but when going out from this machine to the outside, it sometimes connects and sometimes doesn’t. I’m using a BUFFALO LUA4-U3-AGTE-NBK 1 adapter that receives Ethernet as USB Type-A, and the driver for it seems suspicious. The log looks like this. ubuntu2004thinkpad:~$ dmesg IPv6: ADDRCONF(NETDEV_CHANGE): enx9096f349a025: link becomes ready usb 3-1: USB disconnect, device number 45 ax88179_178a 3-1:1....
vhost-user Negotiation
Introduction When adapting gokvm to vhost-user, I investigated the initialization part, so I’m leaving it as a memo. The QEMU documentation Vhost-user Protocol 1 summarizes it in detail, but there are parts that can’t be understood without actually running it (exception handling, request order, log output, etc.), so I tried it. After various trial and error, I was able to test it easily with just QEMU and DPDK. Here, I ran QEMU in server mode and DPDK in client mode....
Self-Analysis Tools
I found the results of the StrengthsFinder test I took a year ago. I’ll keep it here as it might be useful someday. Furthermore, I found something similar called 16personalities.com today and tried it. StrengthsFinder Conducted on January 18, 2021. You need to buy a book for about 2,000 yen, and the test takes about an hour. 16personalities Conducted on January 31, 2023. You can take the test for free in about 15 minutes....
Self-made VMM: u-root-based initrd
Introduction Continuation of gokvm development 1 2 3 4 5 6. As introduced up to last time, by supporting virtio-blk and virtio-net, the virtual machine can now communicate with the outside through IO. This time, I changed the initrd from busybox-based to u-root-based, so I’ll talk about that. 0d89a47f Introduction of u-root-based initrd I received a Pull Request suggesting that a VMM written in Go language should have an initrd also written in Go....
virtio-blk Support for Custom VMM
Introduction Continuing gokvm development 1 2 3 4 5. Following the previous virtio-net support, I added support for virtio-blk. The data structure and behavior of virt queue can be reused as is. I’m impressed that Virtio is well designed in this regard. 7389ff59 Adjust Guest Kernel Compile Options To achieve block IO through the filesystem from the guest kernel, I enabled the following options: CONFIG_VIRTIO_BLK=y CONFIG_XFS_FS=y CONFIG_EXT3_FS=y CONFIG_EXT4_FS=y 4f4bbb78 virtio-blk Implementation Now, let’s move on to the main topic of virtio-blk implementation....
virtio-net Support for Custom VMM
Introduction Continuing gokvm development 1 2 3 4. Through recent development, I was able to provide a virtual NIC to VMs on gokvm via virtio-net. Networking support was one of the initial goals, so I feel a sense of accomplishment. With this support, VMs on gokvm can now communicate with the host (or the outside via a software switch). It broadens what you can do, such as providing a web server or logging in via SSH, which I think is a major change....
PCI Device Support for Custom VMM
Introduction Continuing gokvm development 1 2 3. I’ve been developing to enable VMs on gokvm to handle PCI devices. The road will be long, but ultimately I want to establish IP connectivity between the VM and the outside via virtio-net. At the moment, I was able to get the guest kernel to recognize the virtio-net device as a network interface, so I’ll leave a log up to that point for now....
Background and Usage of Open vSwitch AF_XDP
Recently, I heard that OVS (Open vSwitch) has added support for AF_XDP, so I investigated what background led to this and how to use it. OVS is composed of kernel modules and userspace processes. With this architecture, the following issues became apparent1, and recently the implementation using AF_XDP is being promoted as a replacement. Modifications that require kernel updates or system-wide restarts Influenced by kernel developer policies and implementations Performance lags behind DPDK Too many backports Sometimes loses distribution support All of these seem to be valid reasons to push forward with architectural changes....
SMP Support for Custom VMM with KVM
Introduction A progress report on gokvm development 1 2. Until now, I only supported a single virtual CPU. I wanted to support SMP (Symmetric Multiprocessing) for multi-CPU, and after about 2-3 weeks of trial and error, I was able to implement it successfully. As far as I know, while searching for efforts to create a VMM with KVM, I couldn’t find many resources that explain what SMP support specifically looks like in implementation....