mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-01 17:35:17 +00:00
node_memory: Define the APIs to get/set memory parameters
* include/libvirt/libvirt.h.in: (Add macros for the param fields, declare the APIs). * src/driver.h: (New methods for the driver struct) * src/libvirt.c: (Implement the public APIs) * src/libvirt_public.syms: (Export the public symbols)
This commit is contained in:
parent
d15d092cda
commit
12ad7435de
@ -4350,6 +4350,69 @@ typedef struct _virTypedParameter virMemoryParameter;
|
||||
*/
|
||||
typedef virMemoryParameter *virMemoryParameterPtr;
|
||||
|
||||
/*
|
||||
* VIR_NODE_MEMORY_SHARED_PAGES_TO_SCAN:
|
||||
*
|
||||
* Macro for typed parameter that represents how many present pages
|
||||
* to scan before the shared memory service goes to sleep.
|
||||
*/
|
||||
# define VIR_NODE_MEMORY_SHARED_PAGES_TO_SCAN "shm_pages_to_scan"
|
||||
|
||||
/*
|
||||
* VIR_NODE_MEMORY_SHARED_SLEEP_MILLISECS:
|
||||
*
|
||||
* Macro for typed parameter that represents how many milliseconds
|
||||
* the shared memory service should sleep before next scan.
|
||||
*/
|
||||
# define VIR_NODE_MEMORY_SHARED_SLEEP_MILLISECS "shm_sleep_millisecs"
|
||||
|
||||
/*
|
||||
* VIR_NODE_MEMORY_SHARED_PAGES_SHARED:
|
||||
*
|
||||
* Macro for typed parameter that represents how many the shared
|
||||
* mmeory pages are being used.
|
||||
*/
|
||||
# define VIR_NODE_MEMORY_SHARED_PAGES_SHARED "shm_pages_shared"
|
||||
|
||||
/*
|
||||
* VIR_NODE_MEMORY_SHARED_PAGES_SHARING:
|
||||
*
|
||||
* Macro for typed parameter that represents how many sites are
|
||||
* sharing the pages i.e. how much saved.
|
||||
*/
|
||||
# define VIR_NODE_MEMORY_SHARED_PAGES_SHARING "shm_pages_sharing"
|
||||
|
||||
/* VIR_NODE_MEMORY_SHARED_PAGES_UNSHARED:
|
||||
*
|
||||
* Macro for typed parameter that represents how many pages unique
|
||||
* but repeatedly checked for merging.
|
||||
*/
|
||||
# define VIR_NODE_MEMORY_SHARED_PAGES_UNSHARED "shm_pages_unshared"
|
||||
|
||||
/* VIR_NODE_MEMORY_SHARED_PAGES_VOLATILE:
|
||||
*
|
||||
* Macro for typed parameter that represents how many pages changing
|
||||
* too fast to be placed in a tree.
|
||||
*/
|
||||
# define VIR_NODE_MEMORY_SHARED_PAGES_VOLATILE "shm_pages_volatile"
|
||||
|
||||
/* VIR_NODE_MEMORY_SHARED_FULL_SCAN:
|
||||
*
|
||||
* Macro for typed parameter that represents how many times all
|
||||
* mergeable areas have been scanned.
|
||||
*/
|
||||
# define VIR_NODE_MEMORY_SHARED_FULL_SCANS "shm_full_scans"
|
||||
|
||||
int virNodeGetMemoryParameters(virConnectPtr conn,
|
||||
virTypedParameterPtr params,
|
||||
int *nparams,
|
||||
unsigned int flags);
|
||||
|
||||
int virNodeSetMemoryParameters(virConnectPtr conn,
|
||||
virTypedParameterPtr params,
|
||||
int nparams,
|
||||
unsigned int flags);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
@ -427,6 +427,8 @@ skip_impl = (
|
||||
'virDomainGetDiskErrors',
|
||||
'virConnectUnregisterCloseCallback',
|
||||
'virConnectRegisterCloseCallback',
|
||||
'virNodeGetMemoryParameters',
|
||||
'virNodeSetMemoryParameters',
|
||||
)
|
||||
|
||||
qemu_skip_impl = (
|
||||
|
14
src/driver.h
14
src/driver.h
@ -882,6 +882,18 @@ typedef char *
|
||||
const char *uri,
|
||||
unsigned int flags);
|
||||
|
||||
typedef int
|
||||
(*virDrvNodeGetMemoryParameters)(virConnectPtr conn,
|
||||
virTypedParameterPtr params,
|
||||
int *nparams,
|
||||
unsigned int flags);
|
||||
|
||||
typedef int
|
||||
(*virDrvNodeSetMemoryParameters)(virConnectPtr conn,
|
||||
virTypedParameterPtr params,
|
||||
int nparams,
|
||||
unsigned int flags);
|
||||
|
||||
/**
|
||||
* _virDriver:
|
||||
*
|
||||
@ -1068,6 +1080,8 @@ struct _virDriver {
|
||||
virDrvDomainGetDiskErrors domainGetDiskErrors;
|
||||
virDrvDomainSetMetadata domainSetMetadata;
|
||||
virDrvDomainGetMetadata domainGetMetadata;
|
||||
virDrvNodeGetMemoryParameters nodeGetMemoryParameters;
|
||||
virDrvNodeSetMemoryParameters nodeSetMemoryParameters;
|
||||
};
|
||||
|
||||
typedef int
|
||||
|
121
src/libvirt.c
121
src/libvirt.c
@ -6720,6 +6720,127 @@ error:
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*
|
||||
* virNodeGetMemoryParameters:
|
||||
* @conn: pointer to the hypervisor connection
|
||||
* @params: pointer to memory parameter object
|
||||
* (return value, allocated by the caller)
|
||||
* @nparams: pointer to number of memory parameters; input and output
|
||||
* @flags: extra flags; not used yet, so callers should always pass 0
|
||||
*
|
||||
* Get all node memory parameters. On input, @nparams gives the size
|
||||
* of the @params array; on output, @nparams gives how many slots were
|
||||
* filled with parameter information, which might be less but will
|
||||
* not exceed the input value.
|
||||
*
|
||||
* As a special case, calling with @params as NULL and @nparams as 0 on
|
||||
* input will cause @nparams on output to contain the number of parameters
|
||||
* supported by the hypervisor. The caller should then allocate @params
|
||||
* array, i.e. (sizeof(@virTypedParameter) * @nparams) bytes and call the API
|
||||
* again. See virDomainGetMemoryParameters() for an equivalent usage
|
||||
* example.
|
||||
*
|
||||
* Returns 0 in case of success, and -1 in case of failure.
|
||||
*/
|
||||
int
|
||||
virNodeGetMemoryParameters(virConnectPtr conn,
|
||||
virTypedParameterPtr params,
|
||||
int *nparams,
|
||||
unsigned int flags)
|
||||
{
|
||||
VIR_DEBUG("conn=%p, params=%p, nparams=%p, flags=%x",
|
||||
conn, params, nparams, flags);
|
||||
|
||||
virResetLastError();
|
||||
|
||||
if (!VIR_IS_CONNECT(conn)) {
|
||||
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
|
||||
virDispatchError(NULL);
|
||||
return -1;
|
||||
}
|
||||
|
||||
virCheckNonNullArgGoto(nparams, error);
|
||||
virCheckNonNegativeArgGoto(*nparams, error);
|
||||
if (*nparams != 0)
|
||||
virCheckNonNullArgGoto(params, error);
|
||||
|
||||
if (VIR_DRV_SUPPORTS_FEATURE(conn->driver, conn,
|
||||
VIR_DRV_FEATURE_TYPED_PARAM_STRING))
|
||||
flags |= VIR_TYPED_PARAM_STRING_OKAY;
|
||||
|
||||
if (conn->driver->nodeGetMemoryParameters) {
|
||||
int ret;
|
||||
ret = conn->driver->nodeGetMemoryParameters(conn, params,
|
||||
nparams, flags);
|
||||
if (ret < 0)
|
||||
goto error;
|
||||
return ret;
|
||||
}
|
||||
|
||||
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
|
||||
|
||||
error:
|
||||
virDispatchError(conn);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*
|
||||
* virNodeSetMemoryParameters:
|
||||
* @conn: pointer to the hypervisor connection
|
||||
* @params: pointer to scheduler parameter objects
|
||||
* @nparams: number of scheduler parameter objects
|
||||
* (this value can be the same or less than the returned
|
||||
* value nparams of virDomainGetSchedulerType)
|
||||
* @flags: extra flags; not used yet, so callers should always pass 0
|
||||
*
|
||||
* Change all or a subset of the node memory tunables.
|
||||
* This function may require privileged access to the hypervisor.
|
||||
*
|
||||
* Returns 0 in case of success, -1 in case of failure.
|
||||
*/
|
||||
int
|
||||
virNodeSetMemoryParameters(virConnectPtr conn,
|
||||
virTypedParameterPtr params,
|
||||
int nparams,
|
||||
unsigned int flags)
|
||||
{
|
||||
VIR_DEBUG("conn=%p, params=%p, nparams=%d, flags=%x",
|
||||
conn, params, nparams, flags);
|
||||
|
||||
virResetLastError();
|
||||
|
||||
if (!VIR_IS_CONNECT(conn)) {
|
||||
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
|
||||
virDispatchError(NULL);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (conn->flags & VIR_CONNECT_RO) {
|
||||
virLibConnError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
|
||||
goto error;
|
||||
}
|
||||
|
||||
virCheckNonNullArgGoto(params, error);
|
||||
virCheckNonNegativeArgGoto(nparams, error);
|
||||
|
||||
if (virTypedParameterValidateSet(conn, params, nparams) < 0)
|
||||
goto error;
|
||||
|
||||
if (conn->driver->nodeSetMemoryParameters) {
|
||||
int ret;
|
||||
ret = conn->driver->nodeSetMemoryParameters(conn, params,
|
||||
nparams, flags);
|
||||
if (ret < 0)
|
||||
goto error;
|
||||
return ret;
|
||||
}
|
||||
|
||||
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
|
||||
|
||||
error:
|
||||
virDispatchError(conn);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* virDomainGetSchedulerType:
|
||||
|
@ -562,6 +562,8 @@ LIBVIRT_0.10.2 {
|
||||
virConnectListAllNWFilters;
|
||||
virConnectListAllSecrets;
|
||||
virConnectListAllStoragePools;
|
||||
virNodeGetMemoryParameters;
|
||||
virNodeSetMemoryParameters;
|
||||
virStoragePoolListAllVolumes;
|
||||
} LIBVIRT_0.10.0;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user