mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-07-14 15:56:13 +03:00
os: unify memory/processes cgroup limiting func
This commit is contained in:
@ -66,16 +66,16 @@ pub fn init(app: *App) ![]const u8 {
|
|||||||
// can be monitored by things like systemd-oomd to kill if needed,
|
// can be monitored by things like systemd-oomd to kill if needed,
|
||||||
// versus an instant hard kill.
|
// versus an instant hard kill.
|
||||||
if (app.config.@"linux-cgroup-memory-limit") |limit| {
|
if (app.config.@"linux-cgroup-memory-limit") |limit| {
|
||||||
try internal_os.cgroup.configureMemoryLimit(surfaces, .{
|
try internal_os.cgroup.configureLimit(surfaces, .{
|
||||||
.high = limit,
|
.memory_high = limit,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Configure the "max" pids limit. This is a hard limit and cannot be
|
// Configure the "max" pids limit. This is a hard limit and cannot be
|
||||||
// exceeded.
|
// exceeded.
|
||||||
if (app.config.@"linux-cgroup-processes-limit") |limit| {
|
if (app.config.@"linux-cgroup-processes-limit") |limit| {
|
||||||
try internal_os.cgroup.configureProcessesLimit(surfaces, .{
|
try internal_os.cgroup.configureLimit(surfaces, .{
|
||||||
.processes = limit,
|
.pids_max = limit,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -180,45 +180,19 @@ pub fn configureControllers(
|
|||||||
try file.writer().writeAll(v);
|
try file.writer().writeAll(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub const MemoryLimit = union(enum) {
|
pub const Limit = union(enum) {
|
||||||
/// memory.high
|
memory_high: usize,
|
||||||
high: usize,
|
pids_max: usize,
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Configure the memory limit for the given cgroup. Use the various
|
/// Configure a limit for the given cgroup. Use the various
|
||||||
/// fields in MemoryLimit to configure a specific type of limit.
|
/// fields in Limit to configure a specific type of limit.
|
||||||
pub fn configureMemoryLimit(cgroup: []const u8, limit: MemoryLimit) !void {
|
pub fn configureLimit(cgroup: []const u8, limit: Limit) !void {
|
||||||
assert(cgroup[0] == '/');
|
assert(cgroup[0] == '/');
|
||||||
|
|
||||||
const filename, const size = switch (limit) {
|
const filename, const size = switch (limit) {
|
||||||
.high => |v| .{ "memory.high", v },
|
.memory_high => |v| .{ "memory.high", v },
|
||||||
};
|
.pids_max => |v| .{ "pids.max", 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});
|
|
||||||
}
|
|
||||||
|
|
||||||
pub const ProcessesLimit = union(enum) {
|
|
||||||
/// pids.max
|
|
||||||
processes: usize,
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Configure the number of processes for the given cgroup.
|
|
||||||
pub fn configureProcessesLimit(cgroup: []const u8, limit: ProcessesLimit) !void {
|
|
||||||
assert(cgroup[0] == '/');
|
|
||||||
|
|
||||||
const filename, const size = switch (limit) {
|
|
||||||
.processes => |v| .{ "pids.max", v },
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Open our file
|
// Open our file
|
||||||
|
Reference in New Issue
Block a user