18.2.35. PMIx_Fabric_register
PMIx_Fabric_register, PMIx_Fabric_register_nb — Register for
access to fabric-related information, including the communication cost matrix.
18.2.35.1. SYNOPSIS
#include <pmix.h>
pmix_status_t PMIx_Fabric_register(pmix_fabric_t *fabric,
const pmix_info_t directives[],
size_t ndirs);
pmix_status_t PMIx_Fabric_register_nb(pmix_fabric_t *fabric,
const pmix_info_t directives[],
size_t ndirs,
pmix_op_cbfunc_t cbfunc, void *cbdata);
18.2.35.1.1. Python Syntax
from pmix import *
foo = PMIxClient()
# ... after a successful foo.init() ...
# the directives is a list of Python ``pmix_info_t`` dictionaries
pydirs = [{'key': PMIX_FABRIC_VENDOR,
'value': {'value': "ACME", 'val_type': PMIX_STRING}}]
rc, fabricinfo = foo.fabric_register(pydirs)
18.2.35.2. INPUT PARAMETERS
fabric: Address of apmix_fabric_tstructure (backed by storage). The caller may populate thenamefield at will — PMIx does not use that field. All remaining fields are filled in by the PMIx library and must not be modified by the caller.directives: Pointer to an optional array of pmix_info_t(5) structures indicating desired behaviors and/or the fabric to be accessed (see DIRECTIVES). ANULLvalue directs that the highest-priority available fabric be used.ndirs: Number of elements in thedirectivesarray.
The non-blocking form takes two additional parameters:
cbfunc: Callback function of type pmix_op_cbfunc_t to be invoked when the registration completes.cbdata: Opaque pointer that is passed, unmodified, tocbfunc.
18.2.35.3. DESCRIPTION
Register for access to fabric-related information, including the communication
cost matrix. This call must be made prior to requesting information from a
fabric. PMIx_Fabric_register is the blocking form: it does not return until
the registration is complete (or the operation fails), at which point the fields
of the provided fabric structure have been filled in.
PMIx_Fabric_register_nb is the non-blocking form: it returns immediately, and
the provided cbfunc is invoked once the fabric information has been loaded
into the fabric structure.
The caller may request access to a particular fabric using the vendor, type, or
identifier, or to a specific fabric plane via the PMIX_FABRIC_PLANE attribute
— otherwise, information for the default fabric is returned.
For performance reasons, the PMIx library does not provide thread protection
for accessing the information in the pmix_fabric_t structure. Instead, two
methods are provided for coordinating updates to the fabric information: the
caller may periodically poll for updates using
PMIx_Fabric_update(3), and/or register for
PMIX_FABRIC_UPDATE_PENDING events. When a PMIX_FABRIC_UPDATE_PENDING
event is received, the caller must pause or terminate any actions that access the
cost matrix before returning from the event handler; completion of the handler
signals the PMIx library that the object’s entries may be updated. When the
update is complete, the library generates a PMIX_FABRIC_UPDATED event
indicating that it is safe to resume using the updated fabric object. There is no
requirement that a caller use only one of these methods.
As with all non-blocking PMIx APIs, callers of PMIx_Fabric_register_nb
must keep the directives array valid until cbfunc is invoked, and
must not access the provided fabric structure until that time.
18.2.35.4. DIRECTIVES
The following directives are required to be supported by all PMIx libraries to aid callers in identifying the fabric whose data is being sought:
PMIX_FABRIC_PLANE(char*) — ID string of the fabric plane whose information is to be accessed (e.g., CIDR for Ethernet).PMIX_FABRIC_IDENTIFIER(char*) — identifier of the fabric to be accessed (e.g., MgmtEthernet, Slingshot-11, OmniPath-1).PMIX_FABRIC_VENDOR(char*) — name of the fabric vendor (e.g., Amazon, Mellanox, HPE, Intel) whose fabric is to be accessed.
18.2.35.5. FABRIC INFORMATION ATTRIBUTES
Once registration is complete, the fabric information is retrieved using
PMIx_Get(3) or
PMIx_Query_info(3). The following keys identify the
available fabric-level and per-device information. These are returned values
rather than registration directives, though several also serve as request
modifiers as noted. The PMIX_FABRIC_PLANE, PMIX_FABRIC_IDENTIFIER, and
PMIX_FABRIC_VENDOR directives above likewise double as retrieval modifiers;
unless a specific plane is named, information is returned for all planes in the
system.
Fabric-level information:
PMIX_FABRIC_COST_MATRIX(pointer) — pointer to a two-dimensional array of point-to-point relative communication costs, expressed asuint16_tvalues.PMIX_FABRIC_NUM_DEVICES(size_t) — total number of fabric devices in the system, corresponding to the number of rows or columns in the cost matrix.PMIX_FABRIC_INDEX(size_t) — the index of the fabric as returned in thepmix_fabric_tstructure.PMIX_FABRIC_GROUPS(char*) — the fabric group membership of the nodes, as a string ofgroup:node,node,...entries delimited by semicolons.PMIX_FABRIC_COORDINATES(pmix_data_array_t*) — an array ofpmix_geometry_tfabric coordinates for the devices on a node, covering all supported coordinate views. Defaults to the local node when none is specified.PMIX_FABRIC_DIMS(uint32_t) — the number of dimensions in the specified fabric plane/view.PMIX_FABRIC_SHAPE(pmix_data_array_t*) — the size of each dimension in the specified fabric plane/view, as an array ofuint32_tvalues.PMIX_FABRIC_SHAPE_STRING(char*) — the fabric shape expressed as a string (e.g.,"10x12x2").PMIX_FABRIC_SWITCH(char*) — the ID of a fabric switch. As a modifier, selects the switch whose information is returned; as a direct key, returns the identifiers of all switches in the system.PMIX_FABRIC_ENDPT(pmix_data_array_t*) — the fabric endpoints for a specified process, returned as an array ofpmix_endpoint_telements.
Per-device information (carried within each PMIX_FABRIC_DEVICE array):
PMIX_FABRIC_DEVICE(pmix_data_array_t*) — an array ofpmix_info_tdescribing a single fabric device; the first element is the device identifier.PMIX_FABRIC_DEVICES(pmix_data_array_t*) — an array containing aPMIX_FABRIC_DEVICEentry for every device on the specified node.PMIX_FABRIC_DEVICE_NAME(char*) — the OS name of the device (e.g.,eth0) or an absolute filename.PMIX_FABRIC_DEVICE_INDEX(uint32_t) — index of the device within the associated cost matrix.PMIX_FABRIC_DEVICE_VENDOR(char*) — name of the device’s vendor.PMIX_FABRIC_DEVICE_VENDORID(char*) — vendor-provided identifier for the device or product.PMIX_FABRIC_DEVICE_BUS_TYPE(char*) — type of bus to which the device is attached (e.g.,"PCI","GEN-Z").PMIX_FABRIC_DEVICE_DRIVER(char*) — name of the driver associated with the device.PMIX_FABRIC_DEVICE_FIRMWARE(char*) — the device’s firmware version.PMIX_FABRIC_DEVICE_ADDRESS(char*) — the primary link-level address of the device (e.g., a MAC address).PMIX_FABRIC_DEVICE_COORDINATES(pmix_geometry_t) — the fabric coordinates for the device across all supported coordinate views.PMIX_FABRIC_DEVICE_MTU(size_t) — the maximum transfer unit of link-level frames, in bytes.PMIX_FABRIC_DEVICE_SPEED(size_t) — the active link data rate, in bits per second.PMIX_FABRIC_DEVICE_STATE(pmix_link_state_t) — the last available physical port state (PMIX_LINK_STATE_UNKNOWN,PMIX_LINK_DOWN, orPMIX_LINK_UP).PMIX_FABRIC_DEVICE_TYPE(char*) — the type of fabric interface active on the device (e.g., Ethernet, InfiniBand).PMIX_FABRIC_DEVICE_PCI_DEVID(char*) — a node-level unique PCI device identifier, as a colon-delimiteddomain:bus:device:functiontuple in hexadecimal.
18.2.35.6. RETURN VALUE
For the blocking form, PMIX_SUCCESS indicates that the registration completed
and the fields of the fabric structure have been populated. For the
non-blocking form, a return of PMIX_SUCCESS indicates only that the request
was accepted for processing; the final status is delivered to cbfunc.
PMIX_SUCCESS— the registration completed successfully.PMIX_OPERATION_SUCCEEDED— (non-blocking form) the request was satisfied immediately andcbfuncwill not be called.PMIX_ERR_UNREACH— the process is not a server or scheduler and its local PMIx server could not be reached.PMIX_ERR_NOT_AVAILABLE— the operation cannot be serviced because the library’s progress engine has been stopped.PMIX_ERR_INIT— the PMIx library has not been initialized.
Any other negative value indicates an appropriate error condition. PMIx error
constants are defined in pmix_common.h.
18.2.35.7. NOTES
Due to their high cost in terms of execution time, memory consumption, and
interaction with other system management software (e.g., a fabric manager), the
fabric support functions are intended primarily for use by the PMIx server
library hosting the system scheduler (see PMIX_SERVER_SCHEDULER). Clients,
tools, and other servers that call these functions will have their requests
forwarded to the server supporting the scheduler.