CPU缓存性能测试的知识点
背景
最近参加了一些开源项目的建设,了解了一些CPU相关的知识点,这些知识点平时工作中接触的比较少,在查阅大量资料和一些实践后,做一个记录。
缓存测试
CPU的缓存性能测试是一项比较重要的能力验证测试。
CPU的缓存系统是计算机硬件中的一种高速缓存,用于提高CPU访问主存储器时的数据读取速度。缓存测试可以帮助开发人员、研究人员和系统管理员评估计算机CPU缓存系统的性能、容量、延迟和带宽等指标,以优化计算机系统的性能和可靠性。通常,缓存测试涉及使用特定的基准测试程序或工具来模拟和测量缓存访问模式和访问性能,以获取有关CPU缓存系统性能的数据和分析结果。
缓存测试会涉及到的测试范围
主要有这么些指标:测量缓存命中率、访问延迟、缓存填充测试等指标。
- 缓存命中率测试
模拟一系列的缓存访问模式,以测量缓存的命中率。
- 访问延迟测试
模拟不同大小和类型的数据集,并测量不同缓存层次的访问延迟。
- 缓存填充测试
准备不同的数据集,通过不同的访问模式来测量缓存的填充效果。
为了设计有效的缓存测试用例,需要考虑多个因素,包括数据集大小、访问模式、缓存大小和架构等。以下是一些常用的缓存测试用例设计方法:
命中率测试用例:可以设计不同的数据集大小、缓存大小和访问模式,以测试缓存的命中率。例如,可以设计一些随机和顺序访问的测试用例,并逐步增加数据集的大小,以测量缓存的命中率。
访问延迟测试用例:可以设计不同的数据集大小和访问模式,以测试缓存的访问延迟。例如,可以设计一些随机和顺序访问的测试用例,并逐步增加数据集的大小,以测量缓存的访问延迟。
缓存填充测试用例:可以设计一些大规模的数据集,并使用不同的访问模式来测试缓存的填充效果。例如,可以设计一些连续和随机的访问模式,并逐步增加数据集的大小,以测试缓存的填充效果。
多级缓存测试用例:可以设计一些测试用例,用于测试不同层级的缓存性能。例如,可以设计一些测试用例,用于测试L1、L2和L3缓存的性能,并分别测量其命中率、访问延迟等指标。
在设计测试用例时,应该考虑测试目的、测试条件和测试结果等因素,并结合实际应用场景来设计测试用例。
测试工具
CacheBench
是一个用于测试计算机CPU缓存性能的基准测试工具。目前它集成在LLCbench
工具里面,
这类工具基本上都是非常古老的工具,LLCbench
甚至连官网都是404.Github
上也没发现他们的身影。
./cachebench -h
Usage: ./cachebench -rwbtsp [-x #] [-m #] [-d #] [-e #]
-r Read benchmark
-w Write benchmark
-b Read/Modify/Write benchmark
-t Use hand tuned versions of the above
-s memset() benchmark
-p memcpy() benchmark
-x Number of measurements between powers of 2.
-m Specify the log2(available physical memory)
-d Number of seconds per iteration
-e Repeat count per cache size
-N Do not flush the cache between problem sizes.
Datatype used is double, 8 bytes.
Defaults if tty: -rwbsp -x1 -m24 -d5 -e2
Defaults if file: -b -x1 -m24 -d5 -e1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
实际进行测试的时候,需要根据测试用例设置不同的参数组合,来确保测试覆盖的足够全。
测试报告
测试报告与我们平时后台的性能测试其实类似的。每组参数进行测试,都会输出一些测试的结果,通过把这些结果绘制成一张图,再通过趋势去感知CPU缓存的性能。