From 8a2bcebd60cfad977ad8ff419a9878915d77df7b Mon Sep 17 00:00:00 2001 From: Robby Zambito Date: Sat, 10 Jan 2026 16:54:25 -0500 Subject: Cache align hot buffers --- src/Server.zig | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) (limited to 'src/Server.zig') diff --git a/src/Server.zig b/src/Server.zig index ad07564..cc16408 100644 --- a/src/Server.zig +++ b/src/Server.zig @@ -164,19 +164,19 @@ fn handleConnection( server_allocator; // Set up client writer - const w_buffer: []u8 = try alloc.alloc(u8, w_buf_size); + const w_buffer: []u8 = try alloc.alignedAlloc(u8, .@"64", w_buf_size); defer alloc.free(w_buffer); var writer = stream.writer(io, w_buffer); const out = &writer.interface; // Set up client reader - const r_buffer: []u8 = try alloc.alloc(u8, r_buf_size); + const r_buffer: []u8 = try alloc.alignedAlloc(u8, .@"64", r_buf_size); defer alloc.free(r_buffer); var reader = stream.reader(io, r_buffer); const in = &reader.interface; // Set up buffer queue - const qbuf: []u8 = try alloc.alloc(u8, r_buf_size); + const qbuf: []u8 = try alloc.alignedAlloc(u8, .@"64", 256 * 1024 * 1024); defer alloc.free(qbuf); var recv_queue: Queue(u8) = .init(qbuf); defer recv_queue.close(io); @@ -443,14 +443,18 @@ fn unsubscribe( } } +// TODO: The probed system value is too low. +// Setting the value higher leads to higher throughput. +// Find a more appropriate value. +// It should be the probed value at a minimum. /// Probes the system for an appropriate buffer size. /// Try to match the kernel socket buffers to maximize /// the amount of data we push through each syscall. fn getBufferSizes(io: Io) @Tuple(&.{ usize, usize }) { - const default_size = 128 * 1024 * 1024; + const default_size = 4 * 1024; const default = .{ default_size, default_size }; - if (true) return default; + // if (true) return default; const dir = Dir.openDirAbsolute(io, "/proc/sys/net/core", .{}) catch { log.warn("couldn't open /proc/sys/net/core", .{}); @@ -459,8 +463,8 @@ fn getBufferSizes(io: Io) @Tuple(&.{ usize, usize }) { var buf: [64]u8 = undefined; - const rmem_max = readBufferSize(io, dir, "rmem_max", &buf, default_size); - const wmem_max = readBufferSize(io, dir, "wmem_max", &buf, default_size); + const rmem_max = readBufferSize(io, dir, "rmem_max", &buf, default_size) * 2; + const wmem_max = readBufferSize(io, dir, "wmem_max", &buf, default_size) * 2; return .{ rmem_max, wmem_max }; } -- cgit