Program Listing for File SharedBufferManager.cpp
↰ Return to documentation for file (BackendLibfabric/SharedBufferManager.cpp)
#include "SharedBufferManager.hpp"
#include <utility>
#include <tracy/Tracy.hpp>
#include "Issues.hpp"
netio3::libfabric::SharedBufferManager::SharedBufferManager(const NetworkConfig& config,
DomainManager& domain_manager,
BaseEventLoop* event_loop) :
m_receive_context_manager{create_shared_receive_context(config, domain_manager, event_loop)},
m_send_buffer_manager{create_send_buffer_manager(config, domain_manager)},
m_zero_copy_buffer_manager{create_zero_copy_buffer_manager(config, domain_manager)}
{}
std::optional<netio3::libfabric::SharedReceiveContextManager>
netio3::libfabric::SharedBufferManager::create_shared_receive_context(const NetworkConfig& config,
DomainManager& domain_manager,
BaseEventLoop* event_loop)
{
ZoneScoped;
if (not config.conn_params.recv_params.use_shared_receive_buffers) {
return std::nullopt;
}
try {
return SharedReceiveContextManager{domain_manager,
config.conn_params.recv_params,
domain_manager.get_info(),
event_loop};
} catch (const LibfabricSharedReceiveContextError& e) {
throw LibfabricDomainError(ERS_HERE, e.message());
}
}
std::optional<netio3::libfabric::SendBufferManager>
netio3::libfabric::SharedBufferManager::create_send_buffer_manager(const NetworkConfig& config,
DomainManager& domain_manager)
{
ZoneScoped;
if (not config.conn_params.send_buffered_params.use_shared_send_buffers) {
return std::nullopt;
}
try {
return std::optional<netio3::libfabric::SendBufferManager>{
std::in_place, config.conn_params.send_buffered_params, domain_manager};
} catch (const LibFabricBufferError& e) {
throw LibfabricDomainError(ERS_HERE, e.message());
}
}
std::optional<netio3::libfabric::ZeroCopyBufferManager>
netio3::libfabric::SharedBufferManager::create_zero_copy_buffer_manager(
const NetworkConfig& config,
DomainManager& domain_manager)
{
ZoneScoped;
if (not config.conn_params.send_zero_copy_params.use_shared_send_buffers) {
return std::nullopt;
}
try {
return std::optional<netio3::libfabric::ZeroCopyBufferManager>{
std::in_place, config.conn_params.send_zero_copy_params, domain_manager};
} catch (const LibFabricBufferError& e) {
throw LibfabricDomainError(ERS_HERE, e.message());
}
}