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 从不期望给定日志条目的时间戳小于上一个日志条目的时间戳;即,时间戳永远不会倒退。

相关推荐
是店小二呀2 小时前
远程办公自由:rdesktop+cpolar让Windows桌面随身而行
windows
油丶酸萝卜别吃3 小时前
java8中常用的工具函数
windows
Bruce_Liuxiaowei3 小时前
Win7虚拟机加入域错误排查指南:解决无法启动服务问题
运维·网络·windows·安全·网络安全
雨中风华8 小时前
Windows 平台 HOOK DWM 桌面管理程序,实现输出变形的桌面图像到显示器
windows·计算机外设
做咩啊~9 小时前
Windows家庭版远程时提示‘这可能是因为在远程计算机上阻止 NTLM 身份验证 这也可能是由于 CredSSP 加密 Oracle 修正所导致的。’
windows
淮北49412 小时前
windows安装minicoda
windows·python·conda
casdfxx13 小时前
捡到h3开发板,做了个视频小车。
驱动开发
takashi_void14 小时前
如何在本地部署大语言模型(Windows,Mac,Linux)三系统教程
linux·人工智能·windows·macos·语言模型·nlp
非凡ghost15 小时前
Typora(跨平台MarkDown编辑器) v1.12.2 中文绿色版
前端·windows·智能手机·编辑器·软件需求
十五年专注C++开发15 小时前
CFF Explorer: 一款Windows PE 文件分析的好工具
c++·windows·microsoft