在 ubuntu 中清除 L1、L2 和 L3 缓存所需的命令是什么?
可以利用 shell 来完成这个吗?或者我需要更高级的语言?
答案1
L1、L2 和 L3 缓存是用于描述 CPU 和芯片组内部使用的缓存的术语。它们对系统是透明的,也就是说,缓存中是否存在数据永远不会对程序执行或任何操作返回的数据产生任何可观察到的副作用。因此也没有办法清除它们,即使有,这样做也不会产生任何可观察到的影响。
这些缓存是 CPU 运行不可或缺的部分。根据正在进行的操作,其内容每秒可能刷新数百万次。
答案2
在用户级别上完全有效地做到这一点是不可能的。非核心中的性能计数器可用于导出用户可以分配和测试的任何地址范围的物理地址到 L3 切片 (CBos) 的映射,但这只会告诉您正在使用哪个 CBo,而不会告诉您正在使用该切片中的哪个一致性类。L3 切片的大小表明映射很简单,但我不知道有任何演示可以确认内部映射。
从总体上看,在 Xeon E5 v3 系统上,读取比 L3 缓存大小大 4 倍的数组将清除 L1、L2 和 L3 缓存中几乎 100% 的先前数据。这只需要进程绑定(例如 Linux 系统上的“taskset”或“numactl --physcpubind”)。