当有足够的可用RAM时使用交换。性能受到影响

我编写了一个简单的程序来研究在Linux(64位Red Hat Enterprise Linux Server 6.4版)上使用大量RAM时的性能。(请忽略内存泄漏。)


#include <sys/time.h>

#include <time.h>

#include <stdio.h>

#include <string.h>

#include <iostream>

#include <vector>

using namespace std;


double getWallTime()

{

  struct timeval time;

  if (gettimeofday(&time, NULL))

  {

    return 0;

  }

  return (double)time.tv_sec + (double)time.tv_usec * .000001;

}



int main()

{

  int *a;

  int n = 1000000000;

  do

  {

    time_t mytime = time(NULL);

    char * time_str = ctime(&mytime);

    time_str[strlen(time_str)-1] = '\0';

    printf("Current Time : %s\n", time_str);

    double start = getWallTime();

    a = new int[n];

    for (int i = 0; i < n; i++)

    {

      a[i] = 1;

    }

    double elapsed = getWallTime()-start;

    cout << elapsed << endl;

    cout << "Allocated." << endl;

  }

  while (1);


  return 0;

}

输出是


Current Time : Tue May  8 11:46:55 2018

3.73667

Allocated.

Current Time : Tue May  8 11:46:59 2018

64.5222

Allocated.

Current Time : Tue May  8 11:48:03 2018

110.419

顶部输出如下。我们可以看到尽管有足够的可用RAM,但是交换增加了。结果是运行时间从3秒猛增到64秒。

我的问题是

  1. 为什么Linux会牺牲性能而不是全部使用缓存的RAM?内存碎片?但是,将数据放在交换上也肯定会造成碎片。

  2. 是否有一种解决方法可以使3秒钟保持一致,直到达到物理RAM大小?


万千封印
浏览 237回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP