英特尔有时使用MSR,有时使用“内部”PCIe设备向操作系统公开配置选项。我找不到任何资源来描述使用PCIe设备的优势和原因。因为MSR空间是2^32,所以应该有足够的空间来承载配置空间。
例如,第三代Xeon6346拥有100多个内部PCIe设备,这些设备公开了不同的配置选项。
发布于 2022-10-17 16:25:33
MSR空间的缺点是不能从用户模式直接访问它(即RDMSR和WRMSR指令只能在内核模式下执行)。Linux中的/dev/cpu/*/msr接口只允许为每个内核调用读取一个MSR,在大多数情况下需要一个处理器间中断,以便内核在目标逻辑处理器上执行RDMSR/WRMSR指令。这将导致数千个周期的平均管理费用,以及每读取一个管理系统更新系统的数千条指令。在2套接字服务器中读取所有核心和非核心计数器可能需要超过1000个内核调用--数百万条指令和毫秒的挂钟时间。(我有时使用来自https://github.com/LLNL/msr-safe的"msr_batch“接口来减少这种开销,但我只在几个测试系统上安装了它。)
通过在/dev/mem上执行mmap(),可以从用户模式(具有特权访问)直接访问PCI配置空间。(不推荐初学者使用!)这降低了每个32位非缓存负载所需的200-400个周期的开销(交叉套接字访问更高)。另一方面,PCI配置空间由4KiB块组成,因此不可能使用虚拟内存系统在4KiB块中提供细粒度访问控制。
从Ice开始,Intel已经将一些非核心计数器从PCI配置空间移到内存映射的PCI条中。这为组织和访问控制提供了更大的灵活性,而且作为一个很好的副作用,每个计数器也可以通过一个64位读取而不是两个32位读取来读取。一个缺点是配置要难理解得多。与PCI配置空间类似,您可以使用错误对齐的负载或存储使系统崩溃,因此这需要非常仔细的编码和测试。
在硬件层面,非本地MSR访问(注1)、PCI配置空间访问和PCIe BAR访问几乎肯定都被转换为(无文档的)低级别消息传递系统上的事务--因此,这对设计性能监视单元的工程师可能没有太大影响。(但对于那些试图访问计数器的人来说,这无疑是一种痛苦-目前英特尔处理器上需要4种不同的机制。还有一些PCIe配置空间设备给出了特定于核心的结果。至少可以说,这违反了直觉。)
注1:“本地”MSR访问可能不需要离开core+private缓存块。用户模式的RDPMC指令读取RDMSR指令所能读取的相同(核心-本地)性能计数器,但在非常低的延迟下读取--我记得在Skylake Xeon上RDPMC在25个核心周期范围内的数字。我还没有测试RDMSR指令(在内核模式下,在PMC地址上操作)是否以相同的成本执行。
发布于 2022-10-17 15:43:43
它可能取决于耦合性、标准化和易用性。
PCIe器件是一个分立的硅单元,可以独立开发和测试。
MSR是用微码实现的,因此它们更适合与核心紧密耦合的设备。
要使用PCIe,必须对其进行枚举和配置。可以立即使用MSRs。
作为ISA的一部分的特性(即SDM手册中的文档)是用MSR实现的。基本设备(即集成存储器控制器)是PCIe设备,因为相同的处理器体系结构可以提供一组新的设备。
我的经验法则是:如果这个函数是标准化的(不需要将来替换),有一个简单的接口,并且它与核心紧密耦合,那么就使用了MSR。
https://stackoverflow.com/questions/74082159
复制相似问题