mirror of
https://github.com/qemu/qemu.git
synced 2025-08-17 16:03:30 +00:00
qga: implement a 'guest-get-load' command
Provide a way to report the process load average, via a new 'guest-get-load' command. This is only implemented for POSIX platforms providing 'getloadavg'. Example illustrated with qmp-shell: (QEMU) guest-get-load { "return": { "load15m": 1.546875, "load1m": 1.669921875, "load5m": 1.9306640625 } } Windows has no native equivalent API, but it would be possible to simulate it as illustrated here (BSD-3-Clause): https://github.com/giampaolo/psutil/pull/1485 This is left as an exercise for future contributors. Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> Reviewed-by: Konstantin Kostiuk <kkostiuk@redhat.com> Message-ID: <20241202121927.864335-1-berrange@redhat.com> Signed-off-by: Konstantin Kostiuk <kkostiuk@redhat.com>
This commit is contained in:
parent
9ee90cfc25
commit
5288d9d085
@ -2646,6 +2646,7 @@ config_host_data.set('CONFIG_SETNS', cc.has_function('setns') and cc.has_functio
|
|||||||
config_host_data.set('CONFIG_SYNCFS', cc.has_function('syncfs'))
|
config_host_data.set('CONFIG_SYNCFS', cc.has_function('syncfs'))
|
||||||
config_host_data.set('CONFIG_SYNC_FILE_RANGE', cc.has_function('sync_file_range'))
|
config_host_data.set('CONFIG_SYNC_FILE_RANGE', cc.has_function('sync_file_range'))
|
||||||
config_host_data.set('CONFIG_TIMERFD', cc.has_function('timerfd_create'))
|
config_host_data.set('CONFIG_TIMERFD', cc.has_function('timerfd_create'))
|
||||||
|
config_host_data.set('CONFIG_GETLOADAVG', cc.has_function('getloadavg'))
|
||||||
config_host_data.set('HAVE_COPY_FILE_RANGE', cc.has_function('copy_file_range'))
|
config_host_data.set('HAVE_COPY_FILE_RANGE', cc.has_function('copy_file_range'))
|
||||||
config_host_data.set('HAVE_GETIFADDRS', cc.has_function('getifaddrs'))
|
config_host_data.set('HAVE_GETIFADDRS', cc.has_function('getifaddrs'))
|
||||||
config_host_data.set('HAVE_GLIB_WITH_SLICE_ALLOCATOR', glib_has_gslice)
|
config_host_data.set('HAVE_GLIB_WITH_SLICE_ALLOCATOR', glib_has_gslice)
|
||||||
|
@ -1368,3 +1368,23 @@ char *qga_get_host_name(Error **errp)
|
|||||||
|
|
||||||
return g_steal_pointer(&hostname);
|
return g_steal_pointer(&hostname);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_GETLOADAVG
|
||||||
|
GuestLoadAverage *qmp_guest_get_load(Error **errp)
|
||||||
|
{
|
||||||
|
double loadavg[3];
|
||||||
|
GuestLoadAverage *ret = NULL;
|
||||||
|
|
||||||
|
if (getloadavg(loadavg, G_N_ELEMENTS(loadavg)) < 0) {
|
||||||
|
error_setg_errno(errp, errno,
|
||||||
|
"cannot query load average");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = g_new0(GuestLoadAverage, 1);
|
||||||
|
ret->load1m = loadavg[0];
|
||||||
|
ret->load5m = loadavg[1];
|
||||||
|
ret->load15m = loadavg[2];
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
@ -1843,6 +1843,43 @@
|
|||||||
'if': 'CONFIG_LINUX'
|
'if': 'CONFIG_LINUX'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
##
|
||||||
|
# @GuestLoadAverage:
|
||||||
|
#
|
||||||
|
# Statistics about process load information
|
||||||
|
#
|
||||||
|
# @load1m: 1-minute load avage
|
||||||
|
#
|
||||||
|
# @load5m: 5-minute load avage
|
||||||
|
#
|
||||||
|
# @load15m: 15-minute load avage
|
||||||
|
#
|
||||||
|
# Since: 10.0
|
||||||
|
##
|
||||||
|
{ 'struct': 'GuestLoadAverage',
|
||||||
|
'data': {
|
||||||
|
'load1m': 'number',
|
||||||
|
'load5m': 'number',
|
||||||
|
'load15m': 'number'
|
||||||
|
},
|
||||||
|
'if': 'CONFIG_GETLOADAVG'
|
||||||
|
}
|
||||||
|
|
||||||
|
##
|
||||||
|
# @guest-get-load:
|
||||||
|
#
|
||||||
|
# Retrieve CPU process load information
|
||||||
|
#
|
||||||
|
# Returns: load information
|
||||||
|
#
|
||||||
|
# Since: 10.0
|
||||||
|
##
|
||||||
|
{ 'command': 'guest-get-load',
|
||||||
|
'returns': 'GuestLoadAverage',
|
||||||
|
'if': 'CONFIG_GETLOADAVG'
|
||||||
|
}
|
||||||
|
|
||||||
##
|
##
|
||||||
# @GuestNetworkRoute:
|
# @GuestNetworkRoute:
|
||||||
#
|
#
|
||||||
|
Loading…
Reference in New Issue
Block a user