Linux内存之CPU如何访问内存(二)

本文是从宏观上去阐述多个CPU如何访问内存,也就是多CPU访问内存的模型。大家可以先思考一个问题,如果有一块内存,四个CPU,那么这四个CPU如何访问内存?

UMA

Uniform-Memory-Access简称UMA,叫做“均匀存储器存取”,在该模型下,所有的资源(CPU、内存、I/O等)都是共享的。
不管有多少个CPU,访问内存的速度都是一样的,CPU都会连接到一条内存总线上,对内存的访问都要通过内存总线,因为内存是共享的,多个CPU访问同一个块内存就会产生冲突,因此该模型下不能通过增加CPU获取更好的性能,CPU越多竞争就会越多。该模型下CPU的数量应控制在2-4可以获得比较好的性能。
在这里插入图片描述

NUMA

Non-Uniform Memory Access简称NUMA,叫做“非均匀访存模型”。由于UMA模型的限制,大家开始思考如何更好的进行水平扩展支持大型计算机,可以把几十甚至上百个CPU放到一个服务器内。
NUMA模型下,每个CPU都有分配一块内存称为本地内存,如果本地内存用完后,也可以访问其他CPU连接的本地内存称为远地内存,但是访问远地内存的速度会比本地内存慢。NUMA是怎么实现每个CPU分配一个本地内存的呢,我个人认为是每个CPU有一个固定的内存访问的开始位置,当然具体实现可能还是要依赖外部的硬件。现在的linux内核用的都是该模型。
在这里插入图片描述

总结

介绍这两种模型只是为了后面了解linxu内存管理做了个简单的铺垫,可能这两种模型的实现都依赖硬件部分,所以个人认为也没有必要深入了解其中的实现。

Feidao wechat
关注我,一起打怪升级吧!