📖 本文由 Batocera 官方 Wiki 翻译整理,内容可能随版本更新而变化。
延迟降低与性能优化(Latency Reduction and Optimizing Performance)
在 Batocera 中,我们可以通过多种设置来减少操作延迟并提升模拟器的运行性能。首先,让我们来看看 RetroArch 核心(RetroArch cores) 中常见的延迟优化选项。
【提示】:这些功能需要模拟器核心明确支持才能生效。你可以通过进入该系统的高级系统选项(ADVANCED SYSTEM OPTIONS),观察这些选项是否出现来判断是否支持。
预运行技术(Run-ahead)
这项技术是从“游戏视角”出发来解决延迟问题的。
生活化类比:这就像是你拥有一种“预测未来”的超能力。每当你按下按键时,系统其实已经在后台飞快地“读档”回到了几个画面之前,并帮你计算好了如果你在那时就按下按键,现在画面应该是什么样。它把未来的结果瞬间拉到了你按下按键的这一刻。
它的工作原理:
当你按下一个按钮时,RetroArch 会向过去回溯几帧(具体的帧数取决于你在预运行帧数(RUN AHEAD FRAMES)中的设置),并计算出如果你在那个时间点按下按钮,到当前时刻会发生什么。然后,它会将计算好的画面直接呈现在你按下按钮的一瞬间。大多数现代设备性能强劲,可以在瞬间完成这个“微型回退再快进”的过程。
适用场景:
此功能旨在减少那些“天生反应慢”的游戏的输入延迟。例如,有些游戏本身就会多花一两帧的时间才响应你的操作(比如著名的《超级马里奥世界》,它始终存在 2 帧的固有延迟)。
【注意】:
1. 不要在反应灵敏的游戏中使用:如果游戏本身已经能够即时响应操作,开启此功能会导致游戏画面出现抖动或掉帧。
2. 无法解决显示器延迟:此功能无法抵消由你的显示屏或电视硬件造成的延迟。请不要把它当成“劣质显示器补偿工具”来使用,具体原因请看下文。
在配置“预运行”(Run-ahead)功能时,并非帧数设置得越高越好。
【注意】:请谨慎选择跳过的帧数。如果设置的帧数超过了游戏本身的固有延迟,会导致操作指令丢失,游戏画面也会变得磕磕绊绊,就像你在玩网络游戏时遇到了极高的网络延迟(Ping)一样。
此外,这项功能对硬件性能的要求极高,设置的帧数越多,对 CPU 的负担就越重。如果你发现游戏运行变慢,请第一时间尝试关闭这个选项。
开启第二实例(Use second instance)
默认情况下,RetroArch 会在当前运行的游戏画面基础上进行后台计算。但这可能会带来一个副作用:由于游戏在后台快速“回放+快进”,会导致音效听起来断断续续。
第一步:开启选项
在设置中找到并启用 开启第二实例(USE SECOND INSTANCE)。
第二步:享受平滑音效
开启后,RetroArch 会在后台悄悄运行第二个游戏副本,专门负责计算,并在计算完成后无缝切换。这样可以显著减少音效爆音(Audio Crackle)的情况。
生活化类比:这就像是你一个人一边炒菜一边还要洗菜,难免手忙脚乱弄出声响。开启“第二实例”就像请了个助手在隔壁房间帮你洗菜,洗好了直接递给你,这样你就能专心掌勺,整个过程丝滑流畅。
【提示】:这显然会让 CPU 的工作量翻倍,但对于大多数现代机器来说,这点性能消耗完全不在话下。
自动帧延迟(Auto-frame delay)
你可能不知道,在你玩游戏时,显示器渲染画面与机器处理按键输入其实是“两拨人”在各干各的。
生活化类比:这就像是接力比赛。显示器是“接棒人”,机器是“送棒人”。
* 如果机器刚把画面处理好(送到位),显示器却刚好错过了(刚开始显示上一帧),你就得盯着旧画面等完这一整个刷新周期。
* 反之,如果机器处理画面的时机恰好就在显示器刷新前的“那一丁点儿”时间,你的操作反馈就会几乎瞬间出现在屏幕上。
自动帧延迟(Auto-frame delay) 系统的作用,就是通过自动调整,尽可能缩短这个等待时间。
虽然对于标准的 60 Hz 显示器来说,一帧的时间只有区区 16 毫秒(这在大多数游戏场景中几乎无法察觉),但对于追求极致体验的玩家来说,每一毫秒都很关键。
你可以通过手动调整帧渲染的时机,让它与显示器的刷新步调更加一致,从而减少延迟。
生活化类比:这就像是赶公交车。如果你提前太早到站,就得在大热天白等半天(延迟);如果你踩着点去,虽然不用等,但万一路上稍微耽搁一秒(机器处理音频或逻辑变慢),你就赶不上这班车了,结果就是画面卡顿或声音刺耳。
【注意】:渲染画面离显示时间越近,留给机器处理音频和游戏逻辑的时间就越少。每款游戏对这个设置的反应都不同,过度追求低延迟可能会导致性能下降或音效断裂。
自动帧延迟(Auto-Frame Delay)
如果你觉得为每个游戏单独调试太麻烦,那么 自动帧延迟(AUTO-FRAME DELAY) 就是你的救星。
第一步:开启自动模式
在设置中找到并开启该选项。系统会自动分析当前的硬件余力(Overhead)。
第二步:动态调整
在游戏过程中,系统会实时尝试将延迟压到硬件能承受的最低限度。如果发现画面或声音开始“抗议”(出现卡顿),它会自动调高延迟以保证流畅。
第三步:设定基准线
【提示】:你手动设置的“帧延迟数值”依然有效,它将作为系统自动调整的“起点”。系统会从这个基准值开始,上下探索最合适的平衡点。
关于可变刷新率(G-Sync/FreeSync/VRR)
如果你使用的是支持 可变刷新率(Variable Refresh Rate) 的显示器,情况会变得有些不同。
虽然背后的技术细节非常复杂,但简单来说:在这种模式下,系统不再是强行去对齐显示器的固定刷新步调,而是转为同步机器处理每一帧画面所产生的实际延迟。
G-Sync / FreeSync / 可变刷新率(VRR)
解决画面延迟:打破显示器的“条条框框”
与传统的 显像管电视(CRT) 相比,现代数字显示器(如液晶显示器)有一个天生的劣势:它们内部其实运行着一台“小电脑”来管理屏幕显示。
生活化类比:这就像是两个步调不一致的齿轮。模拟器(发送画面的机器)是一个齿轮,显示器(画画的机器)是另一个齿轮。哪怕模拟器已经把画面“画好了”,它也必须原地待命,等着显示器转到正确的位置(即准备好画新的一帧)才能把图片投射出来。这就产生了延迟,尤其是在 Batocera 默认开启 垂直同步(V-sync) 的情况下。
此外,数字显示器通常只支持固定的刷新频率(如 50Hz、60Hz、120Hz 等),而老式游戏系统(尤其是掌机和街机)的刷新率五花八门。这种“频率不匹配”会带来更多的延迟和画面抖动。
核心技术:时钟偏移(Timing Skew)
为了让画面更平滑,RetroArch 使用了一项叫做 时钟偏移(Timing Skew) 的技术。
- 它的原理:如果游戏的刷新率和显示器“很接近”,系统会强制让游戏运行得稍微快一点或慢一点(通常只有几个百分点的差距),从而完美匹配显示器的刷新率。
- 优缺点:这种处理非常轻微,普通人几乎察觉不到速度变化。但如果不这样做,无法开启“可变刷新率”的用户就会遇到音效爆音等问题。
- 典型例子:街机版《机械战警》(Robocop)的运行频率是极其冷门的 57Hz,几乎没有任何现代数字显示器原生支持它。
【提示】:虽然强制对齐会让游戏速度与原生硬件稍有偏差,但这是为了换取流畅画面和清晰音效而做的“微小牺牲”。
不过,多亏了现代科技的奇迹,在某些特定的显示器上,这个困扰已久的难题终于被彻底攻克了!
无论是 G-sync、Freesync 还是 可变刷新率(Variable Refresh Rate,简称 VRR),它们指的其实都是同一个核心概念:不再让显示器死板地每秒刷新 60 次并让画面傻傻等待,而是把主动权交给软件,让显示器跟着游戏的节奏走。
这种技术彻底解决了前文提到的数字显示器匹配难题,但唯一的要求是:你的显示器或电视必须硬件支持这项技术。
生活化类比:这就像是把“定时发车”的公交车变成了“随叫随到”的出租车。模拟器什么时候画完一帧,显示器就立刻刷新这一帧,再也不用在车站(缓冲区)浪费时间等发车了。
【注意】:
* 常开无妨:通常情况下,一直开启 VRR 并没有什么坏处。
* 画面撕裂风险:如果你的显示器最高刷新率刚好等于(或极少数情况下高于)游戏帧率,VRR 会自动失效。在这种情况下,如果游戏帧率波动剧烈(比如电脑大作或某些吃性能的模拟器),在模式切换瞬间可能会出现极其轻微的画面撕裂。
* 模拟器表现:在使用 RetroArch 时,除非你的机器配置低到带不动模拟器,否则几乎不会遇到上述撕裂问题。
视频多线程(Threaded Video)
这是一项用“稳定性”换取“速度”的技术。
第一步:了解权衡关系
开启视频多线程后,系统会将视频渲染的任务交给独立的 CPU 核心去处理。这能显著提升运行速度,让原本卡顿的游戏变流畅。
第二步:注意副作用
【提示】:由于任务被拆分到了不同的核心,可能会导致画面出现微小的“抖动”或者输入延迟略微增加。你可以把它看作是开启了“加速模式”,虽然跑得快了,但脚下可能没那么稳。
生活化类比:这就像是把一个人的活分给两个人干。虽然干活的总速度变快了(性能提升),但由于两人需要沟通协调,偶尔可能会出现配合不默契的情况(画面细微不连贯)。
实际应用场景:
当你使用性能较弱的硬件(如开发板或老旧 PC),且发现模拟器运行速度达不到 100% 时,开启此选项是性价比最高的提速手段。
ES 界面全局选项(ES options)
在 EmulationStation(ES) 的设置菜单中,还有一些全局选项。
这些设置适用于绝大多数模拟器,其主要目的是为了在配置较低的硬件上挤出更多的性能。如果你在游玩时感到力不从心,可以尝试在这些选项中进行微调,通过牺牲一些视觉特效来换取游戏过程的丝滑顺畅。
性能压榨指南:让低配设备也能飞起来
如果你正在使用性能较弱的硬件,可以通过以下设置进一步榨取系统潜力。
ES 界面与通用性能优化
- 关闭 ES 线程加载(Threaded Loading):对于单核或性能极弱的双核系统,关闭此项可以让系统资源全力供给游戏运行。
- 【提示】:开启此项后,后台抓取游戏信息(Scraping)的速度会大幅下降。
- 图形接口(Graphics API)选择:根据硬件特性选择最合适的图形接口(如 Vulkan 或 OpenGL),直接影响渲染效率。
- 【提示】:AMDGPU 或 Radeon 显卡用户可以尝试驱动切换技巧来优化兼容性。
- 调整模拟器高级设置:许多模拟器(如 Dolphin 或 PSX 系列)提供“牺牲精度换取速度”的选项。
- 生活化类比:这就像是为了让老车跑得快一点,我们拆掉了多余的内饰和隔音棉。虽然细节没那么完美了,但车速确实提上来了。
- 警惕性能“小偷”:
- 使用 MangoHUD 或 帧数计数器(FPS counter) 会占用额外资源。
- 开启边框装饰(Decoration set)会降低性能。
- 使用复杂的着色器(Shader sets)会显著拖慢速度。
- 降低分辨率:这是提升帧数最直接的方法。
- 【注意】:如果分辨率低于显示器原生分辨率,电视可能会进行额外的“后期处理”,从而引入新的操作延迟。你需要根据性能瓶颈进行权衡。
进阶调优(仅限资深玩家)
前方高能,非请勿入。 接下来的内容属于高级进阶范畴,极度依赖具体的硬件环境,且官方不提供相关技术支持。
【注意】:这些修改涉及系统的核心组件。操作不当可能导致系统不稳定,在极端情况下甚至会对硬件造成不可逆的损坏。在动手之前,请务必做好数据备份,并进行充分的研究。
CPU 调频策略(CPU Governor)
简单来说,CPU 调频策略决定了处理器在不同负载下如何调整运行频率。
生活化类比:这就像给你的汽车发动机设置不同的模式。
* “节能模式”会让发动机保持低转速,省油但没劲。
* “性能模式”则会让发动机时刻准备全速冲刺,虽然费油、发热大,但响应最快。
如果你想深入研究底层原理,可以参考以下权威资料:
* Arch Wiki:关于该主题的简明摘要。
* LWN 新闻文章:关于该功能引入与发展的深度社论。
* Kernel 官方文档:针对系统管理员的最客观、详尽的技术手册。
从 Batocera v33 版本开始,你可以在 batocera.conf 配置文件中通过修改 system.cpu.governor 这一项,手动控制 CPU 的“工作调性”了。默认情况下,系统会读取第一个 CPU 核心的状态并将其应用到所有核心上。
生活化类比:这就好比给你的 CPU 找个“管家”。有的管家很激进,只要你一干活就让 CPU 全速运转;有的管家很抠门,为了省电总想让 CPU 偷懒。
这是一个非常复杂的话题,想要彻底搞懂需要大量的阅读积累。为了方便理解,我们将其各种模式(Profile)整理成了下表:
CPU 调度模式一览表
| 模式名称 | 功能描述 |
|---|---|
| 高性能(performance) | 让所有 CPU 核心始终以最高频率运行。在 Batocera 中通常不需要开启,因为系统已经优化了其他模式的短板。在台式机上用没问题,但非常费电。 |
| 智能调度(schedutil) | 较现代且统一的方案。它会读取 CPU 的特定数值来“预测”下一步任务,并据此调整频率。它的原理类似 ondemand,但反应更优雅、迅速,也更符合未来的技术趋势。 |
| 按需分配(ondemand) | 盯着 CPU 的使用率看:一旦发现任务繁重,它会毫不犹豫地瞬间拉满频率;任务减轻后,再慢慢把频率降下来。 |
| 保守模式(conservative) | 同样看使用率,但性格很“稳”。即便任务很重,它也只会慢慢地一点点提高频率。非常适合那些电池供电、且受不了频率剧烈波动的移动设备。 |
| 省电模式(powersave) | 强制让 CPU 运行在系统允许的最低频率。这能显著降低功耗和发热,但代价是性能大幅缩水。有时因为 CPU 处理变慢导致执行时间变长,反而并不省电。 |
| 用户自定义(userspace) | 允许用户手动给每个核心设置频率。在 Batocera 中不推荐使用,因为除非你写了高级启动脚本,否则系统无法永久保存这些手动设置。 |
操作步骤:
第一步:确定你的需求
如果你是追求极致帧数的台式机玩家,可以考虑 performance;如果你用的是掌机,想兼顾续航和性能,schedutil 或 ondemand 通常是更好的平衡点。
第二步:修改配置
【提示】:打开 batocera.conf,找到 system.cpu.governor= 这一行,在等号后面填入你选定的模式名称(如 schedutil),保存并重启即可生效。
关于系统的性能调优,还有一些更深层的“大招”。
寻找适合你的 CPU 调度方案
并不是所有的模式在每台机器上都能用。如果你想看看自己的设备到底支持哪些模式,可以按照以下步骤操作:
第一步:获取可用列表
打开控制台,输入以下命令:
/etc/init.d/S18governor list
第二步:修改配置文件
确认支持后,你就可以在 batocera.conf 中指定模式了。例如,想让 CPU 始终火力全开:
system.CPU.governor=performance
提升响应速度:USB 轮询率(USB Polling Rate)
除了驱动内部的设置,你还可以手动调整 USB 的轮询率。轮询率越高,系统检查手柄/键盘动作的频率就越高,操作也就越“跟手”。
生活化类比:这就像是老师(系统)询问学生(手柄)有没有问题。默认情况下,老师可能每隔一会才问一次;把轮询率设为 1000Hz,就相当于老师每秒钟问 1000 次,确保你任何细微的动作都能被瞬间捕捉到。
配置方法:
你需要将参数添加到系统的启动行(Boot line)中。
* 默认设置:usbhid.jspoll=0 和 xpad.cpoll=0。这代表让内核自己决定。
* 极速设置:将两者都设为 1。这会将通用 USB 设备(键盘鼠标)和 xpad 驱动下的手柄轮询率提升至 1000Hz。
示例代码:
APPEND label=Batocera console=tty3 quiet loglevel=0 vt.global_cursor_default=0 mitigations=off usbhid.jspoll=1 xpad.cpoll=1
解决断连烦恼:USB 自动挂起(USB Auto-suspend)
有些 USB 设备在空闲时会自动进入“休眠”状态以节省电能,等你再次操作时才重新激活。
生活化类比:这就像为了省电而自动熄灭的感应灯。理论上你走过去灯就该亮,但在现实中,很多电子设备“睡着了”之后就很难被叫醒,或者叫醒后会出现短暂的失灵。
【注意】:虽然这项功能本意是好的,但它经常导致设备连接不稳定或响应迟钝。
如果你想彻底关闭这个“省电模式”,让所有 USB 设备时刻保持清醒,可以在启动行中添加 usbcore.autosuspend=-1。
操作步骤:
在你的启动配置文件中加入以下参数:
usbcore.autosuspend=-1
【提示】:在尝试此类底层修改前,建议先阅读内核官方的电源管理文档,特别是其中的警告部分,因为这类操作有时会影响笔记本电脑的续航。
禁用 USB 自动挂起配置示例
如果你决定让 USB 设备始终保持“全神贯注”,不再因为节能而进入睡眠状态,可以通过修改启动配置文件来实现。
第一步:定位启动行
找到你的启动配置文件,并在 APPEND 指令后添加参数。
第二步:添加禁用参数
【注意】:在配置行末尾添加 usbcore.autosuspend=-1。这里的 -1 代表彻底关闭自动挂起功能。
生活化类比:这就像是给你的 USB 接口下了一道“不准午睡”的严令。虽然会多消耗一点点电量,但能保证只要你一按键,系统绝对能立刻反应,不会出现那种“按第一下没反应,按第二下才触发”的尴尬情况。
示例代码:
APPEND label=Batocera console=tty3 quiet loglevel=0 vt.global_cursor_default=0 mitigations=off usbcore.autosuspend=-1
原文: 延迟降低与性能优化 • 翻译: DIY8 Bot



暂无评论内容