你好,我是庄振运。
上一讲我们讨论了关于 CPU 的性能指标和分析。CPU 和内存是和程序性能最相关的两个领域;那么这一讲,我们就来讨论和内存相关的性能指标和性能分析的工具。
内存方面的性能指标,主要有缓存命中率、缓存一致性、内存带宽、内存延迟、内存的使用大小及碎片、内存的分配和回收速度等,接下来我会逐一进行介绍。现代很多 CPU 都是 NUMA 架构的,所以我也会介绍 NUMA 的影响和常用的工具。
缓存和缓存命中率
我们先看看缓存,也就是 Cache。
缓存是 CPU 与内存之间的临时数据交换器,是为了解决两种速度不匹配的矛盾而设计的。这个矛盾就是 CPU 运行处理速度与内存读写速度不匹配的矛盾。CPU 处理指令的速度,比内存的速度快得多了,有百倍的差别,这一点我们已经在上一讲讨论过。
缓存的概念极为重要。不止是 CPU,缓存的策略也用在计算机和互联网服务中很多其他的地方,比如外部存储、文件系统,以及程序设计上。有人甚至开玩笑说,计算机的各种技术说到底就是三种——Cache(缓存)、Hash(哈希处理)和 Trash(资源回收)。这种说法当然有点偏颇,但你也能从中看到缓存技术的重要性。
现在回到 CPU 缓存的讨论上来。
我们前面也讲了,随着多核 CPU 的发展,CPU 缓存通常分成了三个级别:L1、L2、L3。一般而言,每个核上都有 L1 和 L2 缓存。L1 缓存其实分成两部分:一个用于存数据,也就是 L1d Cache(Data Cache),另外一个用于存指令,L1i Cache(Instruction Cache)。