Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
X86 什么是辅助/辅助负载?_X86_Cpu Architecture_Page Tables_Micro Architecture_Cpu Mds - Fatal编程技术网

X86 什么是辅助/辅助负载?

X86 什么是辅助/辅助负载?,x86,cpu-architecture,page-tables,micro-architecture,cpu-mds,X86,Cpu Architecture,Page Tables,Micro Architecture,Cpu Mds,RIDL攻击要求攻击者触发页面错误,以便能够从行填充缓冲区读取过时数据。但是,根据研究,也可以使用辅助负载 这个问题九次提到了辅助/辅助负载,但我仍然不知道这样的负载是什么,或者它是如何触发的。这与TLB有关,“导致需要微码辅助的页面漫游” 有人能解释一下什么是辅助/辅助加载吗,最好是用一个已编制好的示例?你在那句话中省略了剩余的部分,这句话解释了为什么页面漫游可能需要微码辅助:“…导致页面漫游需要微码辅助(设置页面表项中的访问位) x86 ISA表示,如果尚未设置页面表条目(PTE)中的“已访

RIDL攻击要求攻击者触发页面错误,以便能够从行填充缓冲区读取过时数据。但是,根据研究,也可以使用辅助负载

这个问题九次提到了辅助/辅助负载,但我仍然不知道这样的负载是什么,或者它是如何触发的。这与TLB有关,“导致需要微码辅助的页面漫游”


有人能解释一下什么是辅助/辅助加载吗,最好是用一个已编制好的示例?

你在那句话中省略了剩余的部分,这句话解释了为什么页面漫游可能需要微码辅助:“…导致页面漫游需要微码辅助(设置页面表项中的访问位)

x86 ISA表示,如果尚未设置页面表条目(PTE)中的“已访问”位,则读取或写入页面将为该映射设置该位。操作系统可以使用该位查看哪些页面实际被定期访问(通过清除已访问位并让硬件重新设置)因此,如果需要释放一些物理页面,他们可以决定分页哪些页面。“脏”位的情况也一样,它让操作系统知道页面是否需要同步回文件或其他备份存储(如果有)(例如,操作系统如何实现
mmap(映射共享,保护写入)

填充TLB条目的页面漫游是纯专用硬件,但使用存储更新这些PTE位的情况非常罕见,因此可以将其留给微码;CPU基本上会捕获到内部微码,并在恢复之前运行它

一些CPU中使用了类似的机制来处理硬连线FPU无法处理的次正常(又称非正常)浮点结果。这使得常见情况(标准化浮点)的延迟更低

相关的:

  • 记录PDE/PTE中的位,包括访问的位
  • -在描述页表条目的3.2中,请注意,访问位和脏位分别在读/写和写时更新

英特尔性能计数器(至少在Skylake上):
Perf stat-e其他辅助。任何

[硬件调用微码辅助的次数,而非 FP辅助。示例包括AD(页面访问脏)和AVX*相关 协助]


从用户空间触发辅助加载:我不确定哪种方法好

msync(msu同步)
在文件备份的映射上应该清除脏位。IDK如果会清除访问的位。大概一个带有MAP\u POPULATE的新文件备份的
mmap
会清除其访问的位,但会被连接到页面表中,这样它就不会出现
\PF
页面错误异常。可能还适用于
MAP\u ANONYMOUS

如果您有多个页面,并且它们的访问位是清晰的,那么您可以对它们进行循环,以便能够执行多个辅助加载,而无需在其间进行昂贵的系统调用


在Linux内核4.12和更高版本上,我怀疑私有匿名页面上的
madvise(MADV_FREE)
会根据描述的方式清除脏位。它还可能清除访问的位,因此加载可能还需要一个辅助IDK

MADV\u FREE
(从Linux 4.5开始)
应用程序不再需要范围内的页面 由addr和len指定。内核因此可以释放这些 页,但释放可能会延迟到内存压力 发生。对于已标记为 已释放但尚未释放,将释放释放操作 如果呼叫者在一次呼叫后写入页面,则取消 无MADV_操作成功,任何陈旧数据(即脏数据、, 未写入的页面)将在内核释放页面时丢失。 但是,对该范围内的页的后续写入将成功 然后内核无法释放这些脏页,因此 调用方总是可以看到刚刚写入的数据 在随后的写操作中,内核可以随时释放页面。 释放范围内的页面后,调用者将看到 在后续页面引用时,按需填写页面为零

MADV_FREE操作只能应用于私有 匿名页面(见mmap(2))。在4.12版之前的Linux中, 在无交换系统上释放页面时 给定的范围会立即释放,而不考虑内存 压力

或者可能
mprotect
,或者可能
mmap(MAP|u FIXED | MAP|u POPULATE)
一个新的匿名页面来替换当前页面。使用MAP|u POPULATE,它应该已经连接到HW页面表中(第一次访问时不需要软页面错误)。脏位应该是清除的,也可能是访问的位


掩码为0的
vpmaskmovd
store(无实际存储)将触发写保护页上的辅助,例如延迟分配的
mmap(PROT_READ | PROT_write)
页,该页仅被读取,未被写入。因此它仍然映射到一个由零组成的共享物理页

它使页面保持干净,因此,如果每个存储都有mask=0以不替换任何元素,则每次在数组上的循环中都可能发生这种情况

这与您想要的访问/脏页表帮助稍有不同。我认为这种帮助用于故障抑制,因为它不需要出现
#PF
页面错误。(页面实际上是写保护的,而不仅仅是干净的。)

IDK,如果这对MDS/RIDL有用


我还没有使用新分配的
mmap(MAP\u POPULATE)
缓冲区中的屏蔽加载进行测试,以查看它们是否接受辅助,但未设置访问位。

RIDL论文使用页面错误触发LFB泄漏,但他们说辅助加载具有相同的效果。您如何确定