Linux内存从0到1学习笔记(8.8 无限DMA Fence)

Posted 高桐@BILL

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux内存从0到1学习笔记(8.8 无限DMA Fence)相关的知识,希望对你有一定的参考价值。

在不同时间,结构体dma_fence具有无限期的时间,直到dma_fence_wait()执行完成。例如:

  • Future Fence(未来围栏),在HWC1中使用的,用于在显示器不再使用缓冲区时发出信号,并在屏幕更新时创建,以使得缓冲区可见。此围栏完成的时间完全在用户空间的控制之下。
  • Proxy Fence(代理围栏),建议处理尚未设置围栏的drm_syncobj。用于异步延迟命令提交。
  • Userspace Fence(用户空间围栏)或GPU Futexe(GPU互斥),命令缓冲区内的细密纹理的锁定,用于用户空间跨引擎或CPU同步,然后将其作为DMA围栏导入以集成到现有的winsys协议中。
  • 长时间运行计算命令缓冲,同时仍在使用传统的用于内存管理的批处理 DMA 围栏,而不是上下文抢占 DMA重新计划计算作业时重新附加的围栏。

上面所有的这些方案都有一个共同点,就是用户空间控制这些方案的依赖关系以及控制它们工作的时机。将无限期围栏与普通内核内 DMA 围栏混合使用将不起作用,即使是为了防止恶意用户空间而包含回退超时:

  • 只有内核知道所有 DMA 围栏依赖关系,用户空间不知道由于内存管理或调度程序决策而注入的依赖关系。
  • 只有用户空间知道无限期围栏中的所有依赖项以及它们何时完成,内核没有可见性。

此外,内核必须能够阻止用户空间命令提交以满足内存管理需求,这意味着我们必须支持依赖于 DMA 围栏的无限期围栏。如果内核也像 DMA 围栏一样支持内核中的无限期围栏,就像上述任何建议一样,则可能会出现死锁。       

这意味着内核可能会意外地通过用户空间不知道的内存管理依赖项创

以上是关于Linux内存从0到1学习笔记(8.8 无限DMA Fence)的主要内容,如果未能解决你的问题,请参考以下文章

Linux内存从0到1学习笔记(8.13 dma内存调试一)

Linux内存从0到1学习笔记(8.13 dma内存调试一)

Linux内存从0到1学习笔记(8.13 dma内存调试一)

Linux内存从0到1学习笔记(8.7 DMA-BUF代码解读)

Linux内存从0到1学习笔记(8.7 DMA-BUF代码解读)

Linux内存从0到1学习笔记(8.14 dma-buf内存调试二 bufinfo介绍)-- 更新中