Я хочу настроить Ubuntu 14.04 с агрессивным поведением свопинга. Я использую ядро Linux 3.14. Я изменил swappiness использование следующей команды.
echo 100 > /proc/sys/vm/swappiness
Однако ОС, кажется, не выгружает страницы, пока хост не разряжает свободную память. Как я могу сделать ОС для превентивной выгрузки страниц, к которым не получают доступ, к устройству свопинга?
Используйте поршень для чего-то еще. Процессы, выделяющие память или диск IO, пытающийся выделить кэш, выставят неактивные страницы для свопинга для создания места. swappiness переменная просто заставляет систему предпочесть приложениям доставки способствовать поршню использования для кэша файловой системы вместо этого.
Почему Вы когда-либо хотели бы сделать это для?
Так или иначе, если это - то, что Вы хотите, это - то, что Вы получите:
#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