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.
>

Reply via email to