/* * Copyright (C) 2023-2024 Intel Corporation * * SPDX-License-Identifier: MIT * */ #pragma once #include "shared/source/os_interface/linux/os_library_linux.h" #include "shared/source/os_interface/os_library.h" #include #include #include #include namespace NEO { namespace Linux { class NumaLibrary { public: static bool init(); static bool isLoaded() { return numaLoaded; } static bool getMemPolicy(int *mode, std::vector &nodeMask); protected: static constexpr const char *numaLibNameStr = "libnuma.so.1"; static constexpr const char *procGetMemPolicyStr = "get_mempolicy"; static constexpr const char *procNumaAvailableStr = "numa_available"; static constexpr const char *procNumaMaxNodeStr = "numa_max_node"; using GetMemPolicyPtr = std::add_pointer::type; using NumaAvailablePtr = std::add_pointer::type; using NumaMaxNodePtr = std::add_pointer::type; static std::unique_ptr osLibrary; static GetMemPolicyPtr getMemPolicyFunction; static NumaAvailablePtr numaAvailableFunction; static NumaMaxNodePtr numaMaxNodeFunction; static int maxNode; static bool numaLoaded; }; } // namespace Linux } // namespace NEO