cpu cacheline对性能影响实验

简介: 一、cacheline概念 cpu利用cache和内存之间交换数据的最小粒度不是字节,而是称为cacheline的一块固定大小的区域,详细信息参见wiki文档:http://en.

一、cacheline概念

cpu利用cache和内存之间交换数据的最小粒度不是字节,而是称为cacheline的一块固定大小的区域,详细信息参见wiki文档:
http://en.wikipedia.org/wiki/CPU_cache#Cache_entry_structure

二、cacheline查看方法

前文《 cpu cache信息查看  》中介绍了查看cacheline大小的方法:
cat /sys/devices/system/cpu/cpu0/cache/index0/coherency_line_size 
64

三、cacheline对性能的影响

关于cpu cache对性能的影响,  Igor Ostrovsky有一篇精彩的文章:
http://igoro.com/archive/gallery-of-processor-cache-effects/

本文尝试验证上文中的观点,编写了下面的例子程序:
cacheline.c

点击(此处)折叠或打开

  1. #include stdio.h>
  2. #include string.h>

  3. #define BUF_SIZE 8388608
  4. #define LOOPS 16

  5. char arr[BUF_SIZE] __attribute__((__aligned__((64)),__section__(".data.cacheline_aligned"))) ;

  6. int main(int argc, char **argv)
  7. {
  8.   int step = atoi(argv[1]);
  9.   int i = 0;
  10.   int j = 0;
  11.   int iter = 0;
  12.   
  13.   for (i = 0; i LOOPS; i++){
  14.     for (j = 0; j BUF_SIZE; j += step){
  15.       iter++;
  16.       arr[j] = 3;
  17.     }
  18.   }

  19.   printf("%d\n", iter);
  20.   return 0;
  21. }

编译一下: gcc -O0 -o cacheline cacheline.c

下面开始看看cacheline对程序性能的影响。按照cacheline的定义,我们可以推测step从1到64,加载cacheline的次数是一致的。而继续增大step,加载cacheline的次数就会变少。

看看结果:
perf stat -e L1-dcache-loads-misses -e L1-dcache-load -e cycles ./cacheline 1
134217728


 Performance counter stats for './cacheline 1':


         2,352,446 L1-dcache-loads-misses    #    0.35% of all L1-dcache hits  
       673,338,076 L1-dcache-load                                              
     1,041,209,909 cycles                    #    0.000 GHz                    


       0.433421077 seconds time elapsed


perf stat -e L1-dcache-loads-misses -e L1-dcache-load -e cycles ./cacheline 2
67108864


 Performance counter stats for './cacheline 2':


         2,326,564 L1-dcache-loads-misses    #    0.69% of all L1-dcache hits  
       337,577,957 L1-dcache-load                                              
       524,684,462 cycles                    #    0.000 GHz                    


       0.254773008 seconds time elapsed


perf stat -e L1-dcache-loads-misses -e L1-dcache-load -e cycles ./cacheline 4
33554432


 Performance counter stats for './cacheline 4':


         2,309,318 L1-dcache-loads-misses    #    1.36% of all L1-dcache hits  
       169,703,215 L1-dcache-load                                              
       255,623,966 cycles                    #    0.000 GHz                    


       0.154640897 seconds time elapsed


perf stat -e L1-dcache-loads-misses -e L1-dcache-load -e cycles ./cacheline 64
2097152


 Performance counter stats for './cacheline 64':


         2,292,510 L1-dcache-loads-misses    #   18.64% of all L1-dcache hits  
        12,299,250 L1-dcache-load                                              
        55,040,163 cycles                    #    0.000 GHz                    


       0.034769960 seconds time elapsed

可以看出,
  i)step从1调整到64,L1 cache misses非常接近
  ii) 程序执行时间不光取决于cache miss,还与很多因素有关(比如cpu clocks)

继续增大step:
perf stat -e L1-dcache-loads-misses -e L1-dcache-load -e cycles ./cacheline 128
1048576


 Performance counter stats for './cacheline 128':


         1,308,532 L1-dcache-loads-misses    #   18.56% of all L1-dcache hits  
         7,048,673 L1-dcache-load                                              
        38,773,055 cycles                    #    0.000 GHz                    


       0.024586981 seconds time elapsed


perf stat -e L1-dcache-loads-misses -e L1-dcache-load -e cycles ./cacheline 1024
131072


 Performance counter stats for './cacheline 1024':


           442,176 L1-dcache-loads-misses    #   18.21% of all L1-dcache hits  
         2,427,631 L1-dcache-load                                              
        17,618,913 cycles                    #    0.000 GHz                    


       0.011433279 seconds time elapsed
L1 cache miss有了非常明显的下降。

目录
相关文章
|
7月前
|
移动开发 运维 监控
掌握Linux运维利器:查看CPU和内存占用,轻松解决性能问题!
掌握Linux运维利器:查看CPU和内存占用,轻松解决性能问题!
288 0
|
算法 编译器
【计算机架构】响应时间和吞吐量 | 相对性能 | 计算 CPU 时间 | 指令技术与 CPI | T=CC/CR, CC=IC*CPI
【计算机架构】响应时间和吞吐量 | 相对性能 | 计算 CPU 时间 | 指令技术与 CPI | T=CC/CR, CC=IC*CPI
1193 1
|
24天前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
58 7
|
1月前
|
存储 缓存
CPU性能
【10月更文挑战第30天】CPU性能
67 3
|
2月前
|
存储 缓存 监控
如何提高服务器CPU性能?
如何提高服务器CPU性能?
248 3
|
4月前
|
弹性计算 固态存储 ice
阿里云服务器2核16G、4核32G、8核64G配置不同ECS实例规格收费标准和CPU性能差异
2024年阿里云提供2核16G、4核32G及8核64G等多种服务器配置,用户可根据需求选择不同实例规格如内存型r8i、通用算力型u1等。以华北2(北京)为例,2核16G月费从286.2至385.99元不等;4核32G为572.4至771.97元;8核64G则在1144.8至1543.94元区间。公网带宽与系统盘(如ESSD云盘)亦有多样化选择与价格方案。长期租赁可享折扣,具体价格请访问阿里云官网确认。
172 7
|
3月前
|
编解码 算法 测试技术
CPU性能调节【ChatGPT】
CPU性能调节【ChatGPT】
|
5月前
|
缓存 弹性计算 数据库
阿里云2核4G服务器支持多少人在线?程序效率、并发数、内存CPU性能、公网带宽多因素
2核4G云服务器支持的在线人数取决于多种因素:应用效率、并发数、内存、CPU、带宽、数据库性能、缓存策略、CDN和OSS使用,以及用户行为和系统优化。阿里云的ECS u1实例2核4G配置,适合轻量级应用,实际并发量需结合具体业务测试。
99 0
阿里云2核4G服务器支持多少人在线?程序效率、并发数、内存CPU性能、公网带宽多因素
|
6月前
汇编语言(第四版) 实验一 查看CPU和内存,用机器指令和汇编指令编程
汇编语言(第四版) 实验一 查看CPU和内存,用机器指令和汇编指令编程
105 1
|
5月前
|
机器学习/深度学习 TensorFlow API
Keras是一个高层神经网络API,由Python编写,并能够在TensorFlow、Theano或CNTK之上运行。Keras的设计初衷是支持快速实验,能够用最少的代码实现想法,并且能够方便地在CPU和GPU上运行。
Keras是一个高层神经网络API,由Python编写,并能够在TensorFlow、Theano或CNTK之上运行。Keras的设计初衷是支持快速实验,能够用最少的代码实现想法,并且能够方便地在CPU和GPU上运行。

相关实验场景

更多