LINUX.ORG.RU
ФорумTalks

Линукс ест память


0

3

Несмотря на упорные разговоры о том, что это всего лишь кэширование и не страшно, простейший опыт показывает, что не все так радужно

Был взят компьютер с 64 битным debian testing/sid и 2,5 гигабайтами памяти. Запущен гном-2.30 без всяких наворотов. Для тестирования написал программу, которая последовательно отъедает все больше памяти. Своп отключил. Из 2,5 гигов она смогла съесть 2160 МБ. Остается 356 мб, которые система не отдает.

Хотя еще год назад я сидел на 512 мб памяти, и голый десктоп не жрал бОльшую часть памяти.

//PS: если у кого есть windows на компьютере, поделитесь данными

★★★★★

Последнее исправление: cvs-255 (всего исправлений: 2)

А если запустить 2 копии программ?

ymuv ★★★★
()
Ответ на: комментарий от adriano32

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


int main(void)
{
char *mem = NULL;
unsigned int size, i;
unsigned int bsize = 1048576;


size = 0;
do
{
printf(«Requested %i MB...», size);
mem = malloc(size*bsize);
if (mem)
{
for (i=0; i < size*bsize; i++)
mem = (char)i;
printf(«OK\n»);
free(mem);
}
else
{
printf(«Failed!\n»);
}
size+=50;
}
while(mem != NULL);


}

cvs-255 ★★★★★
() автор топика

>> Остается 356 мб

Почему? Ты бы free -m для начала посмотрел, там точно не 2560 общий объём. Потом просмотри dmesg и учти зарезервированную память.

GotF ★★★★★
()

>Линукс есть память

Linux is memory? Это как? Я всё время думал, что Linux — ядро операционной системы.

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

Берем набор компьютеров, скажем 10 рядов из 10 компьютеров в каждом. Если на компьютере установлен Линукс - то это «1», если не установлен - то «0». Вот и память!

На самом деле, Линукс установлен всего на 3% десктопов не потому, что плохой. Просто дефрагментатор памяти работает хорошо.

stevejobs ★★★★☆
()

>Линукс ест память
А Путин ест детей.

Остается 356 мб, которые система не отдает.

Винда тоже не отдала бы, причём зажала бы ещё больше. Правда, я уже месяцев так 8-9 ей не пользовался...

djambeyshik ★★★★★
()

намедни наблюдали с корешем такую картину:
слака, ванильное ядро, запускаем кеды, юзаем пару дней, потом берем и убиваем все, кроме init, getty и bash. Осталось занятыми ~500MB. Так что подтверждаю - не все так гладко в нашем королевстве, не все...

dib2 ★★★★★
()
Ответ на: комментарий от ZenitharChampion

> Прежде чем пользоваться надо ли что-нибудь менять, числа например?

Меня там смущает шаг в 50 MB. Возможно, следует на последнем этапе его уменьшить, а то погрешность большая.

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

> Возможно, следует на последнем этапе его уменьшить, а то погрешность большая.

Так и сделал. Исправить старт и шаг в коде проще, чем параметры передавать

cvs-255 ★★★★★
() автор топика
Ответ на: комментарий от cvs-255

> Так и сделал. Исправить старт и шаг в коде проще, чем параметры передавать

Я бы просто шаг сделал переменной и в случае фэйла делил шаг на 2, пока не 0.

Sadler ★★★
()
Ответ на: комментарий от cvs-255

/>Почему-то отобразилось неправильно
Потому что нужно использовать лоркод и теги

[[/code]]

Bad_ptr ★★★★★
()
Ответ на: комментарий от cvs-255

> Если так хочешь - ну никто тебе не запрещает. Но у себя я уже померил.

Надо же референсную мерилку :) А то из-за разных линеек спор выйти может.

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

В конце я взял шаг 10МБ. Меньше не вижу смысла, т.к. за то время, пока оно меряется, кто-то другой может скушать сколько-то.

cvs-255 ★★★★★
() автор топика

На винде

на винде твоя прога сегфолтится сразу после первой строчки про 50 RAM в консоли

stevejobs ★★★★☆
()
Ответ на: комментарий от cvs-255

Да, одна строчка неверно отобразилась. где стоит mem=(char)i надо mem [ i ] = (char)i;


Потому что походу лоркод теги работают во всех режимах и

[ i ]
счиатется тегом наклонного текста :-(

Bad_ptr ★★★★★
()
Ответ на: На винде от stevejobs

>прога сегфолтится

Да, одна строчка неверно отобразилась. где стоит mem=(char)i надо mem [ i ] = (char)i;

cvs-255 ★★★★★
() автор топика

На винде (2)

Ноутбук, Win7 max x64, 8Gb RAM

4 гига памяти свободно

Microsoft Windows [Version 6.1.7601]
(c) Корпорация Майкрософт (Microsoft Corp.), 2009. Все права защищены.

C:\Users\Oleg>cd C:\Users\Oleg\Documents\Visual Studio 2010\Projects\eatallram\Release

C:\Users\Oleg\Documents\Visual Studio 2010\Projects\eatallram\Release>dir
 Том в устройстве C не имеет метки.
 Серийный номер тома: 78B2-EB01

 Содержимое папки C:\Users\Oleg\Documents\Visual Studio 2010\Projects\eatallram\
Release

01.10.2011  20:00    <DIR>          .
01.10.2011  20:00    <DIR>          ..
01.10.2011  20:00             7 168 eatallram.exe
01.10.2011  20:00           207 872 eatallram.pdb
               2 файлов        215 040 байт
               2 папок  14 705 369 088 байт свободно

C:\Users\Oleg\Documents\Visual Studio 2010\Projects\eatallram\Release>eatallram.
exe
Requested 0 MB...OK
Requested 50 MB...OK
Requested 100 MB...OK
Requested 150 MB...OK
Requested 200 MB...OK
Requested 250 MB...OK
Requested 300 MB...OK
Requested 350 MB...OK
Requested 400 MB...OK
Requested 450 MB...OK
Requested 500 MB...OK
Requested 550 MB...OK
Requested 600 MB...OK
Requested 650 MB...OK
Requested 700 MB...OK
Requested 750 MB...OK
Requested 800 MB...OK
Requested 850 MB...OK
Requested 900 MB...OK
Requested 950 MB...OK
Requested 1000 MB...OK
Requested 1050 MB...OK
Requested 1100 MB...OK
Requested 1150 MB...OK
Requested 1200 MB...OK
Requested 1250 MB...OK
Requested 1300 MB...OK
Requested 1350 MB...OK
Requested 1400 MB...OK
Requested 1450 MB...OK
Requested 1500 MB...OK
Requested 1550 MB...OK
Requested 1600 MB...OK
Requested 1650 MB...Failed!

C:\Users\Oleg\Documents\Visual Studio 2010\Projects\eatallram\Release>

Ваши выводы, дорогой ЛОР?

stevejobs ★★★★☆
()
Ответ на: На винде (2) от stevejobs

Компилировано в 64битный exe?

x3al ★★★★★
()
Ответ на: На винде (2) от stevejobs

> 8Gb RAM

4 гига памяти свободно

А попробуйте, пожалуйста, на голой системе, без лишнего софта (например, из безопасного режима сразу после перезагрузки). Это будет интереснее.

Sadler ★★★
()
Ответ на: комментарий от Reset

> Программа собрана для 32х битов.

Потому и не может выделить. Пересобирайте.

Sadler ★★★
()
Ответ на: На винде (2) от stevejobs

Кхм. 4 Гб RAM, семёрка x64, запущена тонна софта, включая виртуалку и жирнолис. Собирал 32битным mingw. Фейл на 1850 MB. Впрочем, своп не отключал.

x3al ★★★★★
()
Ответ на: комментарий от Reset

Она собрана под x64.

Еще раз перепроверил, создал 64-битную платформу без копирования настроек, перебилдал.

Один черт, вываливается на 1750.

Могу выслать проект или экзешник.

stevejobs ★★★★☆
()
Ответ на: комментарий от Sadler

чем интереснее-то, если свободно не меньше 4х гигов, а хавает он около двух?

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

MSVS головного мозга? Собери из командной строки mingw64, msvs или winsdk.

x3al ★★★★★
()
Ответ на: комментарий от Reset

Ух, всё правильно, он собирает ее не в корень проекта, как в обычном конфиге, а в корень/x64/release. Да, действительно, хавает всё, что дадут.

stevejobs ★★★★☆
()

Эксперимент в консоли показал, что не отдаются 176 МБ. При этом запущена samba, vsftpd, sshd.

cvs-255 ★★★★★
() автор топика

Breaking news!

на винде он выдает бОльше памяти, чем есть физически.

При этом формально (по показаниям «моего компьютера») файл подкачки отключен на всех дисках.

До 8600 мегабайт память выделялась чем дальше - тем медленней, потом скорость резко скакнула на диапазоне 8600-~9600, потом снова начала выделяться медленно. Я дождался до 12000 и отменил.

Напомню, безопасный режим, 8гигов рамы, 64-битная максимальная, 64-битный экзешник с не-дебажным профилем сборки.

stevejobs ★★★★☆
()

Я несколько модифицировал программу, мой вариант:

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


int main(void)
{
char *old, *mem = NULL;
unsigned int size, i;
unsigned int bsize = 1024 * 1024;

size = bsize;
do
{
	printf("Requested %i MB...", size/bsize);
	old = mem;
	mem = realloc(old, size);
	if (mem)
	{
	  memset(mem + size - bsize, (int)size/bsize, bsize);
	  printf("OK\n");
	}
	else
	{
	   printf("Failed!\n");
	}
	size+=bsize;
} while(mem != NULL);
free(old);

}
Резульат зауска:
Requested 1915 MB...OK
Requested 1916 MB...OK
Requested 1917 MB...OK
Requested 1918 MB...OK
Requested 1919 MB...Failed!
Не понятно во что уперлась программа, наверное все-таки в нехватку памяти:
andrey@power-debian:~/tmp$ free -m
             total       used       free     shared    buffers     cached
Mem:          1513        211       1301          0          1         43
-/+ buffers/cache:        166       1346
Swap:         1023        243        780

goose
()

в общем тест не объективен. в моей

Linux diblaptop 3.0.0-12-generic #19-Ubuntu SMP Fri Sep 23 21:23:39 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux

показывает:

dib@diblaptop:/tmp$ free -m
             total       used       free     shared    buffers     cached
Mem:          7740       5325       2415          0        500       2453
-/+ buffers/cache:       2371       5369
Swap:            0          0          0
dib@diblaptop:/tmp$ time ./a.out 
Requested 0 MB...OK
Requested 50 MB...OK
Requested 100 MB...OK
Requested 150 MB...OK
Requested 200 MB...OK
Requested 250 MB...OK
Requested 300 MB...OK
Requested 350 MB...OK
Requested 400 MB...OK
....
прошло ~40 минут
....
Requested 8000 MB...OK
Requested 8050 MB...OK
^C

real    48m51.225s
user    44m51.228s
sys     3m32.897s

долго. просто жесть как медленно.

кстати, на восьмом гиге, вот так:

dib@diblaptop:~$ free -m
             total       used       free     shared    buffers     cached
Mem:          7740       7415        325          0        214       1035
-/+ buffers/cache:       6165       1575
Swap:            0          0          0
dib@diblaptop:~$ free -m
             total       used       free     shared    buffers     cached
Mem:          7740       3792       3948          0        214        986
-/+ buffers/cache:       2591       5149
Swap:            0          0          0

работает сжатие страниц?

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

>слака, ванильное ядро, запускаем кеды, юзаем пару дней, потом берем и убиваем все, кроме init, getty и bash. Осталось занятыми ~500MB.

Такое проявляется, например, после сборки чего-то (много процессов запускаются и отрабатывают). Так и не понял, что это, но, возможно, какой-то кэш, но не дисковый. Кстати, Linux выгружает ненужные so? Если нет, то они могут занимать память.

gentoo_root ★★★★★
()
Ответ на: комментарий от cvs-255

заполнять все равно придется одинаковыми блоками, 8ГБ рандома сгенерить - это очень приличное время.

попробую по 50МБ.

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

> долго. просто жесть как медленно.

ну так O(n^2)

cvs-255 ★★★★★
() автор топика
Ответ на: комментарий от dib2

Можешь попробовать переставлять каждый раз несколько байт, чтобы он не мог сжимать.

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