anv/utrace: use a bo pool for utrace buffers
When utrace/perfetto is active, we allocate/free utrace buffers at the same rate as command buffers. It's useful to have a pool that avoids GEM_CREATE/GEM_CLOSE ioctls. v2: Use the pool more Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Acked-by: Caio Oliveira <caio.oliveira@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16613>
This commit is contained in:
parent
0b92636b62
commit
c67c9688c3
|
@ -1170,6 +1170,7 @@ struct anv_device {
|
|||
struct list_head memory_objects;
|
||||
|
||||
struct anv_bo_pool batch_bo_pool;
|
||||
struct anv_bo_pool utrace_bo_pool;
|
||||
|
||||
struct anv_bo_cache bo_cache;
|
||||
|
||||
|
|
|
@ -119,19 +119,16 @@ anv_device_utrace_flush_cmd_buffers(struct anv_queue *queue,
|
|||
goto error_sync;
|
||||
|
||||
if (utrace_copies > 0) {
|
||||
result =
|
||||
anv_device_alloc_bo(device, "utrace-copy-buf", utrace_copies * 4096,
|
||||
ANV_BO_ALLOC_MAPPED, 0 /* explicit_address */,
|
||||
&flush->trace_bo);
|
||||
result = anv_bo_pool_alloc(&device->utrace_bo_pool,
|
||||
utrace_copies * 4096,
|
||||
&flush->trace_bo);
|
||||
if (result != VK_SUCCESS)
|
||||
goto error_trace_buf;
|
||||
|
||||
result =
|
||||
anv_device_alloc_bo(device, "utrace-copy-batch",
|
||||
/* 128 dwords of setup + 64 dwords per copy */
|
||||
align_u32(512 + 64 * utrace_copies, 4096),
|
||||
ANV_BO_ALLOC_MAPPED, 0 /* explicit_address */,
|
||||
&flush->batch_bo);
|
||||
result = anv_bo_pool_alloc(&device->utrace_bo_pool,
|
||||
/* 128 dwords of setup + 64 dwords per copy */
|
||||
align_u32(512 + 64 * utrace_copies, 4096),
|
||||
&flush->batch_bo);
|
||||
if (result != VK_SUCCESS)
|
||||
goto error_batch_buf;
|
||||
|
||||
|
@ -184,9 +181,9 @@ anv_device_utrace_flush_cmd_buffers(struct anv_queue *queue,
|
|||
error_batch:
|
||||
anv_reloc_list_finish(&flush->relocs, &device->vk.alloc);
|
||||
error_reloc_list:
|
||||
anv_device_release_bo(device, flush->batch_bo);
|
||||
anv_bo_pool_free(&device->utrace_bo_pool, flush->batch_bo);
|
||||
error_batch_buf:
|
||||
anv_device_release_bo(device, flush->trace_bo);
|
||||
anv_bo_pool_free(&device->utrace_bo_pool, flush->trace_bo);
|
||||
error_trace_buf:
|
||||
vk_sync_destroy(&device->vk, flush->sync);
|
||||
error_sync:
|
||||
|
@ -202,8 +199,9 @@ anv_utrace_create_ts_buffer(struct u_trace_context *utctx, uint32_t size_b)
|
|||
|
||||
struct anv_bo *bo = NULL;
|
||||
UNUSED VkResult result =
|
||||
anv_device_alloc_bo(device, "utrace-ts", align_u32(size_b, 4096),
|
||||
ANV_BO_ALLOC_MAPPED, 0, &bo);
|
||||
anv_bo_pool_alloc(&device->utrace_bo_pool,
|
||||
align_u32(size_b, 4096),
|
||||
&bo);
|
||||
assert(result == VK_SUCCESS);
|
||||
|
||||
return bo;
|
||||
|
@ -216,7 +214,7 @@ anv_utrace_destroy_ts_buffer(struct u_trace_context *utctx, void *timestamps)
|
|||
container_of(utctx, struct anv_device, ds.trace_context);
|
||||
struct anv_bo *bo = timestamps;
|
||||
|
||||
anv_device_release_bo(device, bo);
|
||||
anv_bo_pool_free(&device->utrace_bo_pool, bo);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -285,6 +283,7 @@ queue_family_to_name(const struct anv_queue_family *family)
|
|||
void
|
||||
anv_device_utrace_init(struct anv_device *device)
|
||||
{
|
||||
anv_bo_pool_init(&device->utrace_bo_pool, device, "utrace");
|
||||
intel_ds_device_init(&device->ds, &device->info, device->fd,
|
||||
device->physical->local_minor - 128,
|
||||
INTEL_DS_API_VULKAN);
|
||||
|
@ -311,6 +310,7 @@ anv_device_utrace_finish(struct anv_device *device)
|
|||
{
|
||||
u_trace_context_process(&device->ds.trace_context, true);
|
||||
intel_ds_device_fini(&device->ds);
|
||||
anv_bo_pool_finish(&device->utrace_bo_pool);
|
||||
}
|
||||
|
||||
enum intel_ds_stall_flag
|
||||
|
|
Loading…
Reference in New Issue