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

  
 
  

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

NAME
     fi_cntr - Completion and event counter operations

     fi_cntr_open / fi_close
	    Allocate/free a counter

     fi_cntr_read
	    Read the current value of a counter

     fi_cntr_readerr
	    Reads the number of operations which have completed in error.

     fi_cntr_add
	    Increment a counter by a specified value

     fi_cntr_set
	    Set a counter to a specified value

     fi_cntr_wait
	    Wait for a counter to be greater or equal to a threshold value

SYNOPSIS
	    #include <rdma/fi_domain.h>

	    int fi_cntr_open(struct fid_domain *domain, struct fi_cntr_attr *attr,
		struct fid_cntr **cntr, void *context);

	    int fi_close(struct fid *cntr);

	    uint64_t fi_cntr_read(struct fid_cntr *cntr);

	    uint64_t fi_cntr_readerr(struct fid_cntr *cntr);

	    int fi_cntr_add(struct fid_cntr *cntr, uint64_t value);

	    int fi_cntr_adderr(struct fid_cntr *cntr, uint64_t value);

	    int fi_cntr_set(struct fid_cntr *cntr, uint64_t value);

	    int fi_cntr_seterr(struct fid_cntr *cntr, uint64_t value);

	    int fi_cntr_wait(struct fid_cntr *cntr, uint64_t threshold,
		int timeout);

ARGUMENTS
     domain
	    Fabric domain

     cntr   Fabric counter

     attr   Counter attributes

     context
	    User specified context associated with the counter

     value  Value to increment or set counter

     threshold
	    Value to compare counter against

     timeout
	    Time  in  milliseconds to wait.  A negative value indicates infinite
	    timeout.

DESCRIPTION
     Counters record the number of requested  operations  that	have  completed.
     Counters  can  provide  a light-weight completion mechanism by allowing the
     suppression of CQ completion entries.  They  are  useful  for  applications
     that  only need to know the number of requests that have completed, and not
     details about each request.  For example, counters may be useful for imple-
     menting credit  based  flow  control  or  tracking  the  number  of  remote
     processes that have responded to a request.

     Counters typically only count successful completions.  However, if an oper-
     ation completes in error, it may increment an associated error value.  That
     is,  a  counter actually stores two distinct values, with error completions
     updating an error specific value.

     Counters are updated following the completion event  semantics  defined  in
     fi_cq(3).	 The  timing  of the update is based on the type of transfer and
     any specified operation flags.

   fi_cntr_open
     fi_cntr_open allocates a new fabric counter.  The properties  and	behavior
     of the counter are defined by struct fi_cntr_attr.

	    struct fi_cntr_attr {
		enum fi_cntr_events  events;	/* type of events to count */
		enum fi_wait_obj     wait_obj;	/* requested wait object */
		struct fid_wait     *wait_set;	/* optional wait set */
		uint64_t	     flags;	/* operation flags */
	    };

     events
	    A  counter	captures  different  types of events.  The specific type
	    which is to counted are one of the following:

     - FI_CNTR_EVENTS_COMP
	    The counter increments for every successful completion  that  occurs
	    on	an  associated	bound endpoint.  The type of completions - sends
	    and/or receives - which are counted may be restricted using  control
	    flags when binding the counter and the endpoint.  Counters increment
	    on all successful completions, separately from whether the operation
	    generates an entry in an event queue.

     wait_obj
	    Counters  may  be  associated with a specific wait object.	Wait ob-
	    jects allow applications to block until the wait object is signaled,
	    indicating that a counter has reached a specific  threshold.   Users
	    may use fi_control to retrieve the underlying wait object associated
	    with  a counter, in order to use it in other system calls.	The fol-
	    lowing values may be used to specify the type of wait object associ-
	    ated with  a  counter:  FI_WAIT_NONE,  FI_WAIT_UNSPEC,  FI_WAIT_SET,
	    FI_WAIT_FD,  FI_WAIT_MUTEX_COND,  and FI_WAIT_YIELD.  The default is
	    FI_WAIT_NONE.

     - FI_WAIT_NONE
	    Used to indicate that the user will not block (wait) for  events  on
	    the counter.

     - FI_WAIT_UNSPEC
	    Specifies  that  the user will only wait on the counter using fabric
	    interface calls, such as fi_cntr_wait.  In this case, the underlying
	    provider may select the most appropriate or highest performing  wait
	    object  available,	including  custom wait mechanisms.  Applications
	    that select FI_WAIT_UNSPEC are not guaranteed to retrieve the under-
	    lying wait object.

     - FI_WAIT_SET
	    Indicates that the event counter should use a  wait  set  object  to
	    wait for events.  If specified, the wait_set field must reference an
	    existing wait set object.

     - FI_WAIT_FD
	    Indicates  that the counter should use a file descriptor as its wait
	    mechanism.	A file descriptor wait object must be usable in  select,
	    poll, and epoll routines.  However, a provider may signal an FD wait
	    object by marking it as readable, writable, or with an error.

     - FI_WAIT_MUTEX_COND
	    Specifies that the counter should use a pthread mutex and cond vari-
	    able as a wait object.

     - FI_WAIT_YIELD
	    Indicates  that  the counter will wait without a wait object but in-
	    stead yield on every wait.	Allows usage of fi_cntr_wait  through  a
	    spin.

     wait_set
	    If	wait_obj  is FI_WAIT_SET, this field references a wait object to
	    which the event counter should attach.  When an event  is  added  to
	    the  event	counter,  the corresponding wait set will be signaled if
	    all necessary conditions are met.  The use of a wait_set enables  an
	    optimized  method  of waiting for events across multiple event coun-
	    ters.  This field is ignored if wait_obj is not FI_WAIT_SET.

     flags  Flags are reserved for future use, and must be set to 0.

   fi_close
     The fi_close call releases all resources associated with a  counter.   When
     closing  the counter, there must be no opened endpoints, transmit contexts,
     receive contexts or memory regions associated with  the  counter.	 If  re-
     sources are still associated with the counter when attempting to close, the
     call will return -FI_EBUSY.

   fi_cntr_control
     The  fi_cntr_control call is used to access provider or implementation spe-
     cific details of the counter.  Access to the counter should  be  serialized
     across  all  calls  when fi_cntr_control is invoked, as it may redirect the
     implementation of counter operations.  The following control  commands  are
     usable with a counter:

     FI_GETOPSFLAG (uint64_t *)
	    Returns  the  current  default operational flags associated with the
	    counter.

     FI_SETOPSFLAG (uint64_t *)
	    Modifies the current default operational flags associated  with  the
	    counter.

     FI_GETWAIT (void **)
	    This  command  allows the user to retrieve the low-level wait object
	    associated with the counter.  The format of the wait-object is spec-
	    ified during counter creation, through the counter attributes.   See
	    fi_eq.3 for addition details using control with FI_GETWAIT.

   fi_cntr_read
     The fi_cntr_read call returns the current value of the counter.

   fi_cntr_readerr
     The  read error call returns the number of operations that completed in er-
     ror and were unable to update the counter.

   fi_cntr_add
     This adds the user-specified value to the counter.

   fi_cntr_adderr
     This adds the user-specified value to the error value of the counter.

   fi_cntr_set
     This sets the counter to the specified value.

   fi_cntr_seterr
     This sets the error value of the counter to the specified value.

   fi_cntr_wait
     This call may be used to wait  until  the	counter  reaches  the  specified
     threshold,  or  until  an	error or timeout occurs.  Upon successful return
     from this call, the counter will be greater than  or  equal  to  the  input
     threshold value.

     If  an  operation	associated with the counter encounters an error, it will
     increment the error value associated with the counter.   Any  change  in  a
     counter's error value will unblock any thread inside fi_cntr_wait.

     If  the  call  returns due to timeout, -FI_ETIMEDOUT will be returned.  The
     error value associated with the counter remains unchanged.

     It is invalid for applications to call this function  if  the  counter  has
     been configured with a wait object of FI_WAIT_NONE or FI_WAIT_SET.

RETURN VALUES
     Returns  0  on success.  On error, a negative value corresponding to fabric
     errno is returned.

     fi_cntr_read / fi_cntr_readerr
	    Returns the current value of the counter.

     Fabric errno values are defined in rdma/fi_errno.h.

NOTES
     In order to support a variety of counter implementations, updates	made  to
     counter  values  (e.g. fi_cntr_set  or  fi_cntr_add) may not be immediately
     visible to counter read operations (i.e. fi_cntr_read or  fi_cntr_readerr).
     A	small,	but  undefined, delay may occur between the counter changing and
     the reported value being updated.	However,  a  final  updated  value  will
     eventually be reflected in the read counter value.

     Additionally,  applications  should  ensure  that the value of a counter is
     stable  and  not  subject	to  change  prior  to  calling	fi_cntr_set   or
     fi_cntr_seterr.   Otherwise,  the	resulting  value  of  the  counter after
     fi_cntr_set / fi_cntr_seterr is undefined, as updates to the counter may be
     lost.  A counter value is considered stable if all previous  updates  using
     fi_cntr_set  /  fi_cntr_seterr  and  results  of related operations are re-
     flected in the observed value of the counter.

SEE ALSO
     fi_getinfo(3), fi_endpoint(3), fi_domain(3), fi_eq(3), fi_poll(3)

AUTHORS
     OpenFabrics.

Libfabric Programmer's Manual	   2021-03-22			      fi_cntr(3)

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

home | help