跳到主内容
@wquguru
精选88Hacker News Best(web_list)技巧与观点

Mac Mini M6单核性能碾压M4:86Box完美模拟Pentium II

Pentium II at 600Mhz with Voodoo 3 Emulated on 86Box with M6 Mac Mini

原文
发到 X
推荐理由

硬核复古计算玩家的必看指南,详细拆解了86Box在ARM架构上的单核瓶颈与调优方法,M6的极限性能数据极具参考价值。

Why 86Box Cares About One Core

为什么 86Box 在意单核性能

86Box emulates an old PC at the hardware level. CPU timing, chipset behaviour, ISA and PCI buses, graphics chipsets, sound devices, and disk controllers all matter to getting period software to behave properly. That does not guarantee identical performance to the original hardware, as the Cinebench results below illustrate. Frankly the project is fascinating and the effort has me in awe, but that accuracy is expensive, and almost all of the cost lands on a single host thread.

86Box 在硬件层面模拟旧式 PC。CPU 时序、芯片组行为、ISA 和 PCI 总线、图形芯片组、声卡设备以及磁盘控制器,对于让老软件正常运行都至关重要。但这并不能保证性能与原始硬件完全一致,如下方的 Cinebench 结果所示。坦率地说,这个项目令人着迷,其投入的努力也让我肃然起敬,但这种精度代价高昂,而几乎所有的成本都落在单个宿主线程上。

The practical consequence is quite straightforward in that core count barely matters here. What really matters is how fast one core can run, and how long it can hold that speed without throttling. Luckily for the Mac Mini here that's exactly where Apple Silicon has been strongest, and where the M6 shines.

实际影响非常直接:核心数量在这里几乎无关紧要。真正关键的是单核能跑多快,以及它能维持该速度而不降频多久。幸运的是,对于 Mac Mini 来说,这正是 Apple Silicon 最擅长的领域,也是 M6 大放异彩之处。

A little overclock... the M6 running a 650MHz Pentium II in my custom 86Box 6.0 build, with Cinebench 2000 and Winamp. One or two audio underruns kept 650MHz from passing, so 600MHz remains the stable result.

轻微超频……M6 在我的定制版 86Box 6.0 中运行 650MHz 的 Pentium II,使用 Cinebench 2000 和 Winamp。一次或两次音频欠载导致 650MHz 未能通过测试,因此 600MHz 成为稳定结果。

The Machines

测试机器

Every 86Box test uses the same machine configurations, the same disk images and emulated hardware. The comparison set is:

每次 86Box 测试均使用相同的机器配置、相同的磁盘镜像和模拟硬件。对比机型包括:

  • Mac Mini M6 (12-core CPU, 24GB, this review unit)
  • Mac Mini M4 (base 10-core CPU, 16GB)
  • Mac Mini M6(12 核 CPU,24GB,本次评测机型)
  • Mac Mini M4(基础版 10 核 CPU,16GB)

Testing was using a slightly modified build of 86Box 6.0, released on May 31, 2026. The team improved CPU emulation performance on ARM hosts and added an ARM64 just-in-time recompiler for Voodoo graphics. That second change is particularly relevant here, since the Windows 98 machine is running an emulated Voodoo 3. Some credit certainly belongs to the software, Apple Silicon has fast cores, but 86Box is also getting better at using them.

测试使用的是 86Box 6.0 的一个略微修改版本,发布于 2026 年 5 月 31 日。团队改进了 ARM 主机上的 CPU 模拟性能,并为 Voodoo 图形添加了 ARM64 即时编译器(JIT)。这一项改动在此尤为相关,因为 Windows 98 虚拟机正在运行模拟的 Voodoo 3。当然,功劳一部分归于软件本身,Apple Silicon 拥有快速的核心,但 86Box 也在更好地利用这些核心。

I have not measured the uplift from an older 86Box version, given this is a review of the M6 and not 86Box.

我没有测量从旧版 86Box 带来的性能提升,因为这是对 M6 的评测,而非对 86Box 的评测。

Why 100% Is the Only Acceptable Number

为什么 100% 是唯一可接受的数值

86Box reports an effective emulation speed as a percentage of its target speed. 100% means the host is keeping pace with the emulator's timing model, so anything less is a genuine problem. It does not guarantee that a benchmark will score exactly as it would on a physical CPU at the same clock.

86Box 以目标速度的百分比报告有效模拟速度。100% 意味着宿主机正跟上模拟器的时序模型,因此任何低于此值的数字都是真正的问题。它并不能保证基准测试得分会与同频率的物理 CPU 完全一致。

Consistency also matters more than the average here. Even brief dips produce audible artefacts because sound hardware is fed in real time and starved buffers are heard as brief dropouts which are irritating. Basically any 86box setup that regularly dips below 100% will not feel right, and having adequate headroom on the system to comfortably emulate the target speed will be a much more stable experience.

一致性在此处比平均水平更重要。即使是短暂的下降也会产生可听见的伪影,因为声音硬件是实时馈送的,而缓冲区饥饿会被听作令人烦躁的短暂掉线。基本上,任何经常低于 100% 的 86box 设置都不会感觉正常,而在系统中拥有足够的余量以舒适地模拟目标速度,将会带来更加稳定的体验。

The result is that turns each host machine into a ceiling rather than a score, and for any given emulated configuration there is a maximum CPU clock the host can sustain at a flat 100%. Because almost all of that work falls on one thread, single-threaded performance moves this ceiling substantially, which is the whole reason the M6 is interesting for this.

结果是,每台主机都变成了一个上限而非得分,对于任何给定的模拟配置,主机在保持 100% 负载时所能维持的最大 CPU 时钟频率是固定的。由于几乎所有的工作都落在一个线程上,单线程性能会显著移动这个上限,这也是 M6 对此感兴趣的全部原因。

Test Method

测试方法

To find the ceiling, I made a custom build from the same commit as the 6.0 release (build 9001), extending the frequency tables in 50MHz steps up to 800MHz. The Deschutes frequency table patch is available if you want to try it yourself against that tagged release. It adds 500–800MHz entries with memory and cache timings scaled to retain approximately the same access latencies, and keeps the AT bus at 8.33MHz. The emulation code is otherwise unchanged. Both Macs used this build for the extended tests.

为了找到上限,我使用与 6.0 版本发布相同的提交(构建 9001)进行了自定义构建,将频率表以 50MHz 为步长扩展至 800MHz。如果你想在标记版本上进行尝试,可以使用 Deschutes 频率表补丁。它添加了 500–800MHz 的条目,其内存和缓存时序经过缩放以保持大致相同的访问延迟,并将 AT 总线保持在 8.33MHz。仿真代码其余部分保持不变。两台 Mac 均使用此构建进行扩展测试。

Some might argue a Pentium II at these speeds is not era appropriate. I argue it is just a little overclock!

有人可能会争辩说,在这个速度下的 Pentium II 并不符合时代特征。我认为这只是一点点超频!

The emulated machine is otherwise fixed across every run:

模拟机器在其他方面每次运行都是固定的:

  • Slot 1 motherboard with Pentium II (Deschutes), clock varied per run
  • 256MB of memory
  • Voodoo 3 emulated VGA with 16MB of video memory (2 threads)
  • Windows 98 SE
  • Slot 1 主板,搭载 Pentium II (Deschutes),每次运行时钟频率不同
  • 256MB 内存
  • 带有 16MB 显存的 Voodoo 3 模拟 VGA(2 个线程)
  • Windows 98 SE

86Box CPU configuration for the emulated Pentium II machine

用于模拟 Pentium II 机器的 86Box CPU 配置

The load is deliberately a little awkward, Cinebench 2000 running its CPU test while Winamp 2.76 plays a 16-bit 44,100Hz PCM WAV in the background. The audio is a bit of an achor as it's a real-time consumer of the emulated hardware, so any moment it falls behind is immediately audible.

负载故意设计得有些别扭:Cinebench 2000 正在运行其 CPU 测试,同时 Winamp 2.76 在后台播放 16 位 44,100Hz PCM WAV 音频。音频是一个锚点,因为它实时消耗模拟硬件的资源,因此任何滞后都会立即被听到。

The pass condition is ultimately subjective but strict. If I hear a dropout, or the reported emulation speed falls below 100% at any point, the run fails.

通过条件最终是主观但严格的。如果我听到掉线,或者报告的模拟速度在任何时刻低于 100%,则运行失败。

Results

结果

The base M4 Mac Mini holds 500MHz, with both Macs extremely stable throughout the full Cinebench 2000 and 3DMark 2000 SE runs at that speed. At 550MHz, the M4 starts to hitch. They are slight interruptions in Cinebench, but more noticeable during the 3DMark demo, and enough to fail the run.

基础版 M4 Mac Mini 能稳定支持 500MHz,在该速度下,两台 Mac 在整个 Cinebench 2000 和 3DMark 2000 SE 运行期间都非常稳定。在 550MHz 时,M4 开始出现卡顿。这些在 Cinebench 中是轻微的干扰,但在 3DMark 演示中更为明显,足以导致运行失败。

The M6 passes 550MHz and 600MHz, which is incredible. At 600MHz it held a flat 100% through both Cinebench 2000 runs and the 3DMark 2000 SE demo, the latter giving it 7–8 minutes of uninterrupted testing. That makes the highest passing clock 20% higher than the M4's in this setup.

M6 达到了 550MHz 和 600MHz,这令人难以置信。在 600MHz 下,它在两次 Cinebench 2000 运行以及 3DMark 2000 SE 演示中均保持了 100% 的平稳性能,后者为其提供了长达 7-8 分钟的无中断测试。这使得该设置下的最高通过频率比 M4 高出 20%。

The CB2000 scores, for anyone who cares:

CB2000 分数,供关心的人参考:

Cinebench 2000 by emulated Pentium II clock

Cinebench 2000 按模拟 Pentium II 时钟计算

Emulated clockCinebench 2000M6M4
300MHz4.62 CBPassPass
350MHz5.34 CBPassPass
400MHz6.16 CBPassPass
450MHz7.02 CBPassPass
500MHz7.73 CBPassPass
550MHz8.54 CBPassFail
600MHz9.28 CBPassFail
650MHz10.08 CBFailFail
模拟时钟Cinebench 2000M6M4
300MHz4.62 CB通过通过
350MHz5.34 CB通过通过
400MHz6.16 CB通过通过
450MHz7.02 CB通过通过
500MHz7.73 CB通过通过
550MHz8.54 CB通过失败
600MHz9.28 CB通过失败
650MHz10.08 CB失败失败

One run per clock on the custom 86Box 6.0 build. A pass requires a flat 100% emulation speed with no audible dropouts for the whole run. Hover a result for the detail.

每个时钟频率进行一次运行,基于自定义的 86Box 6.0 构建版本。通过的标准是在整个运行过程中保持 100% 的模拟速度且无任何可听见的卡顿。悬停查看结果以获取详细信息。

Those scores describe the emulated CPU at each clock. A completed render is not enough to pass, the 10.08 CB result at 650MHz came with one or two audible underruns. In reality, I think I may be being too firm on that run, and background activity could have caused the hitches. But staying true to the methodology, 600MHz is the result and leaves a lick of headroom. The 800MHz option is there to extend the test range but clearly not a speed either Mac can sustain.

这些分数描述了每个时钟频率下的模拟 CPU 性能。完成渲染并不足以判定为通过,650MHz 时的 10.08 CB 结果伴随了一次或两次可听见的欠载(underruns)。实际上,我认为我在那次运行中可能过于严格了,后台活动可能导致了卡顿。但为了坚持方法论的一致性,600MHz 是最终结果,并留有一点余量。800MHz 选项的存在是为了扩展测试范围,但显然这不是任何一台 Mac 都能维持的速度。

There is an interesting wrinkle when comparing these scores with real hardware. An Ars Technica forum thread collecting Cinebench 2000 results includes the following user-reported figures:

将这些分数与真实硬件进行比较时,出现了一个有趣的变数。Ars Technica 论坛的一个收集 Cinebench 2000 结果的帖子中包含了以下用户报告的数据:

Period hardware, user-reported Cinebench 2000 scores

同期硬件,用户报告的 Cinebench 2000 分数

Period hardwareCinebench 2000
Pentium II 300MHz2.38
Pentium II 450MHz4.35
Celeron 800MHz7.52
Celeron 533MHz overclocked to 760MHz (95 x 8)8.03
Pentium III Coppermine 800MHz9.25
Athlon Classic 600MHz7.66
同期硬件Cinebench 2000
Pentium II 300MHz2.38
Pentium II 450MHz4.35
Celeron 800MHz7.52
Celeron 533MHz 超频至 760MHz (95 x 8)8.03
Pentium III Coppermine 800MHz9.25
Athlon Classic 600MHz7.66

User-reported results from the Ars Technica Cinebench 2000 thread. Different systems, memory and operating systems, so period context rather than a controlled comparison.

来自 Ars Technica Cinebench 2000 帖子的用户报告结果。系统、内存和操作系统各不相同,因此提供的是同期背景而非受控比较。

Our emulated 450MHz Pentium II scores 7.02 CB, about 61% higher than that physical PII 450MHz result. At 300MHz the gap is larger still, with 4.62 CB against 2.38 CB. Bizarrely, our 600MHz result of 9.28 CB lands almost exactly alongside that 800MHz Coppermine. These are individual forum submissions from different systems, so they provide period context rather than a controlled comparison, but the discrepancy is substantial. It's also worth a mention this benchmark version is very old and long before it became the popular benchmark it is today.

我们模拟的 450MHz Pentium II 得分为 7.02 CB,比实际 PII 450MHz 的结果高出约 61%。在 300MHz 时差距更大,我们的 4.62 CB 对比实际的 2.38 CB。奇怪的是,我们 600MHz 的 9.28 CB 结果几乎正好与那个 800MHz Coppermine 持平。这些都是来自不同系统的独立论坛提交数据,因此它们提供的是同期背景而非受控比较,但差异相当显著。此外值得一提的是,这个基准测试版本非常古老,远早于它成为今天流行基准测试的时候。

I do not yet know why, it's possible memory bandwidth and cache timing within the emulated machine might have something to do with it. There is some relevant history in 86Box's v3.0 release notes, which explain that P6 emulation was not fully accurate because of the complexity of out-of-order execution and L2 cache behaviour. Deschutes timings were tuned to get reasonably close to real hardware. But yeah, not sure.

我还不知道原因,可能是模拟机内的内存带宽和缓存时序与此有关。86Box v3.0 版本说明中有一些相关的历史背景,解释了由于乱序执行和 L2 缓存行为的复杂性,P6 模拟并不完全准确。Deschutes 的时序经过调整,以尽可能接近真实硬件。但确实不太确定。

The discrepancy is already present at 300MHz and 450MHz, below the entries added by my patch. For this review, 600MHz remains the highest passing setting in this 86Box configuration, with a 20% higher stable clock than the M4. The CB2000 scores are useful for showing how that configuration scales, but I would not use them to claim equivalent performance across software on a real Pentium II or Pentium III.

差异在 300MHz 和 450MHz 时已经存在,低于我补丁中添加的频率条目。在本次评测中,在此 86Box 配置下,600MHz 仍是最高通过设置,其稳定时钟比 M4 高出 20%。CB2000 分数有助于展示该配置的扩展能力,但我不会用它来声称在真实的 Pentium II 或 Pentium III 上软件性能等效。

更进一步:量化金融体系

看懂新闻只是起点——沿量化金融路径,把它变成能交付的工程能力

进入量化体系 →

相似阅读

关联信息,但可能不是同一事件