Use hwloc for set thread affinity.
This commit is contained in:
parent
9101469308
commit
72c9d94390
9 changed files with 118 additions and 38 deletions
|
@ -46,8 +46,11 @@ uint32_t xmrig::VirtualMemory::bindToNUMANode(int64_t affinity)
|
|||
return 0;
|
||||
}
|
||||
|
||||
auto cpu = static_cast<HwlocCpuInfo *>(Cpu::info());
|
||||
hwloc_obj_t pu = hwloc_get_pu_obj_by_os_index(cpu->topology(), static_cast<unsigned>(affinity));
|
||||
auto cpu = static_cast<HwlocCpuInfo *>(Cpu::info());
|
||||
hwloc_obj_t pu = hwloc_get_pu_obj_by_os_index(cpu->topology(), static_cast<unsigned>(affinity));
|
||||
|
||||
char *buffer;
|
||||
hwloc_bitmap_asprintf(&buffer, pu->cpuset);
|
||||
|
||||
if (pu == nullptr || !cpu->membind(pu->nodeset)) {
|
||||
LOG_WARN("CPU #%02" PRId64 " warning: \"can't bind memory\"", affinity);
|
||||
|
|
|
@ -28,8 +28,11 @@
|
|||
#define XMRIG_VIRTUALMEMORY_H
|
||||
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
#include "base/tools/Object.h"
|
||||
|
||||
|
||||
#include <cstddef>
|
||||
#include <cstdint>
|
||||
#include <utility>
|
||||
|
||||
|
||||
|
@ -39,7 +42,9 @@ namespace xmrig {
|
|||
class VirtualMemory
|
||||
{
|
||||
public:
|
||||
inline VirtualMemory() {}
|
||||
XMRIG_DISABLE_COPY_MOVE(VirtualMemory)
|
||||
|
||||
VirtualMemory() = default;
|
||||
VirtualMemory(size_t size, bool hugePages = true, size_t align = 64);
|
||||
~VirtualMemory();
|
||||
|
||||
|
@ -49,7 +54,7 @@ public:
|
|||
|
||||
inline std::pair<size_t, size_t> hugePages() const
|
||||
{
|
||||
return std::pair<size_t, size_t>(isHugePages() ? (align(size()) / 2097152) : 0, align(size()) / 2097152);
|
||||
return { isHugePages() ? (align(size()) / 2097152) : 0, align(size()) / 2097152 };
|
||||
}
|
||||
|
||||
static uint32_t bindToNUMANode(int64_t affinity);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue