NUMA++ 0.11.0
Loading...
Searching...
No Matches
cpuaffinity.cpp
Go to the documentation of this file.
1/**
2 * @file
3 * @ingroup numapp
4 * @copyright ESO 2024 - European Southern Observatory
5 *
6 * @brief Definition of CPU affinity classes.
7 */
9
10#include <ostream>
11
12#include <numapp/lowlevel.hpp>
13#include <numapp/thread.hpp>
14
15namespace numapp {
16namespace thisThread {
17[[nodiscard]] std::error_code Apply(CpuAffinity const& affinity) noexcept {
18 return Apply(GetThreadId(), affinity);
19}
20} // namespace thisThread
21
22[[nodiscard]] std::error_code Apply(pid_t thread, CpuAffinity const& affinity) noexcept {
23 if (auto err = ll::SetCpuAffinity(thread, affinity.GetMask()); err) {
24 return err;
25 }
26 return {};
27}
28
29CpuAffinity::CpuAffinity(Cpumask&& mask) noexcept : m_mask(std::move(mask)) {
30}
31
32CpuAffinity::CpuAffinity(Cpumask const& mask) noexcept : m_mask(mask) {
33}
34
36 auto mask = Cpumask();
37 if (auto err = ll::GetCpuAffinity(thisThread::GetThreadId(), mask); err) {
38 throw std::system_error(err);
39 }
40 return CpuAffinity(std::move(mask));
41}
42
43[[nodiscard]] CpuAffinity CpuAffinity::MakeFromCpuString(char const* cpustring) {
44 return CpuAffinity(Cpumask::MakeFromCpuString(cpustring));
45}
46
47[[nodiscard]] CpuAffinity CpuAffinity::MakeFromCpuStringAll(char const* cpustring) {
49}
50
51[[nodiscard]] CpuAffinity CpuAffinity::MakeBindNode(int node) {
52 auto mask = Cpumask();
53 if (auto err = ll::NumaNodeToCpumask(node, mask); err) {
54 throw std::system_error(err);
55 }
56 return CpuAffinity(std::move(mask));
57}
58
59[[nodiscard]] CpuAffinity CpuAffinity::MakeBindCpu(int cpu) {
60 auto mask = Cpumask();
61 mask.Set(cpu);
62 return CpuAffinity(std::move(mask));
63}
64
65Cpumask const& CpuAffinity::GetMask() const noexcept {
66 return m_mask;
67}
68
69std::ostream& operator<<(std::ostream& os, CpuAffinity const& affinity) {
70 os << "CpuAffinity {mask=" << affinity.GetMask() << "}";
71 return os;
72}
73
74} // namespace numapp
Cpumask const & GetMask() const noexcept
static CpuAffinity MakeFromCpuStringAll(char const *cpustring)
Create CpuAffinity from `cpustring` without considering current cpuset.
static CpuAffinity MakeBindCpu(int cpu)
Create CpuAffinity bound to the specified CPU.
static CpuAffinity MakeBindNode(int node)
Create CpuAffinity bound to the specified NUMA node.
CpuAffinity(Cpumask &&mask) noexcept
Create affinity from Cpumask.
std::ostream & operator<<(std::ostream &os, CpuAffinity const &affinity)
Formats affinity and inserts it to os.
static CpuAffinity MakeFromActive()
Create current affinity settings.
static CpuAffinity MakeFromCpuString(char const *cpustring)
Create CpuAffinity from `cpustring` while considering allowed CPUs from current cpuset.
Type-safe CPU mask.
Definition cpumask.hpp:25
static Cpumask MakeFromCpuString(char const *cpustring)
Construct Cpumask from cpustring that considers current cpuset.
Definition cpumask.hpp:63
static Cpumask MakeFromCpuStringAll(char const *cpustring)
Construct Cpumask from cpustring that does not consider current cpuset.
Definition cpumask.hpp:44
Contains declarations for CpuAffinity.
std::error_code Apply(CpuAffinity const &affinity) noexcept
Apply policy to calling thread.
std::error_code Apply(pid_t thread, CpuAffinity const &affinity) noexcept
Apply policy to specified thread.
pid_t GetThreadId() noexcept
Query the thread id "TID" of the current thread.
Definition thread.cpp:27
Contains low-level functions.
std::error_code GetCpuAffinity(pid_t ttid, Cpumask &mask) noexcept
Get CPU affinity.
std::error_code NumaNodeToCpumask(int node, Cpumask &mask) noexcept
Convert NUMA node number to corresponding CPU mask.
std::error_code SetCpuAffinity(pid_t ttid, Cpumask const &mask) noexcept
Set CPU affinity.
Contains declarations for numapp thread utilities.