drm/amdkfd: Update hardware scheduling time quanta
authorJoseph Greathouse <Joseph.Greathouse@amd.com>
Mon, 29 Jun 2020 21:23:24 +0000 (16:23 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 2 Jul 2020 16:02:55 +0000 (12:02 -0400)
Update PROCESS_QUANTUM, the time the hardware scheduler allows
processes to run before switching to other processes when it becomes
over-subscribed. Increase this to 10ms, to allow processes to better
amortize their task switch times.

Update HQD Quantum, the amount of time that an active queue stays
attached to the CP before we forcibly switch it for another active
queue for fairness.

Setting these so that HQD < PROCESS makes it easier to ensure that
we get fairness when we have multiple active queues on the device.
Otherwise we may start process-swapping before we get to all the
queues in a CP.

Signed-off-by: Joseph Greathouse <Joseph.Greathouse@amd.com>
Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v10.c
drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v9.c
drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_vi.c
drivers/gpu/drm/amd/amdkfd/kfd_packet_manager_v9.c
drivers/gpu/drm/amd/amdkfd/kfd_packet_manager_vi.c

index d1d68a51bfb80420ba30e6a1dd3666cb4cd1ae01..18e08d82d97846a627e17a145f78edccdaf72626 100644 (file)
@@ -113,7 +113,7 @@ static void init_mqd(struct mqd_manager *mm, void **mqd,
 
        m->cp_hqd_quantum = 1 << CP_HQD_QUANTUM__QUANTUM_EN__SHIFT |
                        1 << CP_HQD_QUANTUM__QUANTUM_SCALE__SHIFT |
-                       10 << CP_HQD_QUANTUM__QUANTUM_DURATION__SHIFT;
+                       1 << CP_HQD_QUANTUM__QUANTUM_DURATION__SHIFT;
 
        if (q->format == KFD_QUEUE_FORMAT_AQL) {
                m->cp_hqd_aql_control =
index 48cda3073b70448dd96851d2a55fa459c65e447d..3b6f5963180d5250ac6b50daeeb360ea3ed90f3b 100644 (file)
@@ -160,7 +160,7 @@ static void init_mqd(struct mqd_manager *mm, void **mqd,
 
        m->cp_hqd_quantum = 1 << CP_HQD_QUANTUM__QUANTUM_EN__SHIFT |
                        1 << CP_HQD_QUANTUM__QUANTUM_SCALE__SHIFT |
-                       10 << CP_HQD_QUANTUM__QUANTUM_DURATION__SHIFT;
+                       1 << CP_HQD_QUANTUM__QUANTUM_DURATION__SHIFT;
 
        if (q->format == KFD_QUEUE_FORMAT_AQL) {
                m->cp_hqd_aql_control =
index a5e8ff1e594550b1bbbbbf92a9865222d8f08fec..31799e5f3b3c5e6f34afbe812fb24f17871b5bac 100644 (file)
@@ -117,7 +117,7 @@ static void init_mqd(struct mqd_manager *mm, void **mqd,
 
        m->cp_hqd_quantum = 1 << CP_HQD_QUANTUM__QUANTUM_EN__SHIFT |
                        1 << CP_HQD_QUANTUM__QUANTUM_SCALE__SHIFT |
-                       10 << CP_HQD_QUANTUM__QUANTUM_DURATION__SHIFT;
+                       1 << CP_HQD_QUANTUM__QUANTUM_DURATION__SHIFT;
 
        set_priority(m, q);
        m->cp_hqd_eop_rptr = 1 << CP_HQD_EOP_RPTR__INIT_FETCHER__SHIFT;
index bdca9dc5f1181bdeebd8467b980e17f5d18ec583..dfaf771a42e66e47800f0cbb55ea4dca460a09a8 100644 (file)
@@ -39,7 +39,7 @@ static int pm_map_process_v9(struct packet_manager *pm,
        packet->header.u32All = pm_build_pm4_header(IT_MAP_PROCESS,
                                        sizeof(struct pm4_mes_map_process));
        packet->bitfields2.diq_enable = (qpd->is_debug) ? 1 : 0;
-       packet->bitfields2.process_quantum = 1;
+       packet->bitfields2.process_quantum = 10;
        packet->bitfields2.pasid = qpd->pqm->process->pasid;
        packet->bitfields14.gds_size = qpd->gds_size & 0x3F;
        packet->bitfields14.gds_size_hi = (qpd->gds_size >> 6) & 0xF;
index bed4d0ccb6b164c9f1e139e6a5308da0739191ef..a852e0d7d804fdba2053808ff6520d860deb4d6f 100644 (file)
@@ -50,7 +50,7 @@ static int pm_map_process_vi(struct packet_manager *pm, uint32_t *buffer,
        packet->header.u32All = pm_build_pm4_header(IT_MAP_PROCESS,
                                        sizeof(struct pm4_mes_map_process));
        packet->bitfields2.diq_enable = (qpd->is_debug) ? 1 : 0;
-       packet->bitfields2.process_quantum = 1;
+       packet->bitfields2.process_quantum = 10;
        packet->bitfields2.pasid = qpd->pqm->process->pasid;
        packet->bitfields3.page_table_base = qpd->page_table_base;
        packet->bitfields10.gds_size = qpd->gds_size;