18.2.17. PMIx_Query_info
PMIx_Query_info, PMIx_Query_info_nb — Query information about the
system in general.
18.2.17.1. SYNOPSIS
#include <pmix.h>
pmix_status_t PMIx_Query_info(pmix_query_t queries[], size_t nqueries,
pmix_info_t **results, size_t *nresults);
pmix_status_t PMIx_Query_info_nb(pmix_query_t queries[], size_t nqueries,
pmix_info_cbfunc_t cbfunc, void *cbdata);
18.2.17.1.1. Python Syntax
from pmix import *
foo = PMIxClient()
# ... after a successful foo.init() ...
# each query is a dict with a list of key strings and a list of
# ``pmix_info_t`` qualifier dictionaries
pyq = [{'keys': [PMIX_QUERY_NAMESPACES],
'qualifiers': []}]
rc, results = foo.query(pyq)
# results is a list of Python ``pmix_info_t`` dictionaries
18.2.17.2. INPUT PARAMETERS
queries: Array ofpmix_query_tstructures. Each structure carries a NULL-terminated array of stringkeysidentifying the information being requested, plus an optional array ofqualifiers(apmix_info_tarray withnqualelements) that refine or scope those keys (see DIRECTIVES).nqueries: Number of elements in thequeriesarray. Must be non-zero, andqueriesmust be non-NULL.
18.2.17.3. OUTPUT PARAMETERS
results(blocking form): Address where a pointer to a freshly allocated array ofpmix_info_tholding the results is returned. Set toNULLwhen no data is returned. The caller must release the array withPMIX_INFO_FREE.nresults(blocking form): Address where the number of elements inresultsis returned; set to zero when no data is returned.
The non-blocking form replaces results/nresults with a callback:
cbfunc: Callback function of type pmix_info_cbfunc_t invoked with the status and result array once the query completes.cbdata: Opaque pointer passed, unmodified, tocbfunc.
18.2.17.4. DESCRIPTION
Query information about the system in general. This can include a list of active
namespaces, the fabric topology, or node-specific information such as the list of
peers executing on a given node. Unlike PMIx_Get(3), which
retrieves a single key value scoped to a specific session, job, application,
process, or node, PMIx_Query_info supports multiple keys per request, complex
search criteria expressed through qualifiers, and dynamic system-level information
that is not part of the job data provided at start of execution.
PMIx_Query_info is the blocking form: it does not return until the query has
completed, at which point results and nresults are set. PMIx_Query_info_nb
is the non-blocking form: it returns immediately after accepting the request for
processing, and the provided cbfunc is invoked with the final status and result
array. The blocking form is implemented in terms of the non-blocking form.
The library first attempts to satisfy each key from its local cache. Keys that
cannot be resolved locally are forwarded to the host environment (via the PMIx
server) for resolution. A small number of keys — notably the ABI version
queries — are always resolved locally. Results returned from the host
environment are cached so that subsequent retrievals can succeed with minimal
overhead; include the PMIX_QUERY_REFRESH_CACHE qualifier to bypass the cache
and obtain fresh values.
PMIx_Query_info is normally called between initialization
(PMIx_Init(3)) and finalization
(PMIx_Finalize(3)). As an exception, the blocking form
may be called before initialization when used exclusively with the
PMIX_QUERY_STABLE_ABI_VERSION and/or PMIX_QUERY_PROVISIONAL_ABI_VERSION
keys, which are computed entirely within the local library.
As with all non-blocking PMIx APIs, callers of PMIx_Query_info_nb must keep
the queries array valid until cbfunc is invoked.
18.2.17.5. DIRECTIVES
Each pmix_query_t combines a list of keys (the information requested) with
a list of qualifiers (attributes that scope or refine the request). The most
commonly used keys are listed first, followed by the remaining defined keys grouped
by purpose, and then the qualifiers. An implementation is not required to support
any particular key, and an unsupported key is handled the same way as a key that
could not be found. The value type shown for a key is the type of the value it
returns; the type shown for a qualifier is the type of data provided with it.
Commonly used keys:
PMIX_QUERY_NAMESPACES— return a comma-delimited list of the active namespaces known to the server.PMIX_QUERY_JOB_STATUS— return the status of a specified, currently executing job.PMIX_QUERY_QUEUE_LIST— return a list of scheduler queues.PMIX_QUERY_PROC_TABLE/PMIX_QUERY_LOCAL_PROC_TABLE— return the process table (all processes, or only those local to a node) for a namespace.PMIX_QUERY_SPAWN_SUPPORT— return a list of the attributes supported by thePMIx_SpawnAPI.PMIX_QUERY_MEMORY_USAGE— return memory usage statistics.PMIX_QUERY_ATTRIBUTE_SUPPORT— return the attributes supported by a named function. Must appear first in thekeysarray, followed by the user-level API names (e.g.,"PMIx_Get") whose support is being queried.PMIX_QUERY_NUM_PSETS/PMIX_QUERY_PSET_NAMES— return the number, or the names, of the defined process sets.PMIX_GROUP_NAMES(pmix_data_array_t*) — return an array of the string names of the process groups in which the given process is a member. The target process is identified with the usualPMIX_PROCID(orPMIX_NSPACE/PMIX_RANK) qualifier. This key may also be passed directly to PMIx_Get(3) to retrieve the same information for a single process.PMIX_QUERY_AVAIL_SERVERS— scan the local node for PMIx servers the caller could connect to. The result is an array ofpmix_info_t, each aPMIX_SERVER_INFO_ARRAY(pmix_data_array_t*) holding the available data for one connectable server (beginning with its namespace). That per-server data includes the server’sPMIX_SERVER_START_TIME(char*), the ctime-format time at which it created its rendezvous file.PMIX_QUERY_STABLE_ABI_VERSION/PMIX_QUERY_PROVISIONAL_ABI_VERSION— return the stable or provisional Standard ABI version supported by the library. These are resolved locally and may be queried before initialization.
Additional keys, grouped by purpose — introspection and support:
PMIX_QUERY_SUPPORTED_KEYS(char*) — return a comma-delimited list of the keys supported by the query function.PMIX_QUERY_DEBUG_SUPPORT(char*) — return a comma-delimited list of the supported debugger attributes.PMIX_QUERY_AUTHORIZATIONS(pmix_data_array_t*) — return the operations the tool is authorized to perform.
Namespaces and processes:
PMIX_QUERY_NAMESPACE_INFO(pmix_data_array_t*) — return an array of information about the active namespaces; each element includes the namespace and the command line of the application executing within it. Accepts an optionalPMIX_NSPACEqualifier to select one namespace.PMIX_QUERY_RESOLVE_PEERS(pmix_data_array_t*) — return the process IDs of the procs from a given namespace executing on a specified node, as if answering a PMIx_Resolve_peers(3) request on the caller’s behalf.PMIX_QUERY_RESOLVE_NODE(char*) — return a comma-delimited list of the nodes on which procs from a specified namespace have been placed, as if answering a PMIx_Resolve_nodes(3) request on the caller’s behalf.
Scheduler, queues, and allocations:
PMIX_QUERY_QUEUE_STATUS(pmix_data_array_t*) — return the name and status of each scheduler queue. Accepts an optionalPMIX_ALLOC_QUEUEqualifier to select one queue.PMIX_QUERY_ALLOC_STATUS(char*) — return a string reporting the status of an allocation request. Requires aPMIX_ALLOC_REQUEST_IDqualifier.PMIX_QUERY_ALLOCATION(pmix_data_array_t*) — return an array describing the nodes in an allocation. Accepts aPMIX_ALLOC_IDqualifier to select a specific allocation.PMIX_QUERY_ALLOC_IDS(pmix_data_array_t*) — return the allocation IDs known to the server.PMIX_QUERY_ALLOC_PROPERTIES(pmix_data_array_t*) — return the properties of a specific allocation. Requires aPMIX_ALLOC_IDqualifier, and accepts an optionalPMIX_ALLOC_PROPERTYqualifier to select a single property.PMIX_QUERY_MIN_ALLOC_UNIT(pmix_data_array_t*) — return the resources composing the minimum allocatable unit for the system.PMIX_QUERY_RES_BLOCKS(pmix_data_array_t*) — return the names of the currently defined resource blocks.PMIX_QUERY_RES_BLOCK_DEF(pmix_data_array_t*) — given a resource block name as its qualifier, return an array ofpmix_resource_unit_tdescribing the resources contained in that block.PMIX_QUERY_AVAILABLE_SLOTS(uint32_t) — return the number of slots currently available in the session (a point-in-time snapshot). Accepts an optionalPMIX_SESSION_IDqualifier.PMIX_TIME_REMAINING(uint32_t) — return the number of seconds remaining in the allocation for the specified namespace, defaulting to the allocation containing the caller. Accepts an optionalPMIX_NSPACEqualifier.
Process sets and groups:
PMIX_QUERY_PSET_MEMBERSHIP(pmix_data_array_t*) — return an array ofpmix_proc_tnaming the members of a specified process set.PMIX_QUERY_NUM_GROUPS(size_t) — return the number of process groups defined in the specified range (defaults to the session). Accepts an optionalPMIX_RANGEqualifier.PMIX_QUERY_GROUP_NAMES(pmix_data_array_t*) — return the string names of the process groups defined in the specified range (defaults to the session). Accepts an optionalPMIX_RANGEqualifier. Distinct fromPMIX_GROUP_NAMESabove, which returns the groups a given process belongs to.PMIX_QUERY_GROUP_MEMBERSHIP(pmix_data_array_t*) — return an array ofpmix_proc_tnaming the members of a specified process group. Requires aPMIX_GROUP_IDqualifier.
Resource usage, devices, and storage:
PMIX_QUERY_PROC_RESOURCE_USAGE(pmix_proc_t*) — return the resource-usage statistics for the specified process(es). A namespace combined withPMIX_RANK_WILDCARDreturns an array with one assembly per process. AcceptsPMIX_SESSION_ID,PMIX_NODEID, orPMIX_HOSTNAMEqualifiers.PMIX_QUERY_NODE_RESOURCE_USAGE(char*) — return the resource-usage statistics for the specified node(s). AcceptsPMIX_SESSION_ID,PMIX_NSPACE, orPMIX_JOBIDqualifiers.PMIX_DAEMON_MEMORY(float) — return the amount of memory, in megabytes, currently in use by the PMIx server daemon.PMIX_CLIENT_AVG_MEMORY(float) — return the average amount of memory, in megabytes, in use by the client processes on the node.PMIX_QUERY_DEVICES(pmix_data_array_t*) — return an array ofpmix_device_tfor the devices in the current topology that meet the query qualifications, e.g., aPMIX_DEVICE_TYPEqualifier.PMIX_QUERY_STORAGE_LIST(char*) — return a comma-delimited list of identifiers for all available storage systems.
Storage system information. PMIX_QUERY_STORAGE_LIST returns the available
storage-system identifiers; the following keys return the properties of a
particular system, selected with a PMIX_STORAGE_ID qualifier:
PMIX_STORAGE_PATH(char*) — the mount point corresponding to the specified storage ID.PMIX_STORAGE_VERSION(char*) — the version string for the storage system.PMIX_STORAGE_MEDIUM(pmix_storage_medium_t) — the storage medium(s) the system uses (e.g., SSD, HDD, tape). See pmix_storage_medium_t(5).PMIX_STORAGE_ACCESSIBILITY(pmix_storage_accessibility_t) — the accessibility level of the storage system (e.g., node, session). See pmix_storage_accessibility_t(5).PMIX_STORAGE_PERSISTENCE(pmix_storage_persistence_t) — the persistence level of the storage system (e.g., scratch, archive). See pmix_storage_persistence_t(5).PMIX_STORAGE_CAPACITY_LIMIT(uint64_t) — the overall capacity of the storage system, in base-2 megabytes.PMIX_STORAGE_CAPACITY_USED(double) — the overall used capacity of the storage system, in bytes.PMIX_STORAGE_OBJECT_LIMIT(uint64_t) — the overall limit on the number of objects (e.g., inodes) in the storage system.PMIX_STORAGE_OBJECTS_USED(uint64_t) — the number of objects currently in use in the storage system.PMIX_STORAGE_BW_CUR(double) — the recently observed bandwidth of the storage system, in bytes/sec.PMIX_STORAGE_BW_MAX(double) — the maximum (theoretical or observed) bandwidth of the storage system, in bytes/sec.PMIX_STORAGE_IOPS_CUR(double) — the recently observed I/O operations per second for the storage system.PMIX_STORAGE_IOPS_MAX(double) — the maximum (theoretical or observed) I/O operations per second for the storage system.PMIX_STORAGE_MINIMAL_XFER_SIZE(double) — the storage system’s atomic unit of transfer (e.g., block size), in bytes.PMIX_STORAGE_SUGGESTED_XFER_SIZE(double) — the suggested transfer size for the storage system, in bytes.
The bandwidth, IOPS, and suggested-transfer-size keys may be further qualified by
PMIX_STORAGE_ACCESS_TYPE to select read, write, or read/write access.
The following two keys appear only in returned results and cannot be used as
input to PMIx_Query_info or PMIx_Get:
PMIX_QUERY_RESULTS(pmix_data_array_t*) — the array of results produced for a givenpmix_query_t. When the query carried qualifiers, the first element is aPMIX_QUERY_QUALIFIERSentry; each remaining element is apmix_info_tpairing a queried key with its returned value.PMIX_QUERY_QUALIFIERS(pmix_data_array_t*) — the qualifiers that were included in the query that produced the accompanying results.
Commonly used qualifiers:
PMIX_QUERY_REFRESH_CACHE(bool) — bypass the local cache and retrieve a fresh value, refreshing the cache on return. Required on each query for which current (non-cached) data is needed.PMIX_SESSION_INFO/PMIX_JOB_INFO/PMIX_APP_INFO/PMIX_NODE_INFO/PMIX_PROC_INFO(bool) — scope the query to session-, job-, application-, node-, or process-level information, respectively.PMIX_PROCID(pmix_proc_t) — identify the specific process whose information is being requested. The identifier applies to every key in thatpmix_query_t.PMIX_NSPACE(char*) /PMIX_RANK(pmix_rank_t) — identify a specific process by namespace and rank. These must be used together. CombiningPMIX_PROCIDwith eitherPMIX_NSPACEorPMIX_RANKin the same query yieldsPMIX_ERR_BAD_PARAM.PMIX_CLIENT_ATTRIBUTES/PMIX_SERVER_ATTRIBUTES/PMIX_HOST_ATTRIBUTES/PMIX_TOOL_ATTRIBUTES(bool) — when used withPMIX_QUERY_ATTRIBUTE_SUPPORT, select the level(s) of attribute support to report. Omitting all levels is equivalent to requesting every level.PMIX_CLIENT_FUNCTIONS/PMIX_SERVER_FUNCTIONS/PMIX_TOOL_FUNCTIONS/PMIX_HOST_FUNCTIONS(bool) — when used withPMIX_QUERY_ATTRIBUTE_SUPPORT, return a comma-delimited list of the PMIx functions supported at the client, server, tool, or host level, respectively (in place of the per-function attribute listing produced by the correspondingPMIX_*_ATTRIBUTESqualifier).PMIX_QUERY_LOCAL_ONLY(bool) — constrain the query to locally available information only, rather than forwarding it to the host environment.PMIX_QUERY_REPORT_AVG(bool) — report average values.PMIX_QUERY_REPORT_MINMAX(bool) — report minimum and maximum values.PMIX_QUERY_SUPPORTED_QUALIFIERS(bool) — return a comma-delimited list of the qualifiers supported for the provided key, instead of performing the query on that key.PMIX_STORAGE_ID(char*) — identify the storage system whose information is being requested (used with the storage keys above).PMIX_STORAGE_TYPE(char*) — restrict a storage query to systems of the given type (e.g.,lustre,gpfs,fabric-attached).PMIX_STORAGE_ACCESS_TYPE(pmix_storage_access_type_t) — for the storage bandwidth, IOPS, and suggested-transfer-size keys, select which access type (read, write, or read/write) to report. See pmix_storage_access_type_t(5).
Qualifiers that are not applicable to a given key are ignored.
18.2.17.6. RETURN VALUE
For the blocking form, PMIX_SUCCESS indicates that all requested data was found
and returned in results. For the non-blocking form, PMIX_SUCCESS indicates
only that the request was accepted for processing; the final status and results are
delivered to cbfunc. In both cases the possible completion statuses include:
PMIX_SUCCESS— all requested data was found and returned.PMIX_ERR_PARTIAL_SUCCESS— only some of the requested data was found; the result array contains an element for each key that returned a value.PMIX_ERR_NOT_FOUND— none of the requested data was available.PMIX_ERR_NOT_SUPPORTED— the host environment does not support this operation.PMIX_ERR_BAD_PARAM— an invalid argument was supplied — for example,nqueriesof zero, aNULLqueriesarray, or a conflicting combination of process-identifier qualifiers.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 (and the query was not one of the locally resolvable ABI-version queries).
When a value other than PMIX_SUCCESS or PMIX_ERR_PARTIAL_SUCCESS is the
completion status, the result array is NULL and its count is zero. Any other
negative value indicates an appropriate error condition. PMIx error constants are
defined in pmix_common.h.
18.2.17.7. NOTES
The returned results array (blocking form) or the array delivered to cbfunc
(non-blocking form) is owned by the caller and must be released with
PMIX_INFO_FREE when no longer needed.
Because a query can carry multiple keys and qualifiers, it is well suited to
retrieving a multi-attribute block of data in a single request — something
the single-key PMIx_Get(3) API cannot do. For a single
static key value, however, PMIx_Get is typically faster because it avoids the
overhead of constructing and processing the pmix_query_t structure.