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;
|
server_allocator;
|
||||||
|
|
||||||
// Set up client writer
|
// 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);
|
defer alloc.free(w_buffer);
|
||||||
var writer = stream.writer(io, w_buffer);
|
var writer = stream.writer(io, w_buffer);
|
||||||
const out = &writer.interface;
|
const out = &writer.interface;
|
||||||
|
|
||||||
// Set up client reader
|
// 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);
|
defer alloc.free(r_buffer);
|
||||||
var reader = stream.reader(io, r_buffer);
|
var reader = stream.reader(io, r_buffer);
|
||||||
const in = &reader.interface;
|
const in = &reader.interface;
|
||||||
|
|
||||||
// Set up buffer queue
|
// 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);
|
defer alloc.free(qbuf);
|
||||||
var recv_queue: Queue(u8) = .init(qbuf);
|
var recv_queue: Queue(u8) = .init(qbuf);
|
||||||
defer recv_queue.close(io);
|
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.
|
/// Probes the system for an appropriate buffer size.
|
||||||
/// Try to match the kernel socket buffers to maximize
|
/// Try to match the kernel socket buffers to maximize
|
||||||
/// the amount of data we push through each syscall.
|
/// the amount of data we push through each syscall.
|
||||||
fn getBufferSizes(io: Io) @Tuple(&.{ usize, usize }) {
|
fn getBufferSizes(io: Io) @Tuple(&.{ usize, usize }) {
|
||||||
const default_size = 128 * 1024 * 1024;
|
const default_size = 4 * 1024;
|
||||||
const default = .{ default_size, default_size };
|
const default = .{ default_size, default_size };
|
||||||
|
|
||||||
if (true) return default;
|
// if (true) return default;
|
||||||
|
|
||||||
const dir = Dir.openDirAbsolute(io, "/proc/sys/net/core", .{}) catch {
|
const dir = Dir.openDirAbsolute(io, "/proc/sys/net/core", .{}) catch {
|
||||||
log.warn("couldn't open /proc/sys/net/core", .{});
|
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;
|
var buf: [64]u8 = undefined;
|
||||||
|
|
||||||
const rmem_max = readBufferSize(io, dir, "rmem_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);
|
const wmem_max = readBufferSize(io, dir, "wmem_max", &buf, default_size) * 2;
|
||||||
|
|
||||||
return .{ rmem_max, wmem_max };
|
return .{ rmem_max, wmem_max };
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user