Windows 图形显示驱动开发-WDDM 3.2-本机 GPU 围栏对象(七)

围栏排队操作的 CPU 时间戳

鉴于以下情况,让 UMD 记录这些 CPU 时间戳没有什么好处:

  • 可以在 GPU 执行包括命令列表的命令缓冲区之前几分钟记录命令列表。
  • 这几分钟可能与同一命令缓冲区中的其他同步对象不同步。

将 CPU 时间戳包含在 UMD 向 GPU 写入的日志缓冲区的指令中是有代价的,因此 CPU 时间戳不包含在日志条目有效负载中。

相反,运行时或 UMD 可以在记录命令列表时发出带有 CPU 时间戳的本机围栏排队 ETW 事件。 因此,工具可以通过组合来自该新事件的 CPU 时间戳和来自日志缓冲区条目的 GPU 时间戳来构建围栏排队和已完成事件的时间线。

发出信号或取消阻止围栏时 GPU 上的操作顺序

UMD 必须确保在构建命令列表指示 GPU 发出信号/取消阻止围栏时保持以下顺序:

  • 将新围栏值写入围栏 GPU VA/CMP VA。
  • 将日志有效负载写入相应的日志缓冲区 GPU VA/CMP VA。
  • 如有必要,引发本机围栏信号中断。

此操作顺序确保当中断引发到 OS 时,Dxgkrnl 看到最近的日志条目。

允许日志缓冲区溢出

GPU 可以通过覆盖 OS 尚未看到的条目来溢出日志缓冲区。 它通过递增 WraparoundCount 来执行此操作。

当 OS 最终读取日志时,它可以通过将日志标头中的新 WraparoundCount 值与其缓存的值进行比较来检测是否发生了溢出。 如果发生溢出,OS 有以下回退选项:

  1. 为了在发生溢出时取消阻止围栏,OS 会扫描所有围栏,并确定哪些等待程序被取消阻止。
  2. 如果启用了跟踪,OS 可以在跟踪中发出标志,以通知用户事件丢失。 此外,启用跟踪后,OS 首先会增加日志缓冲区的大小,以防止首次溢出。

UMD 没有必要在处理日志缓冲区条目时实现回压支持。

日志缓冲区时间戳为空或重复

在一般情况下,Dxgkrnl 期望日志条目中的时间戳单调递增。 但是,在某些情况下,后续日志条目的时间戳为零或与以前的日志条目相同。

例如,在具有链接显示适配器的方案中,LDA 中的链接适配器之一可以跳过围栏写入操作。 在这种情况下,其日志缓冲区条目的时间戳为零。 Dxgkrnl 处理此类情况。 也就是说, Dxgkrnl 从不期望给定日志条目的时间戳小于上一个日志条目的时间戳;即,时间戳永远不会倒退。

相关推荐
HockerF34 分钟前
windows 设置 vscode 免密远程
ide·windows·vscode
冰镇西瓜4 小时前
windows本地使用conda部署Open-webui
windows·ai·conda
程序视点6 小时前
Wise Duplicate Finder 重复文件查找工具 - 永久免费专业版文件去重工具
前端·windows
女程序猿!!!8 小时前
如何不让android studio自动换行
windows
程序视点9 小时前
免费数据恢复软件推荐:Wise Data Recovery 6.2.0 激活版使用指南
前端·windows
CP-DD10 小时前
OpenWrt Network configuration
服务器·网络·windows
啃火龙果的兔子11 小时前
(RedmiBook)上禁用触摸板或自带键盘
windows
夏冰加密软件14 小时前
《超级秘密文件夹》密码遗忘?试用版/正式版找回教程(附界面操作步骤)
windows·电脑
CV工程师丁Sir16 小时前
Vibe Coding vs 规范驱动开发:AI 时代编程范式的冲突与融合
人工智能·驱动开发
李小咖18 小时前
第2章 cmd命令基础:常用基础命令(2)
windows·网络安全·cmd命令·李小咖·windows基础