std.os: adding linux's sched_setaffinity and its wrapper
This commit is contained in:
committed by
Veikka Tuominen
parent
4652729217
commit
c7bf8bab38
@@ -1535,6 +1535,12 @@ pub fn mbind(addr: ?*anyopaque, len: u32, mode: i32, nodemask: *const u32, maxno
|
||||
return syscall6(.mbind, addr, len, mode, nodemask, maxnode, flags);
|
||||
}
|
||||
|
||||
pub fn sched_setaffinity(pid: pid_t, size: usize, set: *const cpu_set_t) usize {
|
||||
const rc = syscall3(.sched_setaffinity, @bitCast(usize, @as(isize, pid)), size, @ptrToInt(set));
|
||||
if (@bitCast(isize, rc) < 0) return rc;
|
||||
return 0;
|
||||
}
|
||||
|
||||
pub fn epoll_create() usize {
|
||||
return epoll_create1(0);
|
||||
}
|
||||
@@ -3553,6 +3559,11 @@ pub const CPU_SETSIZE = 128;
|
||||
pub const cpu_set_t = [CPU_SETSIZE / @sizeOf(usize)]usize;
|
||||
pub const cpu_count_t = std.meta.Int(.unsigned, std.math.log2(CPU_SETSIZE * 8));
|
||||
|
||||
fn cpu_mask(s: usize) cpu_count_t {
|
||||
var x = s & (CPU_SETSIZE * 8);
|
||||
return @intCast(cpu_count_t, 1) << @intCast(u4, x);
|
||||
}
|
||||
|
||||
pub fn CPU_COUNT(set: cpu_set_t) cpu_count_t {
|
||||
var sum: cpu_count_t = 0;
|
||||
for (set) |x| {
|
||||
@@ -3561,6 +3572,32 @@ pub fn CPU_COUNT(set: cpu_set_t) cpu_count_t {
|
||||
return sum;
|
||||
}
|
||||
|
||||
pub fn CPU_ZERO(set: *cpu_set_t) void {
|
||||
@memset(set, 0);
|
||||
}
|
||||
|
||||
pub fn CPU_SET(cpu: usize, set: *cpu_set_t) void {
|
||||
const x = cpu / @sizeOf(usize);
|
||||
if (x < @sizeOf(cpu_set_t)) {
|
||||
(set.*)[x] |= cpu_mask(x);
|
||||
}
|
||||
}
|
||||
|
||||
pub fn CPU_ISSET(cpu: usize, set: cpu_set_t) bool {
|
||||
const x = cpu / @sizeOf(usize);
|
||||
if (x < @sizeOf(cpu_set_t)) {
|
||||
return set[x] & cpu_mask(x);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
pub fn CPU_CLR(cpu: usize, set: *cpu_set_t) void {
|
||||
const x = cpu / @sizeOf(usize);
|
||||
if (x < @sizeOf(cpu_set_t)) {
|
||||
(set.*)[x] &= !cpu_mask(x);
|
||||
}
|
||||
}
|
||||
|
||||
pub const MINSIGSTKSZ = switch (native_arch) {
|
||||
.x86, .x86_64, .arm, .mipsel => 2048,
|
||||
.aarch64 => 5120,
|
||||
|
||||
Reference in New Issue
Block a user