Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > свободная память Linux-a


Автор: ssds 20.4.2005, 16:18
Хотел бы спросить у того кто профессионально разбирается в ядре Линукса вопрос, который не дает покоя последнее время.
Вот вычитал: "В ядре 2.4 (и видимо 2.6 -мое примечание) исповедуется Сановский принцип: свободная память - потерянная память. Т.е. из вывода команды free: размер свободной памяти явлется суммой free+cached".
Сached - это память страничного кэша.
Рассмотрим ситуацию - программа работает с кучей файлов, постепенно открывая одни и закрывая другие, уже не нужные. Файлы засасываются в память, это как раз в страничный кэш. После закрытия файла - в кэше еще остаются страницы с этим файлом. Так вот можно ли считать что эти страницы не мешают дальнейшей работе?? Из утверждения про Сановский принцип по сути эти страницы -свободные, но ведь ядро выполнит какие то действия что бы использовать под другие задачи?
В ядре употребляется "reclaim pages" -типа очищения-восстановления страниц - вроде это связанно именно с теми действиями.
Имеет ли смысл "затачивая" ядро под упомянутую программу, ускорить каким либо образом очистку страничного кэша? (при большой нагрузке программы -памяти не хватает)

И еще, в файле /proc/meminfo помимо значения Сached есть Active и Inactive. Если прочитать большой файл и закрыть его, то его кэш останется -это видно по значеню Cached и в то же время параметр "Active" будет показывать что страницы оставшиеся от файла - в списке активных.
Вообще про этот параметр "Active" пишут что это есть память которая используется наиболее часто и будет очищена-восстановлена только при крайней необходимости.
Возвращаясь к моему вопросу -может стоит делать эти страницы неактивными- чтобы они быстреевосстанавливались..?

Автор: GrayCardinal 21.4.2005, 15:11
Цитата
Так вот можно ли считать что эти страницы не мешают дальнейшей работе?

ИМХО, можно и нужно.

Цитата
но ведь ядро выполнит какие то действия что бы использовать под другие задачи?

Однозначно smile Проверку на занятость как минимум. Но на скорости работы это вообще не скажется. Никак.

Цитата
ускорить каким либо образом очистку страничного кэша? (при большой нагрузке программы -памяти не хватает)

"Памяти не хватает". Ошибка такая вылазит что-ли ? Если кэш большой, а размер свободной памяти 1-2 мб. Это обычная ситуация. Смысла, имхо не имеет. Хотя не знаю. Я для "чистки" пользовал bzero(malloc (100000000), 100000000); - результат очень не понравился. Жуткий тормоз (потом, после чистки уже)

Автор: Ni@m 3.5.2005, 18:45
Принцип линуксового ядра - оставлять кєшированные файлы в памяти как можно дольше. Естественно, если память понадобится под процессы - она освободится. Но когда файл закеширован, в следующий раз к нему обратится будет гораздо быстрее.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)