LINUX.ORG.RU

Очистить кеши в памяти


0

0

free
             total       used       free     shared    buffers     cached
Mem:       1035204     444316     590888          0      13996     305184
-/+ buffers/cache:     125136     910068
Swap:      1572440          0    157244

Более 300 метров в кешах. Всё бы ничего, да вот чем больше кешей, тем
дольше suspend засыпает и просыпает машину. И это раздражает. Я не
понимаю, зачем оно каждый раз старательно запоминает эти кеши? Чтоб я
дольше ждал и сильнее злился?

Вопрос. Есть ли возможность обнулить все эти кеши перед suspend, чтобы
не гонять их на винт и обратно?
anonymous

#include <stdlib.h>
#define MEGABYTES_TO_FREE 300
int main(int argc,char*argv[]){
 int i;
 for(i=0;i<MEGABYTES_TO_FREE;++i){
  calloc(1024,1024);
 }
};

Deleted
()
Ответ на: комментарий от Deleted

Это абсолютно ничего не даёт. По крайней мере, на ядре 2.6.19-rc6. Попробуй сам, если не веришь.

anonymous
()
Ответ на: комментарий от Deleted

:)  В теории все классно, но на практике просто начинает своп расти. Кстати этот пример я несколько усовершенствовал, чтобы память выделялась реально (просто calloc() не приводит к реальному выделению памяти).

Если своп отключить, то только тогда можно сбросить кеши :

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>

#define MEGABYTES_TO_FREE 1000

int main(int argc,char*argv[])
{
 int i, j;
 int *n;
 for(i=0;i<MEGABYTES_TO_FREE;++i)
 {
   n=(int*) calloc(1024,1024);
   for(j=0;j<0x40000;++j)
   {
     *(n+j)=i;
   }
 }

 return 0;
}


-- alxndr


anonymous
()
Ответ на: комментарий от anonymous

Кстати, поведение на разных системах может сильно отличаться. В большинстве случаев ядро просто прибьет прожорливый процесс при нехватке памяти :)

-- alxndr

anonymous
()
Ответ на: комментарий от anonymous

Нормально, сработало. Значительную часть выпихнуло в кеш. В какой-то момент ядро его, возможно, и прибило, но в значительной степени эффект достигнут. Теперь только заставить прогу гибко определять размер выделяемой памяти (в зависимости от её текущего распределения) - и всё будет зашибись.

Как в C легче всего определить те самые "free" и "cached", которые выводит команда free?

anonymous
()
Ответ на: комментарий от anonymous

> Нормально, сработало. Значительную часть выпихнуло в кеш.

В смысле - в своп, а не в кеш.

anonymous
()
Ответ на: комментарий от anonymous

При использовании suspend2 можно в /etc/hibernate/suspend2.conf указать:

ImageSizeLimit nocache

И тогда всё это будет сделано автоматически.

yozhhh ★★★
()

А echo 1 > /proc/sys/vm/drop_caches никак не подойдёт? :)

Cy6erBr4in ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.