mirror of
https://git.robbyzambito.me/zits
synced 2026-02-04 03:34:48 +00:00
Cache align hot buffers
This commit is contained in:
@@ -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 };
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user