MicroEngine 调度器 (MES)¶
注意
队列和环形缓冲区被用作同义词。
注意
本节假设您熟悉管道、队列和 GC 的概念。 如果不熟悉,请查看 GFX、计算和 SDMA 总体行为 和 drm/amdgpu - 图形和计算 (GC)。
每个 GFX 都有一个带有一个或多个硬件队列的管道组件。 管道可以在队列之间切换,具体取决于某些条件,并且可以请求队列切换到管道的组件之一是 MicroEngine 调度器 (MES)。 每当驱动程序初始化时,它会为每个硬件队列创建一个 MQD,然后将 MQD 交给 MES 固件进行映射到
内核队列(传统):此队列静态映射到 HQD,并且永远不会被抢占。 即使这是一个传统功能,但它是当前的默认设置,并且大多数现有硬件都支持它。 当应用程序将工作提交到内核驱动程序时,它会将所有应用程序命令缓冲区提交到内核队列。 CS IOCTL 从应用程序获取命令缓冲区,并在内核队列上调度它们。
用户队列:这些队列动态映射到 HQD。 关于用户队列的利用,用户空间应用程序将创建其用户队列,并将工作直接提交到其用户队列,而无需为每次提交使用 IOCTL,也无需共享单个内核队列。
就用户队列而言,MES 可以将它们动态映射到 HQD。 如果 MQD 多于 HQD,则 MES 固件将抢占其他用户队列,以确保每个队列获得时间片;换句话说,MES 是一个微控制器,用于处理 MQD 到 HQD 的映射和取消映射,以及 MQD 的优先级和超额订阅。