23 #include "precompiled.h"
37 static size_t numProcessors;
39 if(numProcessors == 0)
44 if (RUNNING_ON_VALGRIND)
48 long res = sysconf(_SC_NPROCESSORS_CONF);
50 numProcessors = (size_t)res;
60 static uintptr_t processorMask;
74 pageSize = (size_t)sysconf(_SC_PAGESIZE);
90 return size_t(memorySize /
MiB);
97 const size_t memoryAvailable = size_t(memoryAvailableBytes /
MiB);
98 return memoryAvailable;
121 const size_t setSize = CPU_ALLOC_SIZE(maxCpus);
122 cpu_set_t* set = CPU_ALLOC(maxCpus);
124 const int ret = sched_getaffinity(0, setSize, set);
137 for(maxCpus = 64; maxCpus <= 65536; maxCpus *= 2)
150 const size_t setSize = CPU_ALLOC_SIZE(maxCpus);
151 cpu_set_t* set = CPU_ALLOC(maxCpus);
154 uintptr_t previousProcessorMask = 0;
156 int ret = sched_getaffinity(0, setSize, set);
161 if(CPU_ISSET_S(processor, setSize, set))
162 previousProcessorMask |= uintptr_t(1) << processor;
166 CPU_ZERO_S(setSize, set);
169 if(
IsBitSet(processorMask, processor))
170 CPU_SET_S(processor, setSize, set);
173 int ret = sched_setaffinity(0, setSize, set);
178 return previousProcessorMask;
187 const uintptr_t processorMask = uintptr_t(1) << processor;
189 cb(processor, cbData);
size_t os_cpu_QueryMemorySize()
static const size_t pageSize
#define UNUSED(param)
mark a function parameter as unused and avoid the corresponding compiler warning. ...
static bool IsMaxCpusSufficient()
Status os_cpu_CallByEachCPU(OsCpuCallback cb, uintptr_t cbData)
execute the specified function once on each processor.
size_t os_cpu_NumProcessors()
size_t os_cpu_LargePageSize()
uintptr_t os_cpu_SetThreadAffinityMask(uintptr_t processorMask)
restrict the current thread to a set of processors.
#define ENSURE(expr)
ensure the expression <expr> evaluates to non-zero.
unsigned long long uint64_t
intptr_t ModuleInitState
initialization state of a module (class, source file, etc.) must be initialized to zero (e...
static Status DetectMaxCpus()
bool IsBitSet(T value, size_t index)
size_t os_cpu_MemoryAvailable()
i64 Status
Error handling system.
uintptr_t os_cpu_ProcessorMask()
void(* OsCpuCallback)(size_t processor, uintptr_t cbData)
called by os_cpu_CallByEachCPU.
Status ModuleInit(volatile ModuleInitState *initState, Status(*init)())
calls a user-defined init function if initState is zero.