server: a query that finds every permit taken waits for one instead of failing, the budget is 64, permit and upstream turns wait on a futex with one thread each, the thread pool has no task limit, and transparent huge pages are off for the process

This commit is contained in:
2026-10-22 20:26:25 +02:00
parent 63cc5f8dc3
commit 91ed5ae774
26 changed files with 1114 additions and 305 deletions
+36
View File
@@ -0,0 +1,36 @@
//! Opting the process out of transparent huge pages.
//!
//! With THP set to `always`, the kernel backs any 2 MiB-aligned anonymous
//! region with a huge page on first touch. Each worker thread's stack mapping
//! qualifies, so a thread that touches a few KiB of stack can hold 2 MiB
//! resident, and `std.Io.Threaded` never retires a worker: one burst on such a
//! host left about 40 of 200 workers at 2 MiB each. nxdns's memory is sized
//! for small pages, so the whole process opts out instead of chasing each
//! mapping.
const std = @import("std");
const linux = std.os.linux;
pub const DisableError = error{
/// A kernel older than 3.15, which has no such switch.
Unsupported,
Unexpected,
};
/// Sets `PR_SET_THP_DISABLE`, which covers every mapping of the process,
/// existing and future, and is inherited across `fork`.
pub fn disable() DisableError!void {
const rc = linux.prctl(@intFromEnum(linux.PR.SET_THP_DISABLE), 1, 0, 0, 0);
switch (linux.errno(rc)) {
.SUCCESS => {},
.INVAL => return error.Unsupported,
else => return error.Unexpected,
}
}
test "disable takes effect for the process" {
try disable();
const rc = linux.prctl(@intFromEnum(linux.PR.GET_THP_DISABLE), 0, 0, 0, 0);
try std.testing.expectEqual(linux.E.SUCCESS, linux.errno(rc));
try std.testing.expectEqual(@as(usize, 1), rc);
}