AMD似乎正在为即将推出的Zen 6芯片从根本上重新设计其CPU架构,而不仅仅是将其作为Zen 5的衍生版本。作为这些改进的一部分,多亏了X平台用户InstLatX64,我们现在得知AMD终于在其新芯片中采用了英特尔的FRED指令集,同时还引入了全新的矩阵乘法和位反转指令。

FRED是对已有40多年历史的80286时代中断描述符表机制的全面替代。目前,IDT是处理系统事件(如网络数据包到达或鼠标输入)并将其数据传递给驱动程序或应用程序的标准方式。
AMD采用FRED是两家公司共同成立x86生态系统咨询小组以协调新指令集工作的成果。去年10月,在该联盟成立一年后,AMD同意在其即将推出的芯片上实现FRED。目前,两家公司都还没有量产芯片支持FRED,但可以合理预期,英特尔的Nova Lake和Panther Lake,以及AMD的Zen 6,将成为首批支持该指令的产品线。
在互操作性方面,情况曾一度显得有些不确定,因为AMD拥有自己的Supervisor Entry Extensions。虽然英特尔的FRED是对IDT的完整彻底替代,但AMD的SEE最好被描述为一种可行的变通方案,它要求对遗留软件进行尽可能少的更改。
林纳斯·托瓦兹(Linus Torvalds)本人在一篇论坛帖子中明确阐述了他的观点,他希望两家供应商都能实现这两种方案,但他赞扬英特尔的方法是一种更彻底的“洁净室”解决方案,能够完全摒弃遗留的冗余部分。
关于软件支持,Linux内核自6.9版本起已提供对FRED的临时支持。同样可以合理预期,下一个版本的桌面或服务器版Windows也将启用此功能。需要注意的是,只有操作系统和驱动程序等底层软件才能使用此功能;对于实际应用程序而言,这并非关注点。
至于FRED究竟是什么,我们可以提供一个极度简化的解释。系统事件(例如,接收到一个传入的网络数据包)被称为中断,而处理该事件所需的数据和/或代码传输涉及权限环的转换。这种情况在任何操作系统中都持续不断地发生,遍及从存储I/O(一次写入完成)到鼠标输入(例如,一次简单的点击)的每个部分。
迄今为止,程序员不得不依赖IDT,其准确的技术形容词是“凑合”且“不稳定”的。IDT只允许从内核代码到应用程序代码的半吊子转换,这意味着程序员必须手动执行许多其他操作,小心处理边缘情况,考虑多个权限环级别,并规避潜在的竞态条件(即两个系统事件同时发生并相互干扰)。
FRED在各个方面进行了改进,它提供了一次性指令,以保证从内核到应用程序再返回的干净转换,并具有一致的栈(包含事件信息和继续执行的位置)。主要的FRED指令是原子性的,意味着它们要么全部执行,要么完全不执行,因此程序员在处理中断时无需担心状态不一致的问题。这也大大减少了心智负担,因为需要考虑的事情少得多。甚至连旧的权限环级别也消失了,被简化为0级(内核)和3级(用户)。
总而言之,这意味着开发者只需调用FRED,它就能一次性完成所有必要的工作,而不再需要编写大量代码来处理各种极端情况和理论问题。这应该有助于实现更稳定的内核、系统驱动程序、引导加载程序和其他底层软件。
至少在理论上,FRED也注定会提高整体系统性能,因为它消耗更少的CPU周期,从而降低事件延迟。这些改进在高负载场景下会累积起来,例如处理大型网络传输,甚至可能包括高刷新率游戏和音频工作——尽管每种工作负载的潜在提升幅度会有所不同。
对于事件处理特别复杂、需要穿越多个层的虚拟化场景,FRED无疑将是一个性能福音。x86架构长期以来因固守遗留功能过久而受到批评,因此FRED即将到来是个好消息。



