Память как дисковый кэш. [SOLVED]

Доброго здравия! Есть вопрос, касающийся использования свободной памяти как дискового кэша. При сборке программ операционка память кушает просто не по детски. К примеру в процессе установки OpenOffice остается всего 3% свободно от 4 гигов. Но проблемма в другом. Почему после завершения компиляции и установки пакета(ов) не сбрасывается дисковый кэш, хранящийся в памяти?

Re:

Пока приложениям не надо, будет висеть, потом постепенно вытеснится.

а зачем?

а зачем?

чем замеры памяти

чем замеры памяти делаешь?
htop вроде довольно объективно показывает реально(а не кэшем) занятую память

а он какраз про кэш и

а он какраз про кэш и спрашивает.

Замеры как таковые не делаю

Замеры как таковые не делаю ... KInfoCentr так показывает. В других Linux системах я такого не наблюдал, вот и спросил. В общем то меня это не напрягае ... комп перегрузил и все в ажуре. Просто не понятно почему компиляция "нагадила" в память, а за собой "не убирает".

Прикол весь в том, что при пересборке пакетов такого не происходит, хоть весь мир пересобрать ... только при установке новых пакетов. Странное поведение.

chip ~ # free
             total       used       free     shared    buffers     cached
Mem:       4137384    3792436     344948          0     497204    2736964
-/+ buffers/cache:     558268    3579116
Swap:       987988        176     987812

chip ~ #

Правильно заданный вопрос - половина ответа!
Логики и довода — недостаточно. Надо еще зачморить тех, кто думает не так как мы. (South Park)

кэш не "железно" занимает

кэш не "железно" занимает память, как приложения. если памяти не хватает, кэш сбросится сам, то есть реально свободной для приложений памяти free + cached =
2736964 + 344948 = 3081912. Можно провести эксперимент, например

#include <iostream>
#include <vector>
using namespace std;

const int N=100; // size in megabytes

int main()
{
        vector <char> v;
        v.resize(1024 * 1024 * N);
        cout << N << " MBytes used" << endl;
        cin >> v[0];
}

chip ~ # g++ file.cpp
chip ~ # for i in `seq 25` ; do echo $i ; coproc ./a.out ; done

и посмотри что вышло. у меня убрался весь кэш, с большим числом процессов еще и залезло в своп.
ах да, чуть не забыл: kill -KILL `pidof a.out` поможет убить заразу

Можешь канешь сбросить: echo

Можешь канешь сбросить:
echo 1 > /proc/sys/vm/drop_caches

Только это не нужно. Это различиного рода вспомогательные буфферы ядра, которые оно использует для ускорения работы часто использумых операция, типа (и в основном) I/O. Выделение памяти - процесс довольно сложный и дорогостоящий, так что пока нет явной необходимости, ядро их не трогает, а если таковая появляется - сбрасывает сразу большими кусками, т.к., в основном оно не используется, а зарезервированно чисто так. на всякий случай =)

Кэш хорош тем, что эти данные

Кэш хорош тем, что эти данные можно безболезненно выбросить. Когда будет что-то еще читаться с диска - выбросится старое содержимое диска, нужно будет программам - тоже быросится. А сам по себе он никому не мешает.

Да я уже разобрался! После

Да я уже разобрался! После перезагрузки память опять чистая. Меня смутило то, что на бинарных система такого не происходит, ну так и понятно ... они ставят то уже собранное. А для жесткого компила нужно много памяти.

Правильно заданный вопрос - половина ответа!
Логики и довода — недостаточно. Надо еще зачморить тех, кто думает не так как мы. (South Park)

С бинарными системами так же,

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

А я вот недавно раскошелился...

Прикупил 8 Гб памяти (всего-то 90 долларов отдал), прописал в fstab /tmp как tmpfs размером 7 Гб, прописал PORTAGE_TMPDIR="/tmp" - теперь вся компиляция (временные файлы) идёт там. Честное слово, разница по сравнению с предыдущими 2Гб очень заметная. Софт компилится намного быстрее, и при этом система (KDE4 c эффектами) абсолютно не чувствует что процессор-то загружен.

отдельный раздел создавать не

отдельный раздел создавать не стоит, SHM динамически меняет размер при использовании и срезает при неиспользовании, выходит что-то типа того

none /var/tmp/portage tmpfs defaults 0 0

по дефолту tmpfs занимает

по дефолту tmpfs занимает половину памяти. и не больше. он динамически аразмер менять не умеет. просто если там есьт не используемое место то оно отдается памяти программ

___________________________________________
Working on Gentoo for iPAQ hx4700 and Openmoko Neo Freerunner :-)
Если у вас компьютер с Windows, есть два выхода: выбросить компьютер в форточку или выбросить форточки с компьютера

Интересно, а будет эфект на

Интересно, а будет эфект на 4гб? Хочется и колется!
Я что-то не совсем понял что ты в fstab внес. Можно примерчик ...

Правильно заданный вопрос - половина ответа!
Логики и довода — недостаточно. Надо еще зачморить тех, кто думает не так как мы. (South Park)

Будет, для многих пакетов

Будет, для многих пакетов будет и на 1Гб, только нужно учесть, что некоторым требуется очень много места для сборки(опен офис - 5-6Гб)

Openoffice за 1 час

Openoffice собирался в течение около часа на 2,4Гц Core Quad с 4Г памяти (10Г tmppfs) с MAKEOPTS=-j5, но к концу сборки требовал свап довольно часто (совсем, значит, никакой выгоды с точки зрения головок диска).

Потому если надо собрать OOo3 на другой машине с <4G RAM, делаем PORTAGE_TMPDIR=/home/ляля/tmp вместо /tmp.

:}

SMOKEING кури траву меньше.

SMOKEING кури траву меньше. раз ты додумался выставить tmpfs больше размера оперативки. =) это раз
во вторых. кто запрещает tmpfs монитроваьт в /var/tmp/portage?

___________________________________________
Working on Gentoo for iPAQ hx4700 and Openmoko Neo Freerunner :-)
Если у вас компьютер с Windows, есть два выхода: выбросить компьютер в форточку или выбросить форточки с компьютера

alexxy написал(а):раз ты

alexxy написал(а):
раз ты додумался выставить tmpfs больше размера оперативки. =) это раз

А разве нельзя при помощи опции монтирования size в /etc/fstab, равной или несколько меньшей суммы размеров оперативки и свопа, добиться именно этого?

Я Gentoo & Funtoo

А смысл так делать если оно

А смысл так делать если оно тогда в свап будет уходить и толку от такой тмпфс будет не больше чем от любой локальной файловой системы!
Весь вопрос в целесообразности так делать. Или просто типа о крутая фича. Хочу заюзать.
Обезьянка видит обезьянка делает так что ли получается?

___________________________________________
Working on Gentoo for iPAQ hx4700 and Openmoko Neo Freerunner :-)
Если у вас компьютер с Windows, есть два выхода: выбросить компьютер в форточку или выбросить форточки с компьютера

Насколько я понял, в своп

Насколько я понял, в своп система полезет, когда использует оперативку, в любом случае, прирост скорости при компиляции будет, разве что несколько меньший.

Я Gentoo & Funtoo

Неа. Это не верно. Если

Неа. Это не верно. Если полезет в свап то будет только торможение. Плюс может не хватить памяти на сборку чего то большого. Тогка в игру вступит такой механизм как oom_killer и прибьет процессы которые будут пытаться схавать память. Только вот она при этом не освободится так как она занято под хранение исходников. тогда oom_killer начнет забивать все процессы.

___________________________________________
Working on Gentoo for iPAQ hx4700 and Openmoko Neo Freerunner :-)
Если у вас компьютер с Windows, есть два выхода: выбросить компьютер в форточку или выбросить форточки с компьютера

Я не думаю, что tmpfs в свопе

Я не думаю, что tmpfs в свопе работает сильно медленнее, чем другая ФС на винче, а учитывая, что пакеты требующие столько места для сборки собираются не часто можно иметь tmpfs 6Гб и swap+mem-1>6 и жить спокойно.

ты не правильно думаешь =)

ты не правильно думаешь =) tmpfs поверх свапа работает замтно медленне чем рейзер на том же диске. это раз. второй довод был лписан выше про oomkiller.

___________________________________________
Working on Gentoo for iPAQ hx4700 and Openmoko Neo Freerunner :-)
Если у вас компьютер с Windows, есть два выхода: выбросить компьютер в форточку или выбросить форточки с компьютера

Пусть медленнее, все равно

Пусть медленнее, все равно основное время занят проц, а не винч.
Второй довод: почему ж у меня ничего не убивается, "секрет" в моем предыдущем посте.

Если памяти 4Гб, и свопа

Если памяти 4Гб, и свопа столько же, то вполне можно под /tmp задать size=6000M, и всё будет замечательно. Я так делал вообще на 2Гб оперативки.
Для подавляющего большинства приложений сборка будет целиком происходить в оперативке, и лишь если для сборки понадобится много места - то только тогда начнётся использование той части /tmp, что на свопе.

none

none /var/tmp/portage tmpfs nodev,nosuid 0 0
4 гига памяти как раз.
на время компиляции OOo приходится отмонтировать, а то ругается на нехватку места...

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".