
英灵神殿社区补丁GC
针对瓦尔海姆及其服务器的特定调整变更,以降低崩溃和帧率突增的可能性。
查看大图[size=6][b]Valheim Community Patch GC[/b][/size]
[size=4]针对 Valheim 专用服务器的垃圾回收器调优。[/size]
一个配套 [url=https://www.nexusmods.com/valheim/mods/3617]Valheim Community Patch[/url] 的模组。它曾在 0.31.0 中随 Community Patch 一同发布,并在 0.32.0 中移出。要访问回收器的设置,需要读写 Mono 运行时自身的内存,这会被恶意软件扫描器标记,而这项风险不应由每个玩家都会安装的模组来承担。本插件仅需要 BepInEx。
[size=5][b]功能说明[/b][/size]
仅适用于专用服务器;客户端和本地主机(listen host)会忽略它。Valheim 运行的是 Unity 的增量垃圾回收器,在繁忙的服务器上,每次回收都会以一次没有时间限制的 stop-the-world 阶段结束。在大型世界中,该阶段的实测耗时约为每 GB 堆内存 55 ms:6 GB 时为 330 ms,8.4 GB 时为 460 ms。更大的堆也意味着更少的回收次数,因此无论堆大小如何,总的暂停时间大致相同。同样是在这一回收阶段,大型服务器可能会以 [font=Courier New]Unexpected mark stack overflow[/font] 中止。
这些设置位于 [font=Courier New]BepInEx/config/MidnightsFX.ValheimCommunityPatchGC.cfg[/font] 的 [font=Courier New]Server - Garbage Collector[/font] 部分。默认只启用标记栈设置;将其中任意一项设为 0 即恢复游戏自身的值。
[list] [][b]GC Mark Stack Target Entries[/b] [i](Linux)[/i],默认 4194304(64 MiB)—— 提前扩充回收器的标记栈。回收器通常只在一次险些溢出的回收阶段之后才会扩充它,而一旦回收阶段真的溢出,服务器就会中止。[/] [][b]GC Free Space Divisor[/b] [i](Linux)[/i],默认 0(回收器自身为 3)—— 两次回收之间堆增长的幅度。它在暂停时长与频率之间做权衡:较低的值带来更少、更长的暂停,并使用更多内存;较高的值带来更短、更频繁的暂停。[/] [][b]GC Time Slice Milliseconds[/b],默认 0(游戏为 3 ms)—— 增量回收器的每帧预算。在繁忙的服务器上它并未改变暂停情况;更长的时间片只会延长每次回收开始时的那段短暂暂停。[/] [/list] 除数和标记栈通过仅由 Linux 服务器运行时导出的符号来访问回收器;在 Windows 服务器上它们不起作用。
[size=5][b]控制台命令[/b][/size]
[font=Courier New]vcp_gc[/font] 会打印回收器的当前状态:是否为增量模式,Unity、Mono 和回收器各自看到的时间片,除数,堆,上次重新扫描的脏页以及标记栈。它还会实时修改各项设置,因此可以在性能分析器上观察效果:
[list] [][font=Courier New]vcp_gc slice <ms>[/font]、[font=Courier New]vcp_gc divisor <n>[/font]、[font=Courier New]vcp_gc markstack <entries>[/font] —— 设置并保存一个值;0 恢复游戏自身的值。[/] [][font=Courier New]vcp_gc stats on|off[/font] [i](Linux)[/i] —— 回收器自身的日志:每次回收输出几行,包含其 stop-the-world 耗时以及重新扫描了多少内容。它写入服务器的标准错误(或 [font=Courier New]GC_LOG_FILE[/font],若服务器启动时设置了该变量),而不是 BepInEx 日志。不会被保存。[/] [/list] 管理员可以从自己的控制台远程运行它;这需要在其客户端上也安装本插件,而在客户端上它不做其他任何事情。回复内容会写入服务器日志。
[size=5][b]安装[/b][/size]
使用模组管理器将其安装到专用服务器上,或将 [font=Courier New]ValheimCommunityPatchGC.dll[/font] 放入 [font=Courier New]BepInEx/plugins[/font]。
[b]前置要求[/b] [list] [][url=https://www.nexusmods.com/valheim/mods/4]BepInEx for Valheim[/url][/] [][url=https://www.nexusmods.com/valheim/mods/3617]Valheim Community Patch[/url] 0.32.0 或更高版本。Community Patch 0.31.x 自带一份这些设置;与其同时使用时,本插件会记录一条警告并什么都不做。[/] [/list] 在 Community Patch 0.31.0 配置中更改的设置不会被迁移过来;请在本插件的配置中重新设置。Community Patch 中旧的 [font=Courier New]Server - Garbage Collector[/font] 部分可以删除。
[size=5][b]报告问题[/b][/size]
问题请提交至 [url=https://github.com/MidnightsFX/Valheim-Community-Patch-GC]GitHub[/url]。请附上你的 [font=Courier New]LogOutput.log[/font]、[font=Courier New]vcp_gc[/font] 的输出,以及服务器运行在 Linux 还是 Windows 上。
[size=5][b]致谢与来源[/b][/size]
[list] [][b][url=https://github.com/ivmai/bdwgc]bdwgc[/url][/b] 以及 Unity 对其和 Mono 的分支 —— 回收器的源码是这些设置的参考;未使用任何代码。[/] [][b]Iron Gate Studio[/b] —— Valheim 本身;未再分发任何游戏代码。[/] [/list]
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。