微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我的程序会产生许多页面错误当输入数据大小增加 1 时,缺页次数减少到 1/10什么可能导致这种情况?

如何解决我的程序会产生许多页面错误当输入数据大小增加 1 时,缺页次数减少到 1/10什么可能导致这种情况?

我编写了一个程序来测试排序合并的性能。该程序只是从两个相同大小的数组中读取条目,对条目的键进行排序合并,然后将结果写入一个新数组。每个条目占用 140 个字节。第一个数组的键为偶数 0,2,4,6....,第二个数组的键为奇数 1,3,5,7... 所以合并后的数组包含来自输​​入的所有条目.

我使用谷歌基准来收集数据。

当我将输入数组大小设置为 32410 时,该过程需要 14429772 ns。当我将输入数组大小增加 1 至 32411 时,总运行时间减少一半至 6862094 ns。这个观察结果可以稳定重现。

我试图找出原因,perf stat 给了我以下结果。我看到输入较小的那个会产生 10 倍多的页面错误,并且在 sys cpu 时间上花费了一半时间。我认为页面错误是导致输入较小的程序变慢的根本原因。但我不明白为什么。

cpu 为 Intel(R) Xeon(R) Gold 6126 cpu @ 2.60GHz,操作系统为 Ubuntu 20.04。

谁能提供一些提示?谢谢!

输入大小为 32410

 Performance counter stats for './vert_block_merge_benchmark':

            916.54 msec task-clock                #    0.981 cpus utilized          
                 2      context-switches          #    0.002 K/sec                  
                 0      cpu-migrations            #    0.000 K/sec                  
            275135      page-faults               #    0.300 M/sec   
            ^^^^^^^^^^^^^^^^^^^^^^^               
        3293532138      cycles                    #    3.593 GHz                    
        4520763031      instructions              #    1.37  insn per cycle         
        1019018940      branches                  # 1111.815 M/sec                  
           2147399      branch-misses             #    0.21% of all branches        

       0.934126606 seconds time elapsed

       0.494751000 seconds user
       0.422348000 seconds sys
       ^^^^^^^^^^^^^^

输入大小为 32411

 Performance counter stats for './vert_block_merge_benchmark':

            835.87 msec task-clock                #    0.980 cpus utilized          
                 2      context-switches          #    0.002 K/sec                  
                 0      cpu-migrations            #    0.000 K/sec                  
             21868      page-faults               #    0.026 M/sec   
             ^^^^^^^^^^^^^^^^^               
        2983972313      cycles                    #    3.570 GHz                    
        6322080505      instructions              #    2.12  insn per cycle         
        1508755500      branches                  # 1805.002 M/sec                  
           2364763      branch-misses             #    0.16% of all branches        

       0.853299790 seconds time elapsed

       0.792227000 seconds user
       0.044236000 seconds sys
       ^^^^^^^^^^^^^^^^^^^^

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。