Jam*_*mes 2 x86 intel cpu-architecture microcoding
假设我想修改现有指令的实现。例如,假设我想更改在获取和解码后执行“mov”指令时由处理器执行的微代码。我该怎么做呢?
另外,假设我想向 ISA 添加一条新指令。例如,假设有一个当前未使用的操作码,我希望我的处理器能够在获取它后对其进行解码和执行。我该怎么做呢?
说实话,我什至不知道从哪里开始,这就是我询问堆栈溢出的原因。我没有任何编写微代码的经验,我只从计算机架构课上知道这个术语。我知道查找 x86 指令列表非常容易,但我不知道在哪里查找微指令列表。我什至不知道英特尔是否公开了他们的微代码列表。我不知道需要使用什么程序将这些新的微程序加载到 CPU 内的适当内存中。我认为引导加载程序可能参与其中,但我对此可能完全错误。如果我拥有我的 CPU,我认为我可以合法地修改其微代码并对其指令进行逆向工程,但通过现有文档(而不是通过逆向工程)更容易理解我的 CPU 的工作原理以及如何更改其微代码。
我知道有一些较小的硬件供应商生产开源 ISA,所以如果我想尝试一下,从这些供应商之一购买 CPU 可能会更好?但我不知道替代供应商的哪种 CPU 最适合这种情况。但实际上,我认为对于我想做的事情来说没有必要购买新的 CPU,因为如果必须的话,我可以使用现有的 CPU 在虚拟机中运行开源 ISA(我是从软件角度而不是硬件角度对微指令和微程序感兴趣)。
例如,假设我想更改在获取和解码后执行“mov”指令时由处理器执行的微代码。我该怎么做呢?
你:
a) 获得计算机工程、计算机科学和/或电气/电子工程硕士学位。
b) 申请 Intel(或 AMD)的工作并获得它
c) 在公司结构中逐步晋升,达到能够影响未来产品设计的职位
请注意,简单的mov指令不会使用微代码,因此您必须首先更改它。
我没有任何编写微代码的经验
微码经过加密并被视为商业秘密;所以“地球上几乎没有人”(我猜可能有 20 名英特尔员工?)有为英特尔 CPU 编写微代码的经验。
我知道有一些较小的硬件供应商生产开源 ISA,所以如果我想尝试一下,从这些供应商之一购买 CPU 可能会更好?
“开源 ISA”主要意味着一家能够花费数百万美元制造自己的芯片的大公司可以节省大约 50 美分的许可费用。
实用的替代方案是使用 FPGA(但成本和性能远不及定制 ASIC)。
在现代 x86 CPU ( https://uops.info/ https://agner.org/optimize/ ) 中,各种操作码在无法通过微码修改的固定功能逻辑中mov解码为单个 uop 。(除了段寄存器,或者从控制或调试寄存器移动到/从控制或调试寄存器。) mov
即使是英特尔也无法在想要缓解 Spectre 时添加任意新指令;一些解码器硬件是固定功能的,直接产生微码,仅针对需要超过 4 个微码的某些操作码间接到微码定序器。
Intel 所做的就是添加了一个新的 MSR(特定于模型的寄存器)。 wrmsr获取 ECX 中的一个数字,并使用该数字来确定要运行的微代码。除了微代码之外,类似于“函数指针”。因此,这个新的 MSR 是微代码更新可以向旧 CPU 添加一些新微代码的一种方式,这样操作系统就可以让它运行并修改 CPU 的内部状态。
因此 ECX=49H ( IA32_PRED_CMD) /wrmsr的作用就像一条新指令,您运行它是为了产生副作用,而不是实际设置一个值。请参阅https://www.intel.com/content/dam/develop/external/us/en/documents/336996-speculative-execution-side-channel-mitigations.pdf
同样,为了允许操作系统通过在某些点清理内部状态来缓解某些 MDS 漏洞,英特尔添加了 的行为verw,而不是添加不同的指令。请参阅https://security.stackexchange.com/questions/210209/what-are-the-new-mds-attacks-and-how-can-they-be-mitigated
部分动机可能是 32 位操作码的编码空间已经满了,但同样可能它已经是微编码指令:超过 4 个微码,因此它是通过间接到微码定序器来处理的。因此,微代码更新可以替换发出的微指令序列。
(64 位模式有相当多未使用的操作码,因为 AMD64 删除了一些过时的指令,例如aaa段寄存器的推送/弹出。)
我什至不知道英特尔是否公开了他们的微代码列表。
非常不。它不仅没有记录,而且微代码 blob 还经过加密并使用密钥进行签名。
Goldmont 的密钥已经泄露,因此其固件可以被解密并可能被逆向工程,尽管对于格式或位含义的零文档来说这并不容易。但仍然无法将修改后的固件加载到真正的 CPU 中,AFAIK。
| 归档时间: |
|
| 查看次数: |
296 次 |
| 最近记录: |