drm/amdkfd: Print a warning when the runlist becomes oversubscribed
authorFelix Kuehling <Felix.Kuehling@amd.com>
Thu, 20 Jun 2019 19:37:37 +0000 (15:37 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 3 Jul 2019 19:31:26 +0000 (14:31 -0500)
Oversubscription of queues or processes results in poor performance
mostly because HWS blinbly schedules busy and idle queues, resulting
in poor occupancy if many queues are idle.

Let users know with a warning message when transitioning from a
non-oversubscribed to an oversubscribed runlist.

Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com>
Reviewed-by: Oak Zeng <Oak.Zeng@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdkfd/kfd_packet_manager.c
drivers/gpu/drm/amd/amdkfd/kfd_priv.h

index c72c8f5fd54c0d1028d148aa65d368bc1c61afa9..ccf6b2310316e563fce4086e5c8d865b3d23a240 100644 (file)
@@ -203,11 +203,15 @@ static int pm_create_runlist_ib(struct packet_manager *pm,
 
        pr_debug("Finished map process and queues to runlist\n");
 
-       if (is_over_subscription)
+       if (is_over_subscription) {
+               if (!pm->is_over_subscription)
+                       pr_warn("Runlist is getting oversubscribed. Expect reduced ROCm performance.\n");
                retval = pm->pmf->runlist(pm, &rl_buffer[rl_wptr],
                                        *rl_gpu_addr,
                                        alloc_size_bytes / sizeof(uint32_t),
                                        true);
+       }
+       pm->is_over_subscription = is_over_subscription;
 
        for (i = 0; i < alloc_size_bytes / sizeof(uint32_t); i++)
                pr_debug("0x%2X ", rl_buffer[i]);
index f88c0d706b1de8be3afd82e815eb29be5e24fe8b..08a0feb9d0a03579048a7f13ba04d8853bce12f4 100644 (file)
@@ -937,6 +937,7 @@ struct packet_manager {
        bool allocated;
        struct kfd_mem_obj *ib_buffer_obj;
        unsigned int ib_size_bytes;
+       bool is_over_subscription;
 
        const struct packet_manager_funcs *pmf;
 };