买了块 2K 144Hz 的显示器,接上 MacBook,打开系统设置——刷新率那一栏最高只有 133Hz。

不是 144,也不是 120,是 133。这个数字很奇怪,奇怪到不像是厂商会标的规格,倒像是某个地方算出来的余数。

它确实是算出来的。

先确认屏幕没被冤枉

第一件事是排除「这屏本来就不是 144Hz」。

显示器会把自己的能力写在 EDID 里,交给电脑读。解开它的基础块,第一条 detailed timing descriptor 写着:

1
2
3
4
5
首选时序   2560 x 1440 @ 60Hz
像素时钟 241.70 MHz
总时序 2720 x 1481
刷新范围 48 – 144 Hz
最大像素时钟 600 MHz

屏幕很清白:它确实是 2560×1440 的原生面板,支持到 144Hz,自己能吃下 600MHz 的像素时钟。

顺便说个容易被骗的地方:macOS 的 ioreg 里有个 NativeFormatHorizontalPixels 字段,看起来像是在告诉你面板的物理分辨率。它不是。这块屏在那里报的是 1920x1080——那读的是 CTA-861 扩展块里 VIC 16(1080p60)上置的 native 标记位,是给 HDMI 电视用的格式标记。判断面板原生分辨率,要去解 EDID 基础块的第一条 detailed timing descriptor。

瓶颈在半路上

屏幕没问题,那问题在中间这段路。

链路是这样的:MacBook Air M4 → USB-C 拓展坞(DP alt mode)→ HDMI → 显示器。

macOS 自己记着这条链路能跑多快,藏在 DisplayHints 里:

1
MaxTotalPixelRate = 537,300,000

537.3 MHz。 屏幕能吃 600MHz,链路只给 537.3MHz。

一道小学算术

像素时钟怎么算?把总时序的宽、高、刷新率乘起来就行——注意用总时序(2720×1481),不是可见分辨率,因为消隐区那些看不见的像素也要占时间。

1
2
144Hz → 2720 × 1481 × 144 = 580.1 MHz   占链路上限的 108%  ❌
133Hz → 2720 × 1481 × 133 = 535.8 MHz 占链路上限的 99.7% ✅

答案出来了。144Hz 需要 580.1MHz,超出链路上限 8%,塞不进去。而 133Hz 是 535.8MHz——刚好是 537.3 的 99.7%。

macOS 没有保守地退回 120Hz,而是精确地挑了那个还能塞得下的最大值,一格不浪费。

所以 133 这个数字既不是厂商标的,也不是随便截的。它是「在这条链路上能跑的最快速度」。

为什么坞只给这么点带宽

USB-C 口里的线是有限的。拓展坞要同时管视频和 USB 3.0,就把 4 条高速通道劈成两半:2 条给 DisplayPort,2 条给 USB。

视频只剩一半的路,带宽自然对半砍。如果是 USB-C 直连显示器、4 条通道全给 DP(HBR3),带宽预算大约在 1080MHz——580MHz 轻轻松松,144Hz 随便跑。

一句话:你为了插 U 盘,付出了 11Hz。

顺便说个反直觉的:降刷新率不会让坞凉快

133Hz 占满了链路的 99.7%,坞长期在满负载工作,摸上去一直是温的。很自然会想:把刷新率降下来,是不是就凉了?

我测了。读 AppleSmartBattery 里的 PowerOutDetails.Watts(Mac 经 VBUS 供给坞的功率),每档取 10 个样本:

刷新率 供电功率
133Hz 3237 mW
120Hz 3310 mW
60Hz 3129 mW

极差只有 181mW(5.6%),而且不随刷新率单调变化——120Hz 反而比 133Hz 还高一点。这就是噪声。

所以别为了降温去调刷新率,纯属白忙。

坞的热来自别的地方。 把 USB 树展开看一眼,这个”只插了键鼠接收器”的坞里其实常驻着:两级 GenesysLogic USB 3.1 Hub、两级 USB 2.1 Hub、一块 ASIX AX88179B 千兆网卡、一个 USB 3.0 读卡器、一颗 ITE BillBoard 芯片。

网卡和读卡器是焊在里面的——你不插网线、不插卡,它们照样枚举,照样耗电。坞是总线供电,Mac 给它约 3W,这 3W 全散在一个小金属壳里。烫是必然的,跟你开多少赫兹没关系。

那怎么才能真的跑满 144Hz

绕开拓展坞。

如果你的 Mac 还有空着的 USB-C 口(比如充电走了磁吸),拿一根 USB-C → DP 线从空口直连显示器。4 条通道全给视频,带宽预算翻一倍,580MHz 不在话下。顺带坞里那颗转换芯片彻底停工,也能凉一点。

代价是多一根线。但换来 11Hz 和一个不烫手的坞,我觉得划算。


一点题外话

整件事里最有意思的地方,是 133 这个数字本身。

它看起来像个 bug,像某个程序员随手写的魔法数字。但把总时序、链路上限、刷新率三个数摆在一起算一遍,它就变成了一个必然的结果——系统在你看不见的地方做了一道除法,然后老老实实取了整。

很多看起来莫名其妙的限制,拆开看都是这样:不是谁偷懒,是物理定律在某个地方划了条线。