drm/vmwgfx: Add a mksstat counter for cotable resizes
There's been a lot of cotable resizes on startup which we can track by adding a mks stat to measure both the invocation count and time spent doing cotable resizes. This is only used if kernel is configured with CONFIG_DRM_VMWGFX_MKSSTATS The stats are collected on the host size inside the vmware-stats.log file. Signed-off-by: Zack Rusin <zackr@vmware.com> Reviewed-by: Michael Banack <banackm@vmware.com> Reviewed-by: Martin Krastev <krastevm@vmware.com> Reviewed-by: Maaz Mombasawala <mombasawalam@vmware.com> Link: https://patchwork.freedesktop.org/patch/msgid/20221022040236.616490-16-zack@kde.org
This commit is contained in:
parent
2e10cdc6e8
commit
4bb50606cb
@ -33,6 +33,7 @@
|
||||
#include <drm/ttm/ttm_placement.h>
|
||||
|
||||
#include "vmwgfx_drv.h"
|
||||
#include "vmwgfx_mksstat.h"
|
||||
#include "vmwgfx_resource_priv.h"
|
||||
#include "vmwgfx_so.h"
|
||||
|
||||
@ -395,9 +396,12 @@ static int vmw_cotable_resize(struct vmw_resource *res, size_t new_size)
|
||||
int ret;
|
||||
size_t i;
|
||||
|
||||
MKS_STAT_TIME_DECL(MKSSTAT_KERN_COTABLE_RESIZE);
|
||||
MKS_STAT_TIME_PUSH(MKSSTAT_KERN_COTABLE_RESIZE);
|
||||
|
||||
ret = vmw_cotable_readback(res);
|
||||
if (ret)
|
||||
return ret;
|
||||
goto out_done;
|
||||
|
||||
cur_size_read_back = vcotbl->size_read_back;
|
||||
vcotbl->size_read_back = old_size_read_back;
|
||||
@ -411,7 +415,7 @@ static int vmw_cotable_resize(struct vmw_resource *res, size_t new_size)
|
||||
true, true, vmw_bo_bo_free, &buf);
|
||||
if (ret) {
|
||||
DRM_ERROR("Failed initializing new cotable MOB.\n");
|
||||
return ret;
|
||||
goto out_done;
|
||||
}
|
||||
|
||||
bo = &buf->base;
|
||||
@ -485,6 +489,8 @@ static int vmw_cotable_resize(struct vmw_resource *res, size_t new_size)
|
||||
/* Release the pin acquired in vmw_bo_init */
|
||||
ttm_bo_unpin(bo);
|
||||
|
||||
MKS_STAT_TIME_POP(MKSSTAT_KERN_COTABLE_RESIZE);
|
||||
|
||||
return 0;
|
||||
|
||||
out_map_new:
|
||||
@ -494,6 +500,9 @@ out_wait:
|
||||
ttm_bo_unreserve(bo);
|
||||
vmw_bo_unreference(&buf);
|
||||
|
||||
out_done:
|
||||
MKS_STAT_TIME_POP(MKSSTAT_KERN_COTABLE_RESIZE);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -29,6 +29,7 @@
|
||||
#define _VMWGFX_MKSSTAT_H_
|
||||
|
||||
#include <asm/page.h>
|
||||
#include <linux/kconfig.h>
|
||||
|
||||
/* Reservation marker for mksstat pid's */
|
||||
#define MKSSTAT_PID_RESERVED -1
|
||||
@ -41,6 +42,7 @@
|
||||
|
||||
typedef enum {
|
||||
MKSSTAT_KERN_EXECBUF, /* vmw_execbuf_ioctl */
|
||||
MKSSTAT_KERN_COTABLE_RESIZE,
|
||||
|
||||
MKSSTAT_KERN_COUNT /* Reserved entry; always last */
|
||||
} mksstat_kern_stats_t;
|
||||
|
@ -85,7 +85,14 @@ struct rpc_channel {
|
||||
u32 cookie_low;
|
||||
};
|
||||
|
||||
|
||||
#if IS_ENABLED(CONFIG_DRM_VMWGFX_MKSSTATS)
|
||||
/* Kernel mksGuestStats counter names and desciptions; same order as enum mksstat_kern_stats_t */
|
||||
static const char* const mksstat_kern_name_desc[MKSSTAT_KERN_COUNT][2] =
|
||||
{
|
||||
{ "vmw_execbuf_ioctl", "vmw_execbuf_ioctl" },
|
||||
{ "vmw_cotable_resize", "vmw_cotable_resize" },
|
||||
};
|
||||
#endif
|
||||
|
||||
/**
|
||||
* vmw_open_channel
|
||||
@ -695,12 +702,6 @@ static inline void hypervisor_ppn_remove(PPN64 pfn)
|
||||
/* Header to the text description of mksGuestStat instance descriptor */
|
||||
#define MKSSTAT_KERNEL_DESCRIPTION "vmwgfx"
|
||||
|
||||
/* Kernel mksGuestStats counter names and desciptions; same order as enum mksstat_kern_stats_t */
|
||||
static const char* const mksstat_kern_name_desc[MKSSTAT_KERN_COUNT][2] =
|
||||
{
|
||||
{ "vmw_execbuf_ioctl", "vmw_execbuf_ioctl" },
|
||||
};
|
||||
|
||||
/**
|
||||
* mksstat_init_record: Initializes an MKSGuestStatCounter-based record
|
||||
* for the respective mksGuestStat index.
|
||||
@ -786,6 +787,7 @@ static int mksstat_init_kern_id(struct page **ppage)
|
||||
/* Set up all kernel-internal counters and corresponding structures */
|
||||
pstrs_acc = pstrs;
|
||||
pstrs_acc = mksstat_init_record_time(MKSSTAT_KERN_EXECBUF, pstat, pinfo, pstrs_acc);
|
||||
pstrs_acc = mksstat_init_record_time(MKSSTAT_KERN_COTABLE_RESIZE, pstat, pinfo, pstrs_acc);
|
||||
|
||||
/* Add new counters above, in their order of appearance in mksstat_kern_stats_t */
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user