Skip site navigation (1)Skip section navigation (2)

  
 
  

home | help
fi_domain(3)			Libfabric v1.15.1		    fi_domain(3)

NAME
     fi_domain - Open a fabric access domain

SYNOPSIS
	    #include <rdma/fabric.h>

	    #include <rdma/fi_domain.h>

	    int fi_domain(struct fid_fabric *fabric, struct fi_info *info,
		struct fid_domain **domain, void *context);

	    int fi_close(struct fid *domain);

	    int fi_domain_bind(struct fid_domain *domain, struct fid *eq,
		uint64_t flags);

	    int fi_open_ops(struct fid *domain, const char *name, uint64_t flags,
		void **ops, void *context);

	    int fi_set_ops(struct fid *domain, const char *name, uint64_t flags,
		void *ops, void *context);

ARGUMENTS
     fabric
	    Fabric domain

     info   Fabric information, including domain capabilities and attributes.

     domain
	    An opened access domain.

     context
	    User  specified context associated with the domain.  This context is
	    returned as part of any asynchronous event associated with	the  do-
	    main.

     eq     Event queue for asynchronous operations initiated on the domain.

     name   Name associated with an interface.

     ops    Fabric interface operations.

DESCRIPTION
     An  access domain typically refers to a physical or virtual NIC or hardware
     port; however, a domain may span across multiple  hardware  components  for
     fail-over or data striping purposes.  A domain defines the boundary for as-
     sociating	different resources together.  Fabric resources belonging to the
     same domain may share resources.

   fi_domain
     Opens a fabric access domain, also referred to as a resource domain.   Fab-
     ric  domains are identified by a name.  The properties of the opened domain
     are specified using the info parameter.

   fi_open_ops
     fi_open_ops is used to open provider specific interfaces.	Provider  inter-
     faces  may  be  used  to access low-level resources and operations that are
     specific to the opened resource domain.  The details of  domain  interfaces
     are outside the scope of this documentation.

   fi_set_ops
     fi_set_ops assigns callbacks that a provider should invoke in place of per-
     forming  selected	tasks.	 This  allows  users  to  modify  or  control  a
     provider's default behavior.  Conceptually, it allows the user to hook spe-
     cific functions used by a provider and replace it with their own.

     The operations being modified are identified using a  well-known  character
     string,  passed  as the name parameter.  The format of the ops parameter is
     dependent upon the name value.  The ops parameter will reference  a  struc-
     ture  containing  the  callbacks and other fields needed by the provider to
     invoke the user's functions.

     If a provider accepts the override, it  will  return  FI_SUCCESS.	 If  the
     override  is unknown or not supported, the provider will return -FI_ENOSYS.
     Overrides should be set prior to allocating resources on the domain.

     The following fi_set_ops operations and corresponding  callback  structures
     are defined.

     FI_SET_OPS_HMEM_OVERRIDE - Heterogeneous Memory Overrides

     HMEM  override  allows users to override HMEM related operations a provider
     may perform.  Currently, the scope of the HMEM override is to allow a  user
     to  define the memory movement functions a provider should use when access-
     ing a user buffer.  The user-defined memory movement functions need to  ac-
     count for all the different HMEM iface types a provider may encounter.

     All objects allocated against a domain will inherit this override.

     The following is the HMEM override operation name and structure.

	    #define FI_SET_OPS_HMEM_OVERRIDE "hmem_override_ops"

	    struct fi_hmem_override_ops {
		size_t	size;

		ssize_t (*copy_from_hmem_iov)(void *dest, size_t size,
		    enum fi_hmem_iface iface, uint64_t device, const struct iovec *hmem_iov,
		    size_t hmem_iov_count, uint64_t hmem_iov_offset);

		ssize_t (*copy_to_hmem_iov)(enum fi_hmem_iface iface, uint64_t device,
		const struct iovec *hmem_iov, size_t hmem_iov_count,
		    uint64_t hmem_iov_offset, const void *src, size_t size);
	    };

     All fields in struct fi_hmem_override_ops must be set (non-null) to a valid
     value.

     size   This  should be set to the sizeof(struct fi_hmem_override_ops).  The
	    size field is used for forward and backward compatibility purposes.

     copy_from_hmem_iov
	    Copy data from the device/hmem to host memory.  This function should
	    return a negative fi_errno on error, or the number of  bytes  copied
	    on success.

     copy_to_hmem_iov
	    Copy data from host memory to the device/hmem.  This function should
	    return  a  negative fi_errno on error, or the number of bytes copied
	    on success.

   fi_domain_bind
     Associates an event queue with the domain.  An event queue bound to  a  do-
     main  will  be  the  default EQ associated with asynchronous control events
     that occur on the domain or active endpoints allocated on a  domain.   This
     includes CM events.  Endpoints may direct their control events to alternate
     EQs by binding directly with the EQ.

     Binding  an  event queue to a domain with the FI_REG_MR flag indicates that
     the provider should perform all memory  registration  operations  asynchro-
     nously,  with the completion reported through the event queue.  If an event
     queue is not bound to the domain with the FI_REG_MR flag, then memory  reg-
     istration requests complete synchronously.

     See   fi_av_bind(3),   fi_ep_bind(3),  fi_mr_bind(3),  fi_pep_bind(3),  and
     fi_scalable_ep_bind(3) for more information.

   fi_close
     The fi_close call is used to release all resources associated with a domain
     or interface.  All objects associated with the opened domain  must  be  re-
     leased prior to calling fi_close, otherwise the call will return -FI_EBUSY.

DOMAIN ATTRIBUTES
     The  fi_domain_attr structure defines the set of attributes associated with
     a domain.

	    struct fi_domain_attr {
		struct fid_domain     *domain;
		char		      *name;
		enum fi_threading     threading;
		enum fi_progress      control_progress;
		enum fi_progress      data_progress;
		enum fi_resource_mgmt resource_mgmt;
		enum fi_av_type       av_type;
		int		      mr_mode;
		size_t		      mr_key_size;
		size_t		      cq_data_size;
		size_t		      cq_cnt;
		size_t		      ep_cnt;
		size_t		      tx_ctx_cnt;
		size_t		      rx_ctx_cnt;
		size_t		      max_ep_tx_ctx;
		size_t		      max_ep_rx_ctx;
		size_t		      max_ep_stx_ctx;
		size_t		      max_ep_srx_ctx;
		size_t		      cntr_cnt;
		size_t		      mr_iov_limit;
		uint64_t	      caps;
		uint64_t	      mode;
		uint8_t 	      *auth_key;
		size_t		      auth_key_size;
		size_t		      max_err_data;
		size_t		      mr_cnt;
		uint32_t	      tclass;
	    };

   domain
     On input to fi_getinfo, a user may set this to an opened domain instance to
     restrict output to the given domain.  On output from fi_getinfo, if no  do-
     main  was	specified,  but the user has an opened instance of the named do-
     main, this will reference the first opened instance.  If  no  instance  has
     been opened, this field will be NULL.

     The  domain instance returned by fi_getinfo should only be considered valid
     if the application does not close any domain instances from another  thread
     while fi_getinfo is being processed.

   Name
     The name of the access domain.

   Multi-threading Support (threading)
     The threading model specifies the level of serialization required of an ap-
     plication	when  using the libfabric data transfer interfaces.  Control in-
     terfaces are always considered thread safe, and may be accessed by multiple
     threads.  Applications which can guarantee serialization in their access of
     provider allocated resources and interfaces enables a provider to eliminate
     lower-level locks.

     FI_THREAD_COMPLETION
	    The completion threading model is intended for providers  that  make
	    use  of  manual progress.  Applications must serialize access to all
	    objects that are associated through the use of having a shared  com-
	    pletion  structure.   This	includes endpoint, transmit context, re-
	    ceive context, completion queue, counter, wait set, and poll set ob-
	    jects.

     For example, threads must serialize access to an  endpoint  and  its  bound
     completion  queue(s)  and/or  counters.  Access to endpoints that share the
     same completion queue must also be serialized.

     The   use	 of   FI_THREAD_COMPLETION   can   increase   parallelism   over
     FI_THREAD_SAFE, but requires the use of isolated resources.

     FI_THREAD_DOMAIN
	    A  domain serialization model requires applications to serialize ac-
	    cess to all objects belonging to a domain.

     FI_THREAD_ENDPOINT
	    The endpoint threading model is similar to FI_THREAD_FID,  but  with
	    the  added restriction that serialization is required when accessing
	    the same endpoint, even if multiple transmit  and  receive	contexts
	    are  used.	 Conceptually, FI_THREAD_ENDPOINT maps well to providers
	    that implement fabric services in hardware but use a single  command
	    queue to access different data flows.

     FI_THREAD_FID
	    A  fabric descriptor (FID) serialization model requires applications
	    to serialize access to individual fabric resources	associated  with
	    data  transfer operations and completions.	Multiple threads must be
	    serialized when accessing the same endpoint, transmit  context,  re-
	    ceive  context,  completion  queue,  counter, wait set, or poll set.
	    Serialization is required only by threads accessing the same object.

     For example, one thread may be initiating a data transfer on  an  endpoint,
     while another thread reads from a completion queue associated with the end-
     point.

     Serialization  to	endpoint access is only required when accessing the same
     endpoint data flow.  Multiple threads may initiate transfers  on  different
     transmit  contexts of the same endpoint without serializing, and no serial-
     ization is required between the submission of data  transmit  requests  and
     data receive operations.

     In  general,  FI_THREAD_FID  allows  the provider to be implemented without
     needing internal  locking	when  handling	data  transfers.   Conceptually,
     FI_THREAD_FID  maps  well	to  providers  that implement fabric services in
     hardware and provide separate command queues to different data flows.

     FI_THREAD_SAFE
	    A thread safe serialization model allows a	multi-threaded	applica-
	    tion to access any allocated resources through any interface without
	    restriction.  All providers are required to support FI_THREAD_SAFE.

     FI_THREAD_UNSPEC
	    This  value  indicates that no threading model has been defined.  It
	    may be used on input hints to the fi_getinfo call.	When  specified,
	    providers will return a threading model that allows for the greatest
	    level of parallelism.

   Progress Models (control_progress / data_progress)
     Progress  is  the ability of the underlying implementation to complete pro-
     cessing of an asynchronous request.  In many cases, the  processing  of  an
     asynchronous  request requires the use of the host processor.  For example,
     a received message may need to be matched with the  correct  buffer,  or  a
     timed  out  request may need to be retransmitted.	For performance reasons,
     it may be undesirable for the provider to allocate a thread for  this  pur-
     pose, which will compete with the application threads.

     Control  progress	indicates  the	method	that  the  provider uses to make
     progress on asynchronous control operations.  Control operations are  func-
     tions  which  do  not directly involve the transfer of application data be-
     tween endpoints.  They include address  vector,  memory  registration,  and
     connection management routines.

     Data  progress indicates the method that the provider uses to make progress
     on data transfer operations.  This includes message queue, RMA, tagged mes-
     saging, and atomic operations, along with their completion processing.

     Progress frequently requires action being taken at  both  the  transmitting
     and receiving sides of an operation.  This is often a requirement for reli-
     able transfers, as a result of retry and acknowledgement processing.

     To balance between performance and ease of use, two progress models are de-
     fined.

     FI_PROGRESS_AUTO
	    This  progress  model  indicates that the provider will make forward
	    progress on an asynchronous operation without  further  intervention
	    by	the application.  When FI_PROGRESS_AUTO is provided as output to
	    fi_getinfo in the absence of any progress hints, it often  indicates
	    that  the desired functionality is implemented by the provider hard-
	    ware or is a standard service of the operating system.

     It is recommended that providers support FI_PROGRESS_AUTO.  However,  if  a
     provider  does  not natively support automatic progress, forcing the use of
     FI_PROGRESS_AUTO may result in threads being allocated below the fabric in-
     terfaces.

     Note that prior versions of  the  library	required  providers  to  support
     FI_PROGRESS_AUTO.	 However,  in  some  cases  progress  threads  cannot be
     blocked when communication is idle, which results in  threads  spinning  in
     progress	functions.    As   a  result,  those  providers  only  supported
     FI_PROGRESS_MANUAL.

     FI_PROGRESS_MANUAL
	    This progress model indicates that the provider requires the use  of
	    an	application  thread  to  complete an asynchronous request.  When
	    manual progress is set, the provider  will	attempt  to  advance  an
	    asynchronous operation forward when the application attempts to wait
	    on	or  read  an event queue, completion queue, or counter where the
	    completed operation will be reported.  Progress also occurs when the
	    application processes a poll or wait set that  has	been  associated
	    with the event or completion queue.

     Only  wait operations defined by the fabric interface will result in an op-
     eration progressing.  Operating system or external wait functions, such  as
     select, poll, or pthread routines, cannot.

     Manual  progress  requirements  not  only	apply to endpoints that initiate
     transmit operations, but also to endpoints that may be the target	of  such
     operations.   This holds true even if the target endpoint will not generate
     completion events for the operations.  For example, an endpoint  that  acts
     purely  as the target of RMA or atomic operations that uses manual progress
     may still need application assistance to process received operations.

     FI_PROGRESS_UNSPEC
	    This value indicates that no progress model has  been  defined.   It
	    may be used on input hints to the fi_getinfo call.

   Resource Management (resource_mgmt)
     Resource  management  (RM)  is  provider  and  protocol  support to protect
     against overrunning local and remote resources.  This  includes  local  and
     remote  transmit  contexts, receive contexts, completion queues, and source
     and target data buffers.

     When enabled, applications are given some level of protection against over-
     running provider queues and local and remote data	buffers.   Such  support
     may  be  built  directly into the hardware and/or network protocol, but may
     also require that checks be enabled in the provider software.  By disabling
     resource management, an application assumes all responsibility for prevent-
     ing queue and buffer overruns, but doing so may allow a provider to  elimi-
     nate internal synchronization calls, such as atomic variables or locks.

     It  should  be  noted  that  even	if  resource management is disabled, the
     provider implementation and protocol may still provide some level	of  pro-
     tection against overruns.	However, such protection is not guaranteed.  The
     following values for resource management are defined.

     FI_RM_DISABLED
	    The  provider  is free to select an implementation and protocol that
	    does not protect against resource overruns.  The application is  re-
	    sponsible for resource protection.

     FI_RM_ENABLED
	    Resource management is enabled for this provider domain.

     FI_RM_UNSPEC
	    This  value indicates that no resource management model has been de-
	    fined.  It may be used on input hints to the fi_getinfo call.

     The behavior of the various resource management options depends on  whether
     the  endpoint  is	reliable or unreliable, as well as provider and protocol
     specific implementation details, as shown in the following table.	The  ta-
     ble assumes that all peers enable or disable RM the same.

     Resource	 DGRAM EP-no RM    DGRAM EP-with RM   RDM/MSG	EP-no	 RDM/MSG EP-with
						      RM		 RM
     ------------------------------------------------------------------------------------
      Tx Ctx	 undefined error	EAGAIN	      undefined error	     EAGAIN
      Rx Ctx	 undefined error	EAGAIN	      undefined error	     EAGAIN
      Tx CQ	 undefined error	EAGAIN	      undefined error	     EAGAIN
      Rx CQ	 undefined error	EAGAIN	      undefined error	     EAGAIN
      Target	     dropped		dropped        transmit error	     retried
      EP
     No    Rx	     dropped		dropped        transmit error	     retried
     Buffer
     Rx   Buf	truncate or drop   truncate or drop   truncate or er-	 truncate or er-
     Overrun					      ror		 ror
     Un-	 not applicable     not applicable     transmit error	 transmit error
     matched
     RMA
     RMA	 not applicable     not applicable     transmit error	 transmit error
     Overrun

     The resource column indicates the resource being accessed by a data  trans-
     fer operation.

     Tx Ctx / Rx Ctx
	    Refers  to the transmit/receive contexts when a data transfer opera-
	    tion is submitted.	When RM is enabled, attempting to submit  a  re-
	    quest will fail if the context is full.  If RM is disabled, an unde-
	    fined  error  (provider specific) will occur.  Such errors should be
	    considered fatal to the context, and applications must take steps to
	    avoid queue overruns.

     Tx CQ / Rx CQ
	    Refers to the completion queue associated with the Tx or Rx  context
	    when a local operation completes.  When RM is disabled, applications
	    must  take care to ensure that completion queues do not get overrun.
	    When an overrun occurs, an undefined, but fatal,  error  will  occur
	    affecting  all  endpoints  associated  with the CQ.  Overruns can be
	    avoided by sizing the CQs appropriately or by deferring the  posting
	    of	a  data transfer operation unless CQ space is available to store
	    its completion.  When RM is enabled,  providers  may  use  different
	    mechanisms to prevent CQ overruns.	This includes failing (returning
	    -FI_EAGAIN)  the posting of operations that could result in CQ over-
	    runs, or internally retrying requests (which will be hidden from the
	    application).  See notes at the end of this section regarding CQ re-
	    source management restrictions.

     Target EP / No Rx Buffer
	    Target EP refers to resources associated with the endpoint	that  is
	    the  target  of a transmit operation.  This includes the target end-
	    point's receive queue, posted receive buffers (no Rx  buffers),  the
	    receive  side  completion queue, and other related packet processing
	    queues.  The defined behavior is that seen by the initiator of a re-
	    quest.  For FI_EP_DGRAM endpoints, if the target EP queues	are  un-
	    able to accept incoming messages, received messages will be dropped.
	    For  reliable  endpoints,  if RM is disabled, the transmit operation
	    will complete in error.  A provider may choose to  return  an  error
	    completion	with the error code FI_ENORX for that transmit operation
	    so that it can be retried.	If RM is enabled, the provider will  in-
	    ternally retry the operation.

     Rx Buffer Overrun
	    This refers to buffers posted to receive incoming tagged or untagged
	    messages,  with  the  behavior  defined  from  the	viewpoint of the
	    sender.  The behavior for handling received messages that are larger
	    than the buffers provided by the application is  provider  specific.
	    Providers  may  either  truncate the message and report a successful
	    completion, or fail the operation.	For datagram  endpoints,  failed
	    sends  will  result in the message being dropped.  For reliable end-
	    points, send operations may complete successfully, yet be  truncated
	    at	the  receive  side.  This can occur when the target side buffers
	    received data until an application buffer is  made	available.   The
	    completion	status	may  also be dependent upon the completion model
	    selected  byt  the	application  (e.g. FI_DELIVERY_COMPLETE   versus
	    FI_TRANSMIT_COMPLETE).

     Unmatched RMA / RMA Overrun
	    Unmatched  RMA  and RMA overruns deal with the processing of RMA and
	    atomic operations.	Unlike send operations, RMA operations that  at-
	    tempt  to  access a memory address that is either not registered for
	    such operations, or attempt to access outside of the  target  memory
	    region will fail, resulting in a transmit error.

     When  a  resource	management  error occurs on an endpoint, the endpoint is
     transitioned into a disabled state.  Any operations which have not  already
     completed	will  fail  and be discarded.  For connectionless endpoints, the
     endpoint must be re-enabled before it will accept new data transfer  opera-
     tions.   For  connected  endpoints, the connection is torn down and must be
     re-established.

     There is one notable restriction on the  protections  offered  by	resource
     management.  This occurs when resource management is enabled on an endpoint
     that  has	been bound to completion queue(s) using the FI_SELECTIVE_COMPLE-
     TION flag.  Operations posted to such an endpoint may specify that  a  suc-
     cessful completion should not generate a entry on the corresponding comple-
     tion queue.  (I.e.  the operation leaves the FI_COMPLETION flag unset).  In
     such  situations,	the  provider is not required to reserve an entry in the
     completion queue to handle the case where the operation fails and does gen-
     erate a CQ entry, which would effectively require tracking the operation to
     completion.  Applications concerned with avoiding CQ overruns in the occur-
     rence of errors must ensure that there is sufficient space in the CQ to re-
     port failed operations.  This can typically be achieved by sizing the CQ to
     at least the same size as the endpoint queue(s) that are bound to it.

   AV Type (av_type)
     Specifies the type of address vectors that are  usable  with  this  domain.
     For  additional details on AV type, see fi_av(3).	The following values may
     be specified.

     FI_AV_MAP
	    Only address vectors of type AV map are requested or supported.

     FI_AV_TABLE
	    Only address vectors of type AV index are requested or supported.

     FI_AV_UNSPEC
	    Any address vector format is requested and supported.

     Address vectors are only used by  connectionless  endpoints.   Applications
     that  require  the  use of a specific type of address vector should set the
     domain attribute av_type to the necessary value  when  calling  fi_getinfo.
     The  value  FI_AV_UNSPEC may be used to indicate that the provider can sup-
     port either address vector format.  In this case,	a  provider  may  return
     FI_AV_UNSPEC  to  indicate that either format is supportable, or may return
     another AV type to indicate the optimal AV type supported by this domain.

   Memory Registration Mode (mr_mode)
     Defines memory registration specific mode bits used with this domain.  Full
     details on MR mode options are available in fi_mr(3).  The following values
     may be specified.

     FI_MR_ALLOCATED
	    Indicates that memory registration occurs on allocated data buffers,
	    and physical pages must back all virtual addresses being registered.

     FI_MR_COLLECTIVE
	    Requires data buffers passed to collective operations be  explicitly
	    registered for collective operations using the FI_COLLECTIVE flag.

     FI_MR_ENDPOINT
	    Memory  registration  occurs  at the endpoint level, rather than do-
	    main.

     FI_MR_LOCAL
	    The provider is optimized around having applications register memory
	    for locally accessed data buffers.	Data buffers used  in  send  and
	    receive operations and as the source buffer for RMA and atomic oper-
	    ations  must  be  registered  by  the application for access domains
	    opened with this capability.

     FI_MR_MMU_NOTIFY
	    Indicates that the application  is	responsible  for  notifying  the
	    provider when the page tables referencing a registered memory region
	    may have been updated.

     FI_MR_PROV_KEY
	    Memory registration keys are selected and returned by the provider.

     FI_MR_RAW
	    The  provider requires additional setup as part of their memory reg-
	    istration process.	This mode is required by providers  that  use  a
	    memory key that is larger than 64-bits.

     FI_MR_RMA_EVENT
	    Indicates  that  the memory regions associated with completion coun-
	    ters must be explicitly enabled after being bound to any counter.

     FI_MR_UNSPEC
	    Defined for compatibility - library versions 1.4 and earlier.   Set-
	    ting  mr_mode  to 0 indicates that FI_MR_BASIC or FI_MR_SCALABLE are
	    requested and supported.

     FI_MR_VIRT_ADDR
	    Registered memory regions are referenced by peers using the  virtual
	    address  of the registered memory region, rather than a 0-based off-
	    set.

     FI_MR_BASIC
	    Defined for compatibility - library versions 1.4 and earlier.   Only
	    basic  memory  registration  operations  are requested or supported.
	    This mode is equivalent to the FI_MR_VIRT_ADDR, FI_MR_ALLOCATED, and
	    FI_MR_PROV_KEY flags being set in later library versions.  This flag
	    may not be used in conjunction with other mr_mode bits.

     FI_MR_SCALABLE
	    Defined for compatibility - library versions 1.4 and earlier.   Only
	    scalable  memory registration operations are requested or supported.
	    Scalable registration uses offset based addressing, with application
	    selectable memory keys.  For library versions 1.5 and later, this is
	    the default if no mr_mode bits are set.  This flag may not	be  used
	    in conjunction with other mr_mode bits.

     Buffers used in data transfer operations may require notifying the provider
     of their use before a data transfer can occur.  The mr_mode field indicates
     the  type of memory registration that is required, and when registration is
     necessary.  Applications that require the use of  a  specific  registration
     mode  should  set	the domain attribute mr_mode to the necessary value when
     calling fi_getinfo.  The value FI_MR_UNSPEC may be used to indicate support
     for any registration mode.

   MR Key Size (mr_key_size)
     Size of the memory region remote access key, in bytes.   Applications  that
     request  their own MR key must select a value within the range specified by
     this value.  Key sizes larger than 8 bytes  require  using  the  FI_RAW_KEY
     mode bit.

   CQ Data Size (cq_data_size)
     Applications  may	include  a  small  message  with a data transfer that is
     placed directly into a remote completion queue  as  part  of  a  completion
     event.  This is referred to as remote CQ data (sometimes referred to as im-
     mediate  data).  This field indicates the number of bytes that the provider
     supports for remote CQ data.  If supported (non-zero  value  is  returned),
     the minimum size of remote CQ data must be at least 4-bytes.

   Completion Queue Count (cq_cnt)
     The  optimal  number of completion queues supported by the domain, relative
     to any specified or default CQ attributes.  The cq_cnt value may be a fixed
     value of the maximum number of CQs supported by the underlying hardware, or
     may be a dynamic value, based on the default attributes of an allocated CQ,
     such as the CQ size and data format.

   Endpoint Count (ep_cnt)
     The total number of endpoints supported by  the  domain,  relative  to  any
     specified	or default endpoint attributes.  The ep_cnt value may be a fixed
     value of the maximum number of endpoints supported by the underlying  hard-
     ware,  or may be a dynamic value, based on the default attributes of an al-
     located endpoint, such as the endpoint capabilities and size.  The endpoint
     count is the number of addressable endpoints  supported  by  the  provider.
     Providers return capability limits based on configured hardware maximum ca-
     pabilities.  Providers cannot predict all possible system limitations with-
     out  posteriori  knowledge  acquired during runtime that will further limit
     these hardware maximums (e.g. application	memory	consumption,  FD  usage,
     etc.).

   Transmit Context Count (tx_ctx_cnt)
     The  number of outbound command queues optimally supported by the provider.
     For a low-level provider, this represents the number of command  queues  to
     the  hardware  and/or  the  number of parallel transmit engines effectively
     supported by the hardware and caches.   Applications  which  allocate  more
     transmit contexts than this value will end up sharing underlying resources.
     By  default,  there  is a single transmit context associated with each end-
     point, but in an advanced usage model, an endpoint may be	configured  with
     multiple transmit contexts.

   Receive Context Count (rx_ctx_cnt)
     The  number  of  inbound  processing  queues  optimally  supported  by  the
     provider.	For a low-level provider, this represents  the	number	hardware
     queues  that  can	be effectively utilized for processing incoming packets.
     Applications which allocate more receive contexts than this value will  end
     up  sharing  underlying resources.  By default, a single receive context is
     associated with each endpoint, but in an advanced usage model, an	endpoint
     may be configured with multiple receive contexts.

   Maximum Endpoint Transmit Context (max_ep_tx_ctx)
     The maximum number of transmit contexts that may be associated with an end-
     point.

   Maximum Endpoint Receive Context (max_ep_rx_ctx)
     The  maximum number of receive contexts that may be associated with an end-
     point.

   Maximum Sharing of Transmit Context (max_ep_stx_ctx)
     The maximum number of endpoints that may be associated with a shared trans-
     mit context.

   Maximum Sharing of Receive Context (max_ep_srx_ctx)
     The maximum number of endpoints that may be associated with  a  shared  re-
     ceive context.

   Counter Count (cntr_cnt)
     The  optimal  number  of  completion counters supported by the domain.  The
     cq_cnt value may be a fixed value of the maximum number  of  counters  sup-
     ported  by the underlying hardware, or may be a dynamic value, based on the
     default attributes of the domain.

   MR IOV Limit (mr_iov_limit)
     This is the maximum number of IO vectors (scatter-gather elements)  that  a
     single memory registration operation may reference.

   Capabilities (caps)
     Domain  level capabilities.  Domain capabilities indicate domain level fea-
     tures that are supported by the provider.

     FI_LOCAL_COMM
	    At a conceptual level, this field indicates that the underlying  de-
	    vice supports loopback communication.  More specifically, this field
	    indicates that an endpoint may communicate with other endpoints that
	    are  allocated from the same underlying named domain.  If this field
	    is not set, an application may need to use an  alternate  domain  or
	    mechanism  (e.g. shared  memory) to communicate with peers that exe-
	    cute on the same node.

     FI_REMOTE_COMM
	    This field indicates that the underlying provider supports	communi-
	    cation  with  nodes  that  are  reachable over the network.  If this
	    field is not set, then the provider only supports communication  be-
	    tween  processes  that  execute  on  the same node - a shared memory
	    provider, for example.

     FI_SHARED_AV
	    Indicates that the domain supports the ability to share address vec-
	    tors among multiple processes using the named  address  vector  fea-
	    ture.

     See  fi_getinfo(3)  for  a discussion on primary versus secondary capabili-
     ties.  All domain capabilities are considered secondary capabilities.

   mode
     The operational mode bit related to using the domain.

     FI_RESTRICTED_COMP
	    This bit indicates that the  domain  limits  completion  queues  and
	    counters  to only be used with endpoints, transmit contexts, and re-
	    ceive contexts that have the same set of capability flags.

   Default authorization key (auth_key)
     The default authorization key to associate with endpoint and memory  regis-
     trations  created within the domain.  This field is ignored unless the fab-
     ric is opened with API version 1.5 or greater.

   Default authorization key length (auth_key_size)
     The length in bytes of the default authorization key for  the  domain.   If
     set  to  0, then no authorization key will be associated with endpoints and
     memory registrations created within the domain unless specified in the end-
     point or memory registration attributes.  This field is ignored unless  the
     fabric is opened with API version 1.5 or greater.

   Max Error Data Size (max_err_data)
     :	The maximum amount of error data, in bytes, that may be returned as part
     of a completion or event  queue  error.   This  value  corresponds  to  the
     err_data_size field in struct fi_cq_err_entry and struct fi_eq_err_entry.

   Memory Regions Count (mr_cnt)
     The  optimal  number of memory regions supported by the domain, or endpoint
     if the mr_mode FI_MR_ENDPOINT bit has been set.  The mr_cnt value may be  a
     fixed  value of the maximum number of MRs supported by the underlying hard-
     ware, or may be a dynamic value, based on the default attributes of the do-
     main, such as the supported memory registration  modes.   Applications  can
     set  the  mr_cnt  on input to fi_getinfo, in order to indicate their memory
     registration requirements.  Doing so may allow the provider to optimize any
     memory registration cache or lookup tables.

   Traffic Class (tclass)
     This specifies the default traffic class that will be associated  any  end-
     points created within the domain.	See fi_endpoint(3) for additional infor-
     mation.

RETURN VALUE
     Returns  0  on success.  On error, a negative value corresponding to fabric
     errno is returned.  Fabric errno values are defined in rdma/fi_errno.h.

NOTES
     Users should call fi_close to release all resources allocated to the fabric
     domain.

     The following fabric resources are associated  with  domains:  active  end-
     points, memory regions, completion event queues, and address vectors.

     Domain  attributes reflect the limitations and capabilities of the underly-
     ing hardware and/or software provider.  They do not reflect system  limita-
     tions,  such as the number of physical pages that an application may pin or
     number of file descriptors that the application may open.	As a result, the
     reported maximums may not be achievable, even on a lightly loaded	systems,
     without an administrator configuring system resources appropriately for the
     installed provider(s).

SEE ALSO
     fi_getinfo(3), fi_endpoint(3), fi_av(3), fi_eq(3), fi_mr(3)

AUTHORS
     OpenFabrics.

Libfabric Programmer's Manual	   2022-03-30			    fi_domain(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=fi_domain_bind&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help