Linus Torvalds讨论了英特尔和AMD的中断/异常处理的新建议

2021-04-04 19:43:17

跳转到导航跳转以搜索AMD,英特尔均致力于在X86-64处理器上处理中断和例外的新标准。 AMD提出一套新的"主管条目"扩展作为当前中断描述符表事件处理系统的带帮助。英特尔希望将整个遗留系统抛弃并以根本不同的&#34重新开始;灵活的回报和活动交付" (FRED)系统。 Linux-Architect Linus Torvalds几周前加权两种方法的优点。

现代X86-64处理器在处理中断和例外方式中有一些奇怪的缺陷。这些奇怪的不是新的,中断描述符表是1982年2月1日由英特尔推出的16位I80286处理器一直返回的传统的一部分。这几天的基本设计原则很多,近40年以前,仍然存在现代X86-64处理器。

AMD和英特尔都提出了最近几个月的更好的方法来处理中断和例外。 AMD发布了一个标题" AMD主管入境扩展" 2月份,英特尔于三月发布了一个非常不同的一个标题为灵活的返回和活动交付(FRED)。

这就是AMD如何解释他们在其AMD主管入境扩展提案中看到的问题:

" SYSCALL和SYSRET指令没有原子切换在用户和主管模式之间过渡现代操作系统所需的所有CPU状态。在SYSCALL条目之后,典型操作系统需要在内核过程中断和异常之前执行SWAPGS指令并加载内核堆栈指针,并且可能是阴影堆栈指针。如果Syscall在阻止正常中断时清除,则可能对不可屏蔽的中断(NMIS)Tooccur仍然可以。此外,在此时间内可能发生某些类型的X86异常,包括#db,#hv,#sx等。

没有亚洲架构保护,以便在处理程序中进行异常并再次接收相同的异常。例如,#sx处理程序期间可能会出现#sx。异常用于建立堆栈的IST机制时,再次拍摄相同的异常可能会导致无限循环,因为堆栈上的异常帧被覆盖。 "

AMD提出了几种新的处理器指令,将替换新的Syscall和Sysret指令与New"增强型Syscall" (ESC)指令和新"增强的SYSRET" Sysret称为A&#34的行为;增强的Syscall" " AMD主管入境扩展"文档只是18页,如果您折扣和#34;许可协议" Drivel和前五个页面的前盖。它有一些psudo-code,说明他们的新增强型系统如何工作。

AMD'简短的提案,他们几乎可以让他们基本上试图把口红放在猪上。

英特尔'提案是众所周知的。他们的灵活回报和事件交付(FRED)文件是一个往往的46页。 "介绍"以这种方式描述了他们更复杂的方法:

" Fred架构定义了更改权限级别(环转换)的简单新转换。 Fred架构旨在采用以下目标设计:

通过通过中断描述符表(IDT事件传递)和ERET指令以较低的延迟转换来替换事件递送来提高整体性能和响应时间。

通过确保事件传递建立完整的主管上下文并确定完整的用户上下文,提高软件稳健性

由Fred架构定义的新转换是FRED事件传递,并且返回事件,两个FRED返回指令。 "

这些是非常不同的方法。 AMD提出了一个带援助,英特尔想要一个完整的改造。

如果使用谷歌' s verutter toolkit在DART中编写了在C ++中写了一些简单的程序,则永远不必考虑低级系统调用。另一方面,Linus Torvalds必须始终处理英特尔' s avx512等的低级指示和事物。因此,他处于良好的位置,可以评论英特尔和AMD的新建议。

Linus Torvalds这是在他最喜欢的信息中对它说到这一点,也许也只有网络论坛:

英特尔版本基本上是"是的,受保护模式80286异常处理坏了,那么386使它与32位扩展有臭手,然后Syscall / Sysenter使一切差别更差,然后X86-64扩展甚至更多问题。所以,让' s添加一个模式位,所有废物消失在#34;

相比之下,AMD一个基本上努力解决实际的根本问题,这些遗产诱导的废话是令人讨厌的,这导致了问题。

对于&#34的简短列表; IDT异常处理问题"我' ll只是枚举其中一些:

(a)IDT本身是一种可怕的令人讨厌的格式,你应该以奇数方式解析内存来处理异常。从80286开始,它从根本上很糟糕,它有一个很难解析32位,它可以在x86-64中说话更糟糕。

(d)最糟糕的异常嵌套问题(最少的NMI,机器检查和STI阴影处理)

(f)几种不同的异常堆栈布局,以及用于例外,中断和系统调用的数百个不同的入口点(并且甚至没有计数任何没有人应该首先使用的呼叫门)。

AMD旨在解决彻底的历史错误(b) - (e),但否则相同的东西(即它为微代码添加了更多的代码,基本上取代了您目前必须做的一些可怕的黑客攻击 - 系统软件)。

英特尔一个是认可,即不仅仅是由系统软件致力于解决的完全错误,并引入了一个"固定例外"模型,基本上修复了上述所有内容。

两者都是有效的,他们实际上是相当独立的。老实说,AMD论文看起来像一个快速的"我们甚至没有完成思考所有细节,但我们知道这些部分被打破了,所以我们也可以释放这个"

我不知道它已经酿造了多长时间,但是由&#34判断; TBD"那篇文章中的东西,我认为它' s"早期粗略的草稿" "

realworldtech.com:x86 - 为什么在片段时联合起来?回复Linus Torvalds,2011年3月13日

Torvalds继续说明Amd'"快速修复"对他和其他操作系统供应商来说更容易实施,它在长远来看,它并不理想。英特尔'■提案在总线下抛出整个现有的中断描述符表(IDT)输送系统,因此可以替换它们所谓的新" Fred活动交付"系统。 Torvalds认为这是一个更好的长期解决方案。

"英特尔弗雷德的东西有几年的背景,老实说,我认为是正确的事情。它真的将整个IDT降级到A"我们甚至在所有的情况下都使用这个,除非你有遗留段选择器"对一个真正可怕的东西恢复了一个真正令人作呕的CPU架构:80286的良好的谜。

我希望两家供应商都结束了这两个东西。如果您是OS供应商,AMD版本更好,希望在操作系统级别变为人们可能的人类,并摆脱已知问题。想想"我们可以' t真的对&#34做出大的改变。

但我认为如果您认为X86-64实际上应该在长期存活的情况下,英特尔版本更好,并且您实际上想要改善异常处理和速度速度(" f"历史上站立;快速",我不确定为什么他们显然更名为其"灵活")。

老实说,我喜欢&#34的AMD模型;早期释放讨论和#34;它与原始x86-64(aka" amd64")规范所做的。我认为他们的论文非常符合那种原始规范,无论是那个"关于非决赛的早期释放是我们想要做的事情和#34;和A"现有硬件的最小变化"

但我确实认为英特尔方法实际上是更好地修复了整个建筑的一些充气部分。

如果你曾经期望最终生活在一个旧的32位遗产的世界里,那么它已经更多地相关(我们已经可以折扣x86 16位模式),弗雷德的方法实际上带给你一个好的我想,迈出了那个方向。

无论如何,我希望这是一个折磨的问题,而是现实地,因为改变了AMD模型对传统模式有多少,以及整个FRED异常模型是如何从传统模式中的独立模式,即使您不行模式#39; t最终"每个人都做了两者"我怀疑它并不特别(双关语)难以支持两者。

毕竟,FRED非常清楚地定义为拥有完全新的模型,以及任何操作系统供应商,这种情况仍然必须支持旧的CPU和#39; s的遗留例外模型。

这一点是FRED异常处理更简单,但它完全独立的代码和逻辑,明确地用螺栓固定在一侧,希望有一天可以完全删除原始代码和逻辑。

相比之下,AMD模型意味着与现有代码非常明确地接口,只需允许人们避免他们已经拥有的脆弱(有时昂贵)的黑客和替代方法。

所以他们实际上有很少的重叠 - 概念上以及来自A"实施和使用"立场。 "

realworldtech.com:x86 - 为什么在片段时联合起来?回复Linus Torvalds,2011年3月13日

Torvalds非常清楚,有利于修复X86-64架构中的潜在问题而不是A"快速修复" - 即使调整Linux内核也会更容易,因此它支持新的"快速修复和#34; CPU指令AMD提出。

一些关于新中断处理提案的线程中的一些人提出了英特尔' Suplated"灵活的回报和活动交付"系统缺乏对Ring 1和2的任何支持。

" FRED事件传送可以影响从环3到环0的过渡,但也用于传递事件到戒指的事件0.一个FRED指令(ERETU)效果从环0返回ring 3,而另一个( Erets)在留在环0.&#34的同时返回

" Andrey([email protected])于3月14日,下午4:15写道:>在弗雷德模型中,我有点警告他们正在滴下戒指1和2,基本上离开>内核和用户空间介于两者之间。这适合Linux和Windows需求,但我想知道>如果这将限制其他设计,如microkernels?什么是预期用例>中间戒指如果不是一些像一些驱动程序和系统服务的半特权的东西?

戒指1-3之间基本上没有区别:寻呼模型不区分,而且唯一的支持是在一些真正的宇宙段和呼叫门使用,没有理智的人应该做的那样只是意味着您的操作系统永远不会与x86的任何其他相关关系,并且即使在那里也会表现得很糟糕。

你不需要他们。甚至没有微内核。如果你认为你这样做,你就完成了一些真正吓唬的事情。

事实上,我喜欢弗雷德的主要原因是它真的是朝着摆脱破碎的IDT环转换模型真的很大一步,但最终完全摆脱分割。剩余的所有内容基本上是GSBASE / FSBASE用于线程本地数据的变化(在段中有用)。 "

realworldtech.com:x86 - 为什么在片段时联合起来? Linus Torvalds的回复,2021年3月14日

Torvalds继续说,戒指分割是一个不好的想法。

"但细分,他们在80286介绍的方式?总和垃圾。如果您认为您需要它们或想要它们(除了遗留复古计算),我建议您需要真正重新检查您的生活选择。

(侧面注意:在许多方面,X86 Supervisor / CPL0模式是A"中间环",因为您具有更高的访问权限 - SMM(UGH)和虚拟化的模式。所以它'不是你不一定想要两个以上的安全域,但80286的方式用四个环和分割完全是错误的模型。

整个"一个戒指为应用程序,一个环形设备驱动器,一个环为系统软件,一个环为统治它们所有"事情只是真正可怕的托尔基·小说。 "

realworldtech.com:x86 - 为什么在片段时联合起来? Linus Torvalds的回复,2021年3月14日

我们的一些读者可以猜测讨论从那里开始,现在M-Word," Microkernel"。

Linux是一个大型单片内核。如果没有详细阐述微内核和单片内核的技术优点及其优势和缺点,就足够说,一个不仅仅是告诉Linux内核的作者和建筑师,Microkernels以某种方式优越。 " Doug S"谁更愿意匿名发布,犯了错误。

" Doug S([email protected])于3月17日,2021年9:30凌晨3点30:>虽然每个人都同意微型的绩效是真实的,适用于&gt的应用程序。安全性至关重要,这是完全值得的。呸,你'重新孵化通常没有基础的通常没有基础,当你调查细节时,它实际上没有举起。

它''所有的理论和掌控,只是重复同样的旧FUD,从未真正真正相关。

如果你真的想要安全 - 而这一是一个理论,这就是人们实际做的事情 - 你实现了物理上分开的系统,你让你的安全方更简单,你做代码审查,就像没有明天一样。即汽车,自动化,类似的东西。 "

" Doug S"不是唯一一个方便地把头放在那天砧板上的微观狂热。

" DMCQ([email protected])于3月17日,2021年11:15写道:>所以问题变得 - IPC的表现会显着改善吗?

它' s的根本更昂贵地发送某种消息,而不是只是共享数据结构并使用缓存一致性。

唯一的方式" IPC"如果您将IPC定义为"内存在共享内存中映射您的数据结构,则是竞争力的。

换句话说,你的整个论点都在丧失不良。在一个不存在的世界中,没有合理的人希望在任何合理的时间范围内存在甚至有一个现实的计划,你的论点只是完全归零。

请区分现实和梦想世界,刚刚承认,并停止制作在其他人现实中没有意义的论点,好吗?

虽然英特尔和AMD的优缺点和弊端在未来的处理器中的中断和事件处理的各自建议是值得讨论的,其实际上是最重要的。他们是更大,更强大的公司。它比英特尔的未来处理器更有可能使用其提出的灵活返回和事件传递系统。他们的下一代处理器赢得了' t,在消费者CPU拥有FRED技术之前,它需要数年的时间。请记住,上述技术文件本月早些时候发布。事情并没有神奇地从绘图板上储存搁板过夜。

英特尔ISN' T将FRED技术交给AMD并帮助他们实施它。我们可能会看到两者都以自己的建议向前迈进。英特尔将有Fred,AMD将有监督员入境扩展,直到AMD不可避免地,采用弗雷德或某种形式的距离。

我们真诚希望您享受这篇文章和Linus Torvalds的传奇报价。

这篇文章很奇怪。如果你只是读取报价,我的冲突远远超过实际发生。

林斯基本上说我都说。 AMD扩展将当前系统以在软件和CPU中容易实现的方式使当前系统更加强大和更少的言话。

和英特尔&​​#39;延伸将该系统移动到遗产并使一个更好的人也很好。

它没有听起来像是有很大的反对从AMD和英特尔才能做两者 > 它' s的根本更昂贵地发送某种消息,而不是只是共享数据结构并使用缓存一致性。 Mill CPU有一个有趣的概念"门户网站",交叉特权 - 边界呼叫(留言传递的类型)aren' t比本地函数呼叫更昂贵。 它'如果要将数据结构传递给其他数据结构的指针,但我想象它仍然可以摆脱大部分开销。 (https://yout...v8n3u?t = 2575) 当然,利姆斯仍然纠正,磨坊CPU比现实更幻想。 我认为它可以在硅中实施磨机,但多年来没有进展,可能会保持蒸发器。 Linuxreviews欢迎所有评论。 如果您不想成为匿名,注册或登录。它是免费的。