最近学习NUMA主要是为了理解绑核、绑内存到指定NUMA上为什么可以提高性能。
诞生背景: 在早期的多处理器系统中,所有cpu都共享同一个物理内存,这种内存访问方式会导致处理器争夺内存带宽,从而影响系统的性能,在这种情况下NUMA架构开始出现。
多处理器系统是指在一个计算机系统中,有两个或多个处理器(CPU)同时工作,这些处理器可以共享一些资源(如内存、磁盘、网络等),以协同完成任务。多处理器系统通常被用于高性能计算、服务器和数据库等领域。
当cpu开始需要访问内存时,它会向内存控制器发送一个内存请求,内存控制器会将请求的数据从内存中读出来并发送回cpu。如果多个cpu同时向内存控制器发送请求,那么内存控制器就需要在它们之间切换,这个过程就会导致内存带宽的争夺。同时内存控制器可能会变得过载,导致cpu需要等待很长的时间才能获得数据,导致系统性能下降。
NUMA(Non-Uniform Memory Access,非一致性内存访问)是一种处理器架构,其中多个处理器和内存控制器通过高速总线连接,每个处理器都有自己的本地内存,但可以访问其他处理器的内存。
NUMA中每个节点都包含一部分CPU、内存、I/O设备等资源,不同的节点之间也可以进行通信和数据传输。
NUMA的工作原理是将物理内存分为多个区域,每个区域由一个或多个处理器和一个或多个内存控制器服务。当一个处理器需要访问另一个处理器的内存时,它会向相应的内存控制器发出请求,内存控制器会将数据发送回请求的处理器。这种方式减少了对总线的竞争和内存访问延迟,提高了性能和可扩展性。
在NUMA架构中,通常情况下,一个节点中的CPU访问本节点的内存的速度要优于访问其他节点内存的速度,这是因为在一个节点内,CPU和内存模块之间的距离较近,访问本地内存的延迟和带宽更低,而访问其他节点的内存则需要通过高速互连通道进行传输,延迟和带宽都会受到一定的影响。
在NUMA架构中,内存被划分为多个区域,每个区域与处理器节点进行绑定。每个处理器节点访问与之绑定的内存区域,可以减少处理器节点之间的内存访问冲突,提高性能。但是在NUMA架构中,一个处理器节点也可以访问其他节点的内存,但是远程访问是通过通道的方式,访问速度不如访问本节点的快。
为了使应用程序更好地利用NUMA架构,需要进行正确的内存分配和优化,以确保数据在处理器之间移动的次数最少,从而提高性能。(这个就是为什么绑核、绑内存可以使测试出的vfw性能更好的原因)