
Ich möchte Ubuntu 14.04 mit aggressivem Swapping-Verhalten konfigurieren. Ich verwende Linux-Kernel 3.14. Ich habe die Swappiness mit dem folgenden Befehl geändert.
echo 100 > /proc/sys/vm/swappiness
Das Betriebssystem scheint jedoch keine Seiten auszulagern, bis der Host nicht mehr genügend freien Speicher hat. Wie kann ich das Betriebssystem dazu bringen, die nicht aufgerufenen Seiten proaktiv auf das Auslagerungsgerät auszulagern?
Antwort1
Verwenden Sie den RAM für etwas anderes. Prozesse, die Speicher oder Festplatten-E/A zuweisen und versuchen, Cache zuzuweisen, verschieben ungenutzte Seiten in den Swap-Speicher, um Platz zu schaffen. Die Variable „swappiness“ bewirkt lediglich, dass das System Anwendungen bevorzugt auslagert und stattdessen RAM für den Dateisystem-Cache verwendet.
Antwort2
Warum würden Sie das jemals tun wollen?
Wie dem auch sei, wenn es das ist, was Sie wollen, dann ist es das, was Sie bekommen:
#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