Linux   发布时间:2022-04-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了64位Linux性能问题与memset大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我正在调试一个在构建为64位 Linux ELF可执行文件时运行的应用程序,而不是32位Linux ELF可执行文件.使用Rational(IBM)Quantify,我将很多性能差异跟踪到(鼓辊…)memset.奇怪的是,memset在64位可执行文件中花费的时间要长得多. 我甚至可以用一个小而简单的应用程序看到这个: #include <stdlib.h> #include <String.h>
我正在调试一个在构建为64位 Linux ELF可执行文件时运行的应用程序,而不是32位Linux ELF可执行文件.使用Rational(IBM)Quantify,我将很多@L_801_4@差异跟踪到(鼓辊…)memset.奇怪的是,memset在64位可执行文件中花费的时间要长得多. @H_673_16@我甚至可以用一个小而简单的应用程序看到这个:

#include <stdlib.h>
#include <String.h>

#define BUFFER_LENGTH 8000000

int main()
{
  unsigned char* buffer = malloc(BUFFER_LENGTH * sizeof(unsigned char));
  for(int i = 0; i < 10000; i++)
    memset(buffer,BUFFER_LENGTH * sizeof(unsigned char));
}
@H_673_16@我建立如下:
$gcc -m32 -std = gnu99 -g -O3 ms.c

$gcc -m64 -std = gnu99 -g -O3 ms.c

@H_673_16@时间报告的挂钟时间对于-m64构建来说更长,而Quantify确认额外的时间花在memset中.

@H_673_16@到目前为止,我已经在VirtualBox和VMWare中测试过(但不是裸机Linux;我意识到下一步需要做).额外花费的时间似乎从一个系统到下一个系统有所不同.

@H_673_16@这里发生了什么?有没有一个众所周知的问题,我的Google-foo无法发现?

@H_673_16@编辑:我的系统上的反汇编(gcc … -S)@L_801_12@memset作为外部函数调用

@H_673_16@32位:

.LBB2:
    .loc 1 14 0
    movl    $8000000,8(%esp)
    .loc 1 12 0
    addl    $1,%ebx
    .loc 1 14 0
    movl    $0,4(%esp)
    movl    %esi,(%esp)
    call    memset
@H_673_16@64位:

.LBB2:
    .loc 1 14 0
    xorl    %esi,%esi
    movl    $8000000,%edx
    movq    %rbp,%rdi
.LVL1:
    .loc 1 12 0
    addl    $1,%ebx
    .loc 1 14 0
    call    memset
@H_673_16@系统:

@H_673_16@> CentOS 5.7 2.6.18-274.17.1.el5 x86_64
> GCC 4.1.2
> Intel(R)Core(TM)i7-2600K cpu @ 3.40GHz / VirtualBox
(Xeon E5620 @ 2.40GHz / VMWare的差异更大)

解决方法

我相信虚拟化是一个罪魁祸首:我已经自己运行了一些基准测试(大量随机生成,顺序搜索,也是64位),并发现在VirtualBox中的Linux中的代码在Windows下比Windows下更慢.有趣的是,代码没有I / O(除了简单的printf,然后在时间之间),并且使用很少的内存(所有数据都适合L1缓存),所以可以认为你可以排除页表管理和TLB开销. @H_673_16@这真是神秘.我注意到VirtualBox向虚拟机报告SSE 4.1和SSE 4.2指令是不支持的,即使cpu支持它们,并且使用它们的程序在VM中运行正常(!).我没有时间进一步调查这个问题,但你真的应该在一台真正的机器上.不幸的是,我的程序不能运行在32位,所以我无法测试32位模式下的减速.

大佬总结

以上是大佬教程为你收集整理的64位Linux性能问题与memset全部内容,希望文章能够帮你解决64位Linux性能问题与memset所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。