repos / zmx

session persistence for terminal processes
git clone https://github.com/neurosnap/zmx.git

commit
536bad4
parent
be3b0ab
author
Eric Bower
date
2025-10-14 15:29:34 -0400 EDT
perf: increase buffer sizes
5 files changed,  +8, -8
M src/attach.zig
+3, -3
 1@@ -106,7 +106,7 @@ pub fn main(config: config_mod.Config, iter: *std.process.ArgIterator) !void {
 2         .loop = &loop,
 3         .session_name = session_name,
 4         .config = config,
 5-        .frame_buffer = std.ArrayList(u8).initCapacity(allocator, 4096) catch unreachable,
 6+        .frame_buffer = std.ArrayList(u8).initCapacity(allocator, 64 * 1024) catch unreachable, // 64KB initial capacity
 7     };
 8 
 9     // Get terminal size
10@@ -177,10 +177,10 @@ fn writeCallback(
11 }
12 
13 // Context for async socket read operations from daemon.
14-// Uses large buffer (128KB) to handle initial session scrollback and binary PTY frames.
15+// Uses large buffer (256KB) to handle initial session scrollback and binary PTY frames.
16 const ReadContext = struct {
17     ctx: *Context,
18-    buffer: [128 * 1024]u8, // 128KB to handle large scrollback messages
19+    buffer: [256 * 1024]u8, // 256KB to handle large scrollback messages
20 };
21 
22 fn readCallback(
M src/daemon.zig
+2, -2
 1@@ -235,7 +235,7 @@ const Session = struct {
 2     pty_master_fd: std.posix.fd_t,
 3     child_pid: std.posix.pid_t,
 4     allocator: std.mem.Allocator,
 5-    pty_read_buffer: [16384]u8,
 6+    pty_read_buffer: [128 * 1024]u8, // 128KB for high-throughput PTY output
 7     created_at: i64,
 8 
 9     // Terminal emulator state for session restore
10@@ -258,7 +258,7 @@ const Session = struct {
11 const Client = struct {
12     fd: std.posix.fd_t,
13     stream: xev.Stream,
14-    read_buffer: [16384]u8,
15+    read_buffer: [128 * 1024]u8, // 128KB for high-throughput socket reads
16     allocator: std.mem.Allocator,
17     attached_session: ?[]const u8,
18     server_ctx: *ServerContext,
M src/detach.zig
+1, -1
1@@ -94,7 +94,7 @@ pub fn main(config: config_mod.Config, iter: *std.process.ArgIterator) !void {
2 
3     try protocol.writeJson(allocator, socket_fd, .detach_session_request, request_payload);
4 
5-    var buffer: [4096]u8 = undefined;
6+    var buffer: [16 * 1024]u8 = undefined; // 16KB for robustness
7     const bytes_read = try posix.read(socket_fd, &buffer);
8 
9     if (bytes_read == 0) {
M src/kill.zig
+1, -1
1@@ -54,7 +54,7 @@ pub fn main(config: config_mod.Config, iter: *std.process.ArgIterator) !void {
2         protocol.KillSessionRequest{ .session_name = session_name },
3     );
4 
5-    var buffer: [4096]u8 = undefined;
6+    var buffer: [16 * 1024]u8 = undefined; // 16KB for robustness
7     const bytes_read = try posix.read(socket_fd, &buffer);
8 
9     if (bytes_read == 0) {
M src/list.zig
+1, -1
1@@ -43,7 +43,7 @@ pub fn main(config: config_mod.Config, iter: *std.process.ArgIterator) !void {
2 
3     try protocol.writeJson(allocator, socket_fd, .list_sessions_request, protocol.ListSessionsRequest{});
4 
5-    var buffer: [8192]u8 = undefined;
6+    var buffer: [32 * 1024]u8 = undefined; // 32KB to handle many sessions
7     const bytes_read = try posix.read(socket_fd, &buffer);
8 
9     if (bytes_read == 0) {