Linux内存从0到1学习笔记(8.9 可恢复硬件页面错误的含义)

Posted 高桐@BILL

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux内存从0到1学习笔记(8.9 可恢复硬件页面错误的含义)相关的知识,希望对你有一定的参考价值。

    现代硬件支持可恢复的页错误,这对DMA围栏有很多影响。

    首先,挂起的页面错误显然会阻碍加速器上运行的任务,通常需要内存分配来解决错误。但是,不允许内存分配来控制 DMA 围栏的完成,这意味着使用可恢复页面错误的任何工作负载都不能使用 DMA 围栏进行同步,而必须改用由用户空间控制的同步围栏。

    这在 GPU 上会带来一个问题,因为 Linux 上的当前桌面合成器协议依赖于 DMA 围栏,这意味着如果没有在用户空间围栏之上构建的全新用户空间堆栈,它们将无法从可恢复的页面错误中受益。具体而言,这意味着无法进行隐式同步。例外情况是页面错误仅用作迁移提示,并且从不按需填充内存请求。目前,这意味着 GPU 上的可恢复页面错误仅限于纯计算工作负载。

    此外,GPU 通常在 3D 渲染和计算端之间共享资源,例如计算单元或命令提交引擎。如果具有 DMA 围栏的 3D 作业和使用可恢复页面错误的计算工作负载都处于挂起状态,则它们可能会死锁:

  • 3D 工作负载可能需要等待计算作业完成并首先释放硬件资源。
  • 计算工作负荷可能停滞在页面错误中,因为内存分配正在等待 3D 工作负荷的 DMA 围栏完成。

有几个选项可以防止此问题,其中一个驱动程序需要确保:

  • 计算工作负载始终可以被抢占,即使页面错误处于挂起状态且尚未修复也是如此。并非所有硬件都支持此功能。
  • DMA 围栏工作负载和需要页面错误处理的工作负载具有独立的硬件资源来保证前进进度。这可以通过例如通过专用引擎和 DMA 围栏工作负载的最小计算单元预留来实现。
  • 通过仅在 DMA 围栏工作负载进行中时为其预留硬件资源,可以进一步优化预留方法。这必须涵盖从 DMA 围栏对其他线程可见到围栏通过 dma_fence_signal()

以上是关于Linux内存从0到1学习笔记(8.9 可恢复硬件页面错误的含义)的主要内容,如果未能解决你的问题,请参考以下文章

Linux内存从0到1学习笔记(8.9 可恢复硬件页面错误的含义)

Linux内存从0到1学习笔记(一,内存简介)

Linux内存从0到1学习笔记(6.9,物理内存初始化之Slab分配器)

Linux内存从0到1学习笔记(六,物理内存初始化之二 --- 内存模型)

Linux内存从0到1学习笔记(8.6 DMA-BUF简介)

Linux内存从0到1学习笔记(8.6 DMA-BUF简介)