NUMA(全称是Non-Uniform Memory Access,就是非统一内存访问)的诞生背景可以追溯到上世纪90年代,当时计算机系统逐渐向多处理器、多线程、多任务的方向发展,传统的UMA内存设计已经无法满足多处理器系统的需求。在UMA中,所有的处理器共享同一个内存资源,随着处理器数量的增加,内存访问延迟也会增加,这限制了系统的性能扩展。
为了解决这个问题,NUMA设计被提出。它打破了传统的统一内存访问模式,将处理器和内存分组到一起,每个组成为一个节点。每个节点内的处理器可以快速访问自己节点内的内存(Local Access),但需要经过互联访问其他节点的内存(Remote Acess)。这种设计使得多处理器系统的内存访问效率更高,同时也可以更好地扩展。
简单一点,可以把NUMA想象成一个公司,里面有多个部门,每个部门有自己的办公室,大家都要去自己的办公室干活儿。各部门之间虽然有走廊互通,但是走到别的部门可得花点时间。
那么,在这样的公司里,如果一个部门的人要找另一个部门的人,就得先穿过走廊,走到对方的部门。这样一来,找不同部门的人所花的时间就不一样了。也就是说,距离越远,时间越长。
NUMA就是这样,每个处理器都有自己的内存区域,就像每个部门有自己的办公室一样。处理器要访问其他处理器的内存,就得通过一些“走廊”来互通,这样花费的时间就长了。
但是这样的设计也有好处,那就是可以减轻“交通堵塞”。因为每个处理器只能访问自己的内存区域,所以就不会像在统一内存访问