| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 | ||||||
ИМХО, можно и нужно.
Однозначно
"Памяти не хватает". Ошибка такая вылазит что-ли ? Если кэш большой, а размер свободной памяти 1-2 мб. Это обычная ситуация. Смысла, имхо не имеет. Хотя не знаю. Я для "чистки" пользовал bzero(malloc (100000000), 100000000); - результат очень не понравился. Жуткий тормоз (потом, после чистки уже) |
| Автор: Ni@m 3.5.2005, 18:45 |
| Принцип линуксового ядра - оставлять кєшированные файлы в памяти как можно дольше. Естественно, если память понадобится под процессы - она освободится. Но когда файл закеширован, в следующий раз к нему обратится будет гораздо быстрее. |