積極的なスワッピングのためのSwappiness

積極的なスワッピングのためのSwappiness

Ubuntu 14.04 を積極的なスワッピング動作で設定したいと考えています。Linux カーネル 3.14 を使用しています。次のコマンドを使用して swappiness を変更しました。

echo 100 > /proc/sys/vm/swappiness

しかし、ホストの空きメモリがなくなるまで、OS はページをスワップアウトしないようです。OS がアクセスされていないページをスワップ デバイスに積極的にスワップアウトするようにするにはどうすればよいでしょうか。

答え1

RAM を他の用途に使用します。メモリを割り当てているプロセスや、キャッシュを割り当てようとしているディスク IO は、空き領域を確保するためにアイドル ページをスワップに押し出します。swappiness 変数は、システムがアプリケーションを押し出して、代わりにファイルシステム キャッシュに RAM を使用することを優先するようにします。

答え2

なぜそんなことをしたいと思うのですか?

とにかく、それがあなたの望みなら、それが手に入ります:

#include <stdio.h>
#include <sys/sysinfo.h>

fGetMyRAM()
{
    FILE* fStream = popen( "head -n1 /proc/meminfo", "r" );
    std::ostringstream output;
    int iBuffer = 128;

    while( !feof( fStream ) && !ferror( fStream ))
    {
        char cBuffer[iBuffer];
        int iBytesRead = fread( cBuffer, 1, iBuffer, fStream );
        output.write( cBuffer, iBytesRead );
    }
    std::string sResult = output.str();

    std::string sLabel, sRAM;
    std::istringstream iss(sResult);
    iss >> sLabel;
    iss >> sRAM;

    return std::stoi( sRAM );
}

int main()
{
  int iMyRAM = fGetMyRAM();
  int *pMemoryHog;

  while (true)
  {
    //as malloc alocates largest contiguous memory, keep slicing down.
    iMyRam = iMyRam/2;

    printf("%d\n", iMyRam);

    pMemoryHog = (int *) malloc ((iMyRam)*sizeof(void *));

    if (pMemoryHog == 0)
    {
      printf("Yeah! NO MORE MEMORY!\n");
      return 1;
    } // end if out of memory
    strcpy(pMemoryHog, "42");
  } // end while true
  free(pMemoryHog);
  return 0;
} // end main

関連情報