Program Listing for File DomainManager.cpp
↰ Return to documentation for file (BackendLibfabric/DomainManager.cpp)
#include "DomainManager.hpp"
#include <tracy/Tracy.hpp>
#include <rdma/fabric.h>
#include <rdma/fi_domain.h>
#include "Issues.hpp"
#include "Helpers.hpp"
netio3::libfabric::DomainManager::DomainManager(const NetworkConfig& config,
const EndPointAddress& address,
std::uint64_t flags) :
m_info(create_info(config.mode, address, flags)),
m_fabric(create_fabric()),
m_domain(create_domain())
{}
netio3::libfabric::FiInfoUniquePtr netio3::libfabric::DomainManager::create_info(
NetworkMode mode,
const EndPointAddress& address,
std::uint64_t flags)
{
ZoneScoped;
try {
return FiInfoUniquePtr{get_fi_info(address, mode, flags)};
} catch (const LibfabricFiInfoError& e) {
throw LibfabricDomainError(std::format("Failed to get info on local interface {}", e.what()));
}
}
std::uint64_t netio3::libfabric::DomainManager::get_next_mr_key()
{
ZoneScoped;
if (std::strcmp(m_info->fabric_attr->prov_name, "sockets") == 0) {
return m_mr_key++;
}
return 0;
}
netio3::libfabric::FiCloseUniquePtr<fid_fabric> netio3::libfabric::DomainManager::create_fabric()
{
ZoneScoped;
fid_fabric* fabric{nullptr};
if (auto ret = fi_fabric(m_info->fabric_attr, &fabric, nullptr)) {
throw LibfabricDomainError(ERS_HERE,
std::format("Failed to open fabric - {}", fi_strerror(-ret)));
}
return FiCloseUniquePtr<fid_fabric>(
fabric, FiCloseDeleter<fid_fabric>("Failed to close Fabric"));
}
netio3::libfabric::FiCloseUniquePtr<fid_domain> netio3::libfabric::DomainManager::create_domain() const
{
ZoneScoped;
fid_domain* domain = nullptr;
if (auto ret = fi_domain(m_fabric.get(), m_info.get(), &domain, nullptr)) {
throw LibfabricDomainError(
ERS_HERE, std::format("Cannot open send domain {} - {}", ret, fi_strerror(-ret)));
}
return FiCloseUniquePtr<fid_domain>(domain, FiCloseDeleter<fid_domain>("Failed to close Domain"));
}