上篇写到传统的计算机系统架构对性能的影响,有朋友提到不容易理解。其实我只是想起到提纲掣领的作用,每个主题都是个很宏大的,不是三言两语,随笔这样性质文章能够覆盖的。
随着现代服务器主板上挂载的CPU越来越多,一个很显然的限制,就是FSB和北桥芯片的带宽跟不上,于是NUMA架构被提出。NUMA的几个特点,就是为了解决FSB和北桥芯片的瓶颈问题:
1、内存控制器被集成到芯片中,每颗芯片都直接挂接本地主存。相当于FSB和北桥芯片直接被集成到芯片中,也就不存在瓶颈了。
2、访问其他芯片的本地内存,需要通过快速总线,英特尔的QPI/UPI或者AMD的IF总线。作用相当于传统的FSB,但不一样的是,只有跨芯片访问远程的主存才需要。如果访问本地主存,那是相当快的,完全不需要。
CPU和CPU之间的高速通道,不是点对点完全相等。比如4颗CPU之间,距离可能是10/16/22/28。
在上篇中提到的两个场景,线程切换和原子操作,在NUMA架构中更加复杂,特别是在CPU之间进行迁移,比同一CPU内部的核间进行迁移,要付出更多的性能损失,原理却是一样的。
到此为止,CPU和内存对服务性能影响的要点也提到差不多,基本都归结到两点:1、核间迁移;2、缓存一致性协议。
除此之外,还要再提到一个有趣技术:分支预测。这项技术在日常开发中,极少用到,只有在性能敏感的程序会考虑这些。在linux内核中,经常会看到likely和unlikely。这两个函数的底层原理就是分支预测技术,同样涉及到高速缓存的预加载。
掌握好计算机组成的基础原理,在后续更宏大的架构设计,已经为你提供了大部分的答案