打游戏,我需要降低延迟,特别是音游/FPS,涉及到准星是否跟手、感官反馈、更低的帧间时间
中断(Interrupt)延迟
CPU 很快,在处理 IO ( I/O, Input/Output ) 的过程中通常使用中断(Interrupt)技术来避免 CPU 处理时间的浪费。
写过程序的应该知道异步(Async),它的底层原理上就是通过中断来实现的。
IRQ 通常来自于外界 IO 事件,例如鼠标产生了新的动作,网卡收到了新的数据帧,声卡/显卡表示已经处理完成并希望收到新的任务。
内存延迟
内存延迟影响的是游戏帧率、运行能效。有人说帧率提升不了多少,但是能效很重要,因为 CPU 在大量等待内存操作,而无法进行下一步计算,这对串行计算来说问题更严重。
只要不是太烂的内存,都可以简单超频和降低一下延迟,有 XMP 可以无脑直接开 XMP。
不要使用洋垃圾和 ECC/RECC 内存。ECC 内存带校验机制 适用于长时间开机和注重稳定的场景,ECC会带来性能损耗。而 RECC 增加了用于寻址的寄存器,更慢了。
通常来说 Intel 比 AMD 的内存控制器(IMC)延迟更低(大概 Intel 11th 或更早,不考虑大小核、IO Die、异构、HEDT 等)
上下文切换延迟
上下文切换延迟,CPU 核心是多个线程共享的。当 CPU 运行的线程切换的时候,CPU 需要保存当前线程的栈(Stack)信息,然后恢复另外一个线程的栈信息,该过程是有代价和延迟的。所以尽可能减少其他正在运行的程序。
一般来说 L1、L2 缓存为核心独享,L3 缓存为共享。当核心间上下文切换时,L1、L2 缓存会失效。
大小核技术
大小核技术(Intel),小核延迟高,不要让延迟敏感的进程运行在小核上。
IO Die
// TODO
NUMA
// TODO
节能状态延迟
// TODO C-State、ASPM
帧渲染延迟
输入设备延迟
// TODO 鼠标键盘回报率、外设硬件内部延迟
音频延迟
有条件的话使用 ASIO/WASAPI 进行设备独占输出。
使用低采样率和位深度,例如 44100hz 和 16bit ,这样可以减小音频缓冲区大小,来降低延迟。
我认为输出音频样本格式尽可能和音源一致,避免重采样过程带来的延迟。一般游戏为 44100 或 48000 的音频资源。所以我不会选择比 44100hz 更低的采样率,这样可能会带来重采样延迟。
诊断与调试工具
// TODO 绑核工具
AIDA64 诊断内存延迟
// TODO link
Microsoft Interrupt Affinity Tool 修改 IRQ 亲和性
https://www.techpowerup.com/download/microsoft-interrupt-affinity-tool
LatencyMon 检查 DPC 延迟
https://www.resplendence.com/latencymon
安全软件
不要安装任何杀毒软件。强调,不要安装,禁用是无效的。
可以适当使用 RootKit(火绒剑?)工具来检查内核。
包括内核驱动、钩子、LSP
显卡驱动设置
// TODO
尝试使用魔改驱动
// TODO
游戏内设置
// TODO
注册表
- HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\mouclass\MouseDataQueueSize
- 默认值 100 十进制
- HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\kbdclass\KeyboardDataQueueSize
- 默认值 100 十进制
其他
- 训练更好的脑子和神经反射
- 保持良好的电脑使用习惯
- 感谢好友 DarkSakura0127
- // TODO review 补充如何降低延迟
- // TODO 禁用幽灵和熔断补丁
- // TODO 关闭 Exploit Protection