mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-07-16 16:56:09 +03:00
os: cgroup can set memory limits
This commit is contained in:
@ -52,6 +52,15 @@ pub fn init(app: *App) ![]const u8 {
|
|||||||
// I don't know a scenario where this fails yet.
|
// I don't know a scenario where this fails yet.
|
||||||
try enableControllers(alloc, transient);
|
try enableControllers(alloc, transient);
|
||||||
|
|
||||||
|
// Configure the "high" memory limit. This limit is used instead
|
||||||
|
// of "max" because it's a soft limit that can be exceeded and
|
||||||
|
// can be monitored by things like systemd-oomd to kill if needed,
|
||||||
|
// versus an instant hard kill.
|
||||||
|
// try internal_os.cgroup.configureMemoryLimit(transient, .{
|
||||||
|
// // 1GB
|
||||||
|
// .high = 1 * 1024 * 1024 * 1024,
|
||||||
|
// });
|
||||||
|
|
||||||
return transient;
|
return transient;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -107,3 +107,31 @@ pub fn configureControllers(
|
|||||||
// Write
|
// Write
|
||||||
try file.writer().writeAll(v);
|
try file.writer().writeAll(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub const MemoryLimit = union(enum) {
|
||||||
|
/// memory.high
|
||||||
|
high: usize,
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Configure the memory limit for the given cgroup. Use the various
|
||||||
|
/// fields in MemoryLimit to configure a specific type of limit.
|
||||||
|
pub fn configureMemoryLimit(cgroup: []const u8, limit: MemoryLimit) !void {
|
||||||
|
assert(cgroup[0] == '/');
|
||||||
|
|
||||||
|
const filename, const size = switch (limit) {
|
||||||
|
.high => |v| .{ "memory.high", v },
|
||||||
|
};
|
||||||
|
|
||||||
|
// Open our file
|
||||||
|
var buf: [std.fs.MAX_PATH_BYTES]u8 = undefined;
|
||||||
|
const path = try std.fmt.bufPrint(
|
||||||
|
&buf,
|
||||||
|
"/sys/fs/cgroup{s}/{s}",
|
||||||
|
.{ cgroup, filename },
|
||||||
|
);
|
||||||
|
const file = try std.fs.cwd().openFile(path, .{ .mode = .write_only });
|
||||||
|
defer file.close();
|
||||||
|
|
||||||
|
// Write our limit in bytes
|
||||||
|
try file.writer().print("{}", .{size});
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user