内存和IO带宽之间有什么区别?我们如何测量它们?

内存和IO带宽之间有什么区别?我们如何测量它们?,io,x86,performance-testing,bandwidth,bus,Io,X86,Performance Testing,Bandwidth,Bus,内存和io带宽之间的区别是什么?您如何测量它们 我有这么多的假设,请原谅这两部分问题的冗长 这些问题的灵感来自:哈迪在哪里解释: CPU的数据请求不是用来测量内存带宽,而是用来测量i/o带宽 我想知道mem/io带宽之间的差异是否类似于DMA(直接内存寻址)和MMIO(内存映射io)之间的差异,或者两者的带宽是否都是io带宽 我试图用这张图片来帮助形象化: (希望我有这个权利)在x86中有两个地址空间:内存和IO。IO带宽是cpu(或dma控制器)到IO设备之间的度量值,然后内存带宽是cpu和

内存和io带宽之间的区别是什么?您如何测量它们

我有这么多的假设,请原谅这两部分问题的冗长

这些问题的灵感来自:哈迪在哪里解释:

CPU的数据请求不是用来测量内存带宽,而是用来测量i/o带宽

我想知道mem/io带宽之间的差异是否类似于DMA(直接内存寻址)和MMIO(内存映射io)之间的差异,或者两者的带宽是否都是io带宽

我试图用这张图片来帮助形象化:


(希望我有这个权利)在x86中有两个地址空间:内存和IO。IO带宽是cpu(或dma控制器)到IO设备之间的度量值,然后内存带宽是cpu和主内存之间的度量值吗?这两种情况下的所有数据都通过内存总线运行?为了清楚起见,我们都同意内存总线的定义是地址和数据总线的结合?如果是这样的话,那部分图像可能有点误导

如果我们可以使用“英特尔性能计数器监视器”(PCM)通过PCM iio程序测量IO带宽,我们将如何测量内存带宽?现在我想知道,如果通过相同的电线,为什么它们会不同?除非我把这一切都搞错了。很多测试代码的github页面有点让人不知所措:


谢谢

CPU的
数据请求
事件无法用于测量内存带宽,原因如下:

  • 并非来自IIO控制器的所有入站内存请求都由内存控制器提供服务,因为请求也可以由LLC(或在多个套接字的情况下由LLC)提供服务。但是,请注意,在不支持DDIO的英特尔处理器上,IO内存读取请求可能会导致推测性读取请求与LLC查找并行发送到内存
  • CPU的
    DATA\u REQ\u事件有许多子事件。pcm iio工具测量的入站内存指标不包括所有类型的内存请求。具体来说,它们不包括原子内存读写和IOMMU内存请求,这可能会消耗内存带宽
  • 某些子事件统计非内存请求。例如,存在点对点请求(从一个IIO到另一个IIO)
  • IO设备可能希望访问与所连接节点不同的NUMA节点上的内存。在这种情况下,它将消耗不同NUMA节点上的内存带宽
现在我意识到你引用的说法有点模棱两可;我不记得我是专门谈论pcm iio测量的指标还是一般事件,或者“memory bandwdith”是指总内存带宽还是仅指连接到iio的IO设备消耗的部分。尽管出于上述原因,以上述任何方式解释的陈述都是正确的

pcm iio工具仅测量IO频带宽度。改为使用pcm内存工具测量内存带宽,该工具利用IMCs的性能事件。在我看来,没有一个PCM工具可以测量IO设备消耗的内存带宽,这需要使用CBox事件


有关uncore性能事件的主要信息来源是英特尔uncore手册。在这些手册的介绍章节中,您会发现一些漂亮的数字,显示了处理器的不同单元是如何相互连接的。

是的,对于DRAM本身或CPU内存连接,内存带宽通常是理论上的最大值。I/O带宽通常指的是特定的I/O设备,但请确保您可以讨论将CPU连接到外部世界的所有PCIe链路上可能的聚合I/O带宽,例如从多个视频卡、100G NIC和/或SSD。在现代x86上,内存控制器内置于CPU中,因此从I/O到DRAM没有绕过CPU的侧通道。不过DMA绕过了任何特定的CPU核心。如果没有错的话,这幅图就是误导。链接是:L3->Ring bus/Mesh->(Home Agent->)iMC for CPU=>DRAM,PCI设备->PCIe总线->系统代理->Ring bus/Mesh->(Home Agent->)DRAM for DMA和L3(假设缓存代理是uncore外部的统一路径,当然在遍历此路径时不会缓存IO)->环形总线/Mesh->系统代理->PCIe总线->用于IO的PCI设备(内存和端口映射)。在NUMA体系结构中,“环总线/网格”段必须扩展,以包括套接字之间的最终QPI/UPI链路。“在x86中有两个地址空间:内存和IO”。是的,但不是以通常描述的方式。有一个传统的“IO地址空间”,由64Ki个单独可寻址的8位“IO端口”组成,并通过特殊的IO指令[输入、输入、输出、输出]专门访问。另一个地址空间是“物理地址空间”,它被细分为允许访问“常规”内存和不同地址范围内的“内存映射IO”。(为了使其更加混乱,在一些工程学科中,每个离开芯片的信号都被视为“IO”,包括DRAM访问。)