
Quiero configurar Ubuntu 14.04 con un comportamiento de intercambio agresivo. Estoy usando el kernel de Linux 3.14. Modifiqué el intercambio usando el siguiente comando.
echo 100 > /proc/sys/vm/swappiness
Sin embargo, el sistema operativo no parece intercambiar páginas hasta que el host se queda sin memoria libre. ¿Cómo puedo hacer que el sistema operativo intercambie proactivamente las páginas a las que no se accede al dispositivo de intercambio?
Respuesta1
Usa el ariete para otra cosa. Los procesos que asignan memoria o E/S de disco que intentan asignar caché eliminarán las páginas inactivas para intercambiarlas y hacer espacio. La variable de intercambio simplemente hace que el sistema prefiera enviar aplicaciones para favorecer el uso de RAM para el caché del sistema de archivos.
Respuesta2
¿Por qué querrías hacer eso?
De todos modos, si eso es lo que quieres, eso es lo que obtendrás:
#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