以前的故事都是过去创业的故事,今天写一个微服03硬件最新款的故事

其实微服03的案子前年就开始了,去年早些时候,我已经拿到了最早的工程样机。我们公司有一个规定,炸机一定要先炸老板,如果老板都炸不死,就可以卖产品了

微服03最大的优势就是和02同样的体积,磁盘从3个增加到7个,7盘全固态,最高可以支持96TB的磁盘空间,因为内存也从DDR4换成了DDR5,所以最大的内存也从32GB提升到64GB

最开始用,一切良好,直到有几天系统像神经病一样,各种乱报错。搞系统的同事看了随机的日志,百思不得其解。这时候,我这种搞过硬件的就来劲了:凡是软件随机的问题,没有规律一般就是硬件的问题

我就认真看日志的diff,最后发现内存的温度过高,最高飙到了120°,但是为什么会这么高呢?最后发现是算力舱在做微服全盘RAG索引的时候,向量数据库高速写内存,顶着极限在跑,相当于压测了呀,最后直接把内存干的温度过高,内存条光荣牺牲。内存都干废了,所有在内存中的bit都不可信,这就发生最开始系统随机错误的原因。

找到原因就好办了,CPU本身有一个涡轮风扇,主要降低CPU/GPU的温度,我们在主板下面,内存和系统盘的位置又加了一个小风扇,专门对着内存吹,果然双风扇的设计,成功的让内存的温度正常了。

因为双风扇的设计,我们反而因祸得福,成功的降低了整机的噪音。02是单风扇,当遇到CPU负载高的时候,风扇转速就会上去,噪音也上去了。两个风扇的好处是,一个吹,一个排,大大增加了机箱内的空气交换效率,同样的温控反而不需要那么高的转速。简单来说,就是两个风扇风量更大,转速同时降低了,03反而比02更静音。

一般的故事到这里就应该结束了,可惜今天的故事是在二班发生的

PCB第三次打样后,工程师给我换了新的主板继续测试,每天就暴力的用算力舱暴力算向量数据库,没有问题,内存温度很好。大概持续了半个月,正准备批量生产的时候,又发生一个严重的问题,风扇跑一段时间会自动停止。哎呀这个问题更大呀

我又召集了硬件工程师、系统工程师、测试工程师还有供应商,一起开会,研究为啥风扇会自动停止,测试工程师说,如果把主机拆开正着放自动停止的概率就高,侧着放概率就低。我说,这是扯犊子的事情,肯定不会这么玄学的。

我们先让供应商拿着不同的SIO芯片,给PCB工程样片手工换了一下,还是不行。

工程师又转向了软件驱动,工程师翻遍了SIO这颗芯片的所有Datasheet,还是没有发现头绪。因为SIO这种古董芯片是基于LPC总线的,我们观察,一般都是向0x2E写入数据,从0x2F读取数据,当风扇停机的时候,就会发现很多随机的数据写入寄存器。

工程师继续在驱动层面加了自旋锁,避免OS多个线程写芯片,确实没问题,但是根本原因还没有找到,不能就这样当骆驼埋在沙子里workround。继续看日志,SIO 在 S3 期间掉电复位了,而 BIOS 没有在唤醒时重新初始化它。这导致 PCH 读不到数据,认为传感器故障,触发了硬件级的保护模式。

工程师这时候来劲了,既然不在OS层面,肯定在更底层,于是就对BIOS固件逆向了一下,在一堆汇编代码中,终于找到那个幽灵, SMM(System Management Mode),当发生特定的 SMI(系统管理中断)时,CPU 会进入一个对 OS 完全透明的“上帝模式”。我发现,BIOS 的工程师写了一个 SMM Handler,它会周期性地、或者在系统电源状态变更(如 S3 唤醒)时,强行接管 LPC 总线,直接去读写 SIO 的端口。

真相大白了:

1.S3 唤醒时:SMM 比 OS 先醒过来。它试图读取 SIO,但 SIO 还没初始化。SMM 读到了错误数据,直接把风扇拉满。
2.日常运行时:SMM 就像一个不讲道理的“先辈”,它在后台默默地轮询。虽然我的驱动加了锁,但 SMM 是 Ring -2 的存在,它想插队就插队,根本不看你的锁。

既然找到底层原因,那彻底修复就很简单了。

本质上,这个SIO芯片在硬件层面上是没有对写入寄存器的消息进行锁管理的,如果上层风扇控制程序发了多条转速控制指令时,就有可能因为没有做队列管理,最后在芯片逻辑层面产生多线程竞争条件,竞争条件会让SIO芯片进入随机输出错误的风扇转数信息。同时在我们逆向报告分析的铁证下,板卡厂商承认了SIO芯片方案中缺失对SMM的严谨处理,导致了S3唤醒后状态不正常。

最后,我们在风扇控制程序上加了队列处理,避免SIO芯片的随机竞争问题,同时更新了板卡厂商的BIOS后,S3的唤醒状态也正常了。

至此,微服03的风扇算法和SIO芯片的状态如工程师预期的那样精准运行。

好了,喜欢我们创业故事的朋友,欢迎点赞、转发、收藏,看不懂驱动和S3没关系,就当技术小说看啦

喜欢我们产品的老板,欢迎评论区打1, 这么硬核团队做的产品,质量和功能肯定杠杠的,下周就要因为内存涨价而被迫涨价了,这周买到就是赚到!
https://x.com/manateelazycat/status/1993545474775957785?s=35

Comments

Be the first to add a comment