愚蠢的 S0 睡眠 - 现代待机

前言#

前段时间购入了铠侠 RC 20（以下简称为 RC 20）打算作为主硬盘，因为笔记本自带的硬盘实在是太小了（512 GiB），已经不够我用了。毕竟双系统想用的舒服，还是都分大一些比较好。

问题的发现#

兴冲冲的把 RC 20 换上去，做好 Windows 系统。打开 Diskinfo ，通电次数 49 次，写入 30 GiB ，读取 33GiB，还是很惊喜的 ，因为这块盘是从 PDD 购入的，就怕是二手盘。做好系统后才 30 GiB 的读取和写入，在我看来是很正常的，于是我去安装 Manjaro Linux。当我搞定完，迁移好数据后，我发现一个很奇怪的事情。Windows 的软重启，即在 Windows 里面点击重启。这个 RC 20 在下一次启动的过程中必定掉盘。这让我感到莫名其妙。随后我在联想的社区找了一下，同症状的的人似乎不少。

例如：

1 https://club.lenovo.com.cn/thread-7848315-1-1.html

2 https://club.lenovo.com.cn/thread-7848543-1-1.html

3 https://club.lenovo.com.cn/thread-7847972-1-1.html

4 https://club.lenovo.com.cn/thread-7871519-1-1.html

5 https://club.lenovo.com.cn/thread-7871051-1-1.html

6 https://club.lenovo.com.cn/thread-7857801-1-1.html

可以看到的是，似乎并不是我一个人的问题。当然，我的 BIOS 当时并不是最新版本，所以我准备用 RC 20 升级 BIOS。但是事情并没有这个简单，当正常的走完流程，重启之后提示 firmware image not found ! 当然，firmware 一词引起了我的注意，难道还有专有固件么？？随后我进入 Windows 系统，设备管理器 - 固件，在这个硬盘上我看到只有两个固件。随后我换上旧的硬盘，竟然有三个固件！！！其中一个是镁光的硬盘固件，但是我这个可不是 OEM 盘！自然没有这个专属的硬盘固件

到这里，其实我是初步知道了导致问题的主要原因，就是这个专有固件。RC 20 是没有的，毕竟它是面向消费者的 SSD，而不是面向 OEM 的。

那其实问题也不大，对吧。也就是 Windows 重启用不了罢了。反正我 Windows 用得少，也就是打打游戏，问题也不大。

问题深化#

作为一个现代的大忙人，我习惯于笔记本放着去睡眠，而不是直接关机，毕竟谁也不想打开笔记本还要打开十来个软件 or 窗口。

但是这个时候问题就出现了，在 Windows 系统下，长时间睡眠会导致掉无线网卡驱动，必须重新启动 Windows 才可以。其实这也不是啥问题，毕竟我的主力系统也不是 Windows， Linux 下正常就行。但是 Linux 下的睡眠也不是正常的！！！ Linux 不管睡眠多长时间，都会掉网卡，网卡再也启动不了。然后我想着，那就不睡眠了，直接休眠算了。可是即便是休眠，依旧会掉网卡，而且电源管理也会异常。这在原硬盘上是没有出现的。我彻底懵了。一直思索不到原因。

根源#

通过看到 Linus 吐槽 Windows 的现代待机，我才意识到是愚蠢的 S0 睡眠 - 现代待机功能导致的！！！

当初 Microsoft 为了能登录移动端设备，于是给 Windows 增加了 S0 睡眠，该睡眠表现为：进入睡眠后，CPU 仍会干一些小杂活，网络保持连接，蓝牙保持连接，让你的设备像一个智能手机。这和我认知的睡眠可不是一样的，经过查阅资料，我才意识到：我认知的睡眠模式是 S3 睡眠，该睡眠模式的表现为：进入睡眠后挂起到内存。然而我的主板并不支持切换睡眠模式。

你的电脑支持什么睡眠模式可以通过如下命令查询（Windows）

Copy
powercfg /a

如果出现如下内容

恭喜你，是 “高贵的” S0 睡眠

如果出现以下内容

恭喜你，是 “一般的” S3 睡眠

当然在部分机型上，你是可以通过 BIOS 开启 S3 睡眠的；当然，我的不支持。

那为什么导致了这个问题呢？

经过详细查阅资料，是 Intel 推动了这个 S0 睡眠的发展。（（Windows）田牌笔记本不包含在内，毕竟早早地就被锁死了）

本身 Windows 仅仅将 S0 作为一个睡眠的可选项，对于用户来说，关闭即可。但是 Intel 推出了 “雅典娜计划”，即后来的 “EVO 认证”。EVO 认证有一个规则是，需要设备能快速唤醒，那么 OEM 厂商在实现这个功能的时候就去使用了 S0 睡眠，当然 AMD 版本也不能幸免，毕竟个人 PC 市场已经饱和，OEM 厂商摆烂情况下，OEM 厂商让 BIOS 支持 AMD 处理器即可，所以依旧是 S0 睡眠。同时因为摆烂，所以不给切换到 S3 睡眠。如果你强制去使用 S3 睡眠，大概率会出现睡眠睡死等问题。

令人可笑的是，不论是锐龙还是 12/13 代酷睿都是支持 S3 睡眠的，只不过是 OEM 厂商给的 BIOS 不支持罢了。当然，AMD 版本为了实现这个功能，在硬盘这里加入了 OEM 固件。一是升级 BIOS 需要这个，其次就是这个可恶的 S0 睡眠。

当然，S0 睡眠的目标是令人期待的，系统在闲置的时候干一些小杂活，接收一些消息，进行一下更新，让用户无感知的认为 Windows 始终保持在最新的状态。而且唤醒速度最快，而且还是保持的联网状态，意味着即时通信软件依旧在后台接收信息。当你打开电脑，进入工作状态时，不必等待消息的同步。但是，这是理想状态；现实则是，当你充满电的笔记本睡眠一晚上，早上拿起来还热乎着呢，但是电量已经很低了，不足以支撑你一早上的工作，你不得不去找充电器。这样的体验是令人相当恼火的。

解决问题#

对于我而言，我需要的是一个正常的睡眠 + 扩展后的硬盘容量，所以我选择了购入硬盘盒子，本次购入的是绿联的 M.2 Nvme / SATA 双协议硬盘盒子。JD 链接，当然 PDD 会更便宜一些。

对于 RC 20 来说，自身带有独立的 DRAM 作为缓存，也就意味着不需要从主机上的内存借用一部分内存当缓存。装入盒子性能损失不是太大。当然，如果你的硬盘没有独立的 DRAM ，采用 HMB(Host Memory Buffer) 方案，意味着它需要从主机上借用一部分内存当做缓存，但是你装入盒子中，是无法通过 PCIE 通道去借用内存的（雷电盒子除外）。

那么，对于这类硬盘，没有 DRAM 来缓存 FTL(Flash Translation Layer) 表，主控从颗粒中查 FTL 表的速度是很慢的。会极大地影响硬盘的 4K 性能。关于这点，如果你不了解的话，建议去观看硬件茶谈的讲解，链接

所以一般而言，装入盒子的硬盘最好有独立的 DRAM 来作为缓存，如果能做到 1:1000 (MiB) 这样比例的更好。例如 1 TiB 的硬盘配备了 1GiB 的 DRAM 缓存。

那么原装硬盘继续当主硬盘，RC 20 装入盒子当 Windows 的从盘。主盘上仅仅分配 80 GiB 给 Windows 系统。

具体成绩如下：

主机内：

盒子内：

最后#

在这个 OEM 厂商摆烂的时代，谁又会像当初的微软一样，去逼迫着厂商发力，去推动硬件的普及呢？，Windows Vista 完成了它的时代任务，让计算机硬件大幅降价，使其普及；而如今这个时代，谁又会做这样的推动者呢？也许会有，也许会没有，也许等国内能推出国产竞品后，就会大幅降价吧？也许吧？也许我们国家可以完成这个任务？也许吧？

引用#

微软这是在逼我买 MacBook - Windows 新式待机 #linus 谈科技

硬件科普 固态硬盘的缓存是干什么的？有缓存和无缓存有什么区别？

此文由 Mix Space 同步更新至 xLog
原始链接为 https://www.timochan.cn/posts/any_pen/stupid_modern_standby