October 8, 2026 at 11:33 AM, "Michael Beecher" <[email protected] mailto:[email protected]?to=%22Michael%20Beecher%22%20%3Cmbeecher%40stevens.edu%3E > wrote:
> > More detail (sorry, submitted this in the absolute dead of night, was tired), > > Anyways, a single read with BPF could return several packets packed > back-to-back, each preceded by a struct bpf_hdr. The rump kernel pads each > record to BPF_ALIGNMENT, which NetBSD's <net/bpf.h> defines as sizeof (long). > rumpnet/net-rump.c advances with its own BPF_WORDALIGN, uses Mach's > <device/bpf.h>, where that is sizeof (int). On i386, this bug wouldn't exist > since both int and long are four bytes. But on amd64, long is 8 bytes, > causing a semi-consistent 4 byte mismatch. > > The first record in each read is always parsed correctly, because it starts > at offset 0 and bh_hdrlen comes from the kernel. However, a full-size frame > is (26 + 1514) 1540 bytes, and the kernel pads that to 1544, but rumpnet > advances only 1540, so it reads the next header 4 bytes early. This shifts > everything over, putting rumpnet's field bh_caplen in the upper end of a 64 > bit timestamp field tv_usec, which are always zero, and shifts another field > bh_datalen onto that bh_caplen. This causes datalen - caplen to be nonzero, > which the code interprets as a fragment, and immediately drops everything > following the rest of the read, causing networking to appear to work, but > being abysmally slow. > > This adds a RUMP_BPF_WORDALIGN, which uses sizeof (long) correctly. > > On my Latitude E6420 (Intlel 82579LM, hurd-amd64), I saw performance gains > from as low as 12kB/s on HTTPS file downloads, up to 1.2MB/s. From a faster > server, I saw it hit 9MB/s, and 30MB/s parallel x4, while the CPU was left > somewhat idle. That's quite an improvement! Congrats on the fix! > I'm sure there is more performance to be eeked out of rumpnet as a whole, but > this should fix the most glaring of performance issues people have > experienced on 64 bit. > > GetOutlook for Android https://aka.ms/AAb9ysg > > ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ > > **From:** Michael Beecher > **Sent:** Thursday, 08 October 2026 01:12:40 > **To:** [email protected] <[email protected]> > **Cc:** [email protected] <[email protected]>; [email protected] > <[email protected]>; [email protected] > <[email protected]> > **Subject:** rumpnet: Fix BPF record alignment on amd64 Hurd systems > > > Hi all, > > Patch attached. I found this while getting networking usable on hurd-amd64 on > my Dell E6420 (82579LM). I noticed TCP was very slow and saw that bursts of > packets got dropped consistently. > > Thanks, Michael. >
