Program Listing for File ZeroCopyBufferManager.cpp

Return to documentation for file (BackendLibfabric/ZeroCopyBufferManager.cpp)

#include "ZeroCopyBufferManager.hpp"

netio3::libfabric::ZeroCopyBufferManager::ZeroCopyBufferManager(
  ConnectionParametersSendZeroCopy connection_params, DomainManager& domain_manager) :
  m_conn_parameters{std::move(connection_params)},
  m_mr{m_conn_parameters.buf_size, m_conn_parameters.mr_start}
{
  init_buffers(domain_manager);
}

netio3::libfabric::ZeroCopyBufferManager::~ZeroCopyBufferManager()
{
  close_buffer(m_mr);
  close_buffer(m_header_buffer);
}

netio3::libfabric::HeaderBuffer::HeaderWrapper netio3::libfabric::ZeroCopyBufferManager::get_header(
  const std::span<const std::uint8_t> header_data,
  const std::uint64_t key)
{
  return m_header_buffer.get_header(header_data, key);
}

std::uint64_t netio3::libfabric::ZeroCopyBufferManager::return_header(std::uint64_t bufnum)
{
  return m_header_buffer.return_header(bufnum);
}

std::size_t netio3::libfabric::ZeroCopyBufferManager::get_num_available_buffers()
{
  return m_header_buffer.get_num_available_buffers();
}

std::vector<std::uint64_t> netio3::libfabric::ZeroCopyBufferManager::get_pending_sends()
{
  return m_header_buffer.get_pending_sends();
}

void netio3::libfabric::ZeroCopyBufferManager::init_buffers(DomainManager& domain_manager)
{
  ZoneScoped;
  ERS_DEBUG(1, std::format("Registering MR of size {}", m_conn_parameters.buf_size));
  register_buffer(m_mr, domain_manager, FI_SEND);

  ERS_DEBUG(1,
            std::format("Registering Header buffer of size {}",
                        ZERO_COPY_NUM_HEADER_SLOTS * ZERO_COPY_SIZE_HEADER));
  register_buffer(m_header_buffer, domain_manager, FI_SEND);
}