Доброе время суток.
Пока не знаю по какому принципу строится работа Linux (Suse) с памятью и swap'ом, для себя заметил следующее:
оперативки у меня маловато, и в процессе работы (в момент работы нескольких "весомых" программ, система лезит в swap. Если система взяла из swap мег 20-40 то можно еще работать, а если больше 100 Мб то работать уже не комфортно... после выхода из части программ физическая память освобождается, а swap также забит и пк притормаживает... хотя всё что в swap может легко уместится в физической памяти....
посему вопросик: есть ли какие нибудь инструменты для оптимизации размещения данных в памяти... что-нибудь типа "clean swap"
Есть патчи Кона Коливаса (если не путаю, что не суть важно в данном случае) для ядра, которые реализуют технологию 'Swap Prefetch'. Если показать на пальцах, то алгоритм работает примерно следующим образом (за деталями и подробностями алгоритма рекомендую обратиться в LKML):
- в результате работы очень тяжеловесного приложения (пусть будет APP), часть активных страниц памяти (других приложений) вытесняется на диск и заменяется активными страницами APP
- при вытеснении этих страниц обновляется список, который указывает, что эти вытесненные страницы недавно использовались
- приложение APP завершилось, оперативную память освободило
(Что имеем? Забитый своп и свободную оперативную память. Из страничного файла будут переноситься лишь те страницы к которым другие приложения будут обращаться и именно в том момент, когда приложение затребует свой кусок данных (ну назовем это - 'ad-hoc'-чтение из свопа). Разумеется, что следует ожидать задержек при операциях IO.)
- включается 'Swap Prefetch' и начинает, на основании своего списка, неспеша выбирать с диска страницы и помещать их в освободившуюся память, несмотря на то, что они еще не были затребованы приложениями
На мой взгляд подобный подход имеет некоторые минусы: скажем, в своп первыми, обычно, вытесняются редкоиспользуемые страницы. Если 'Swap Prefetch' снова загрузит их в свободную память, а буквально через некоторое время другое активное и приоритетное приложение потребует больше памяти - снова потребуется выгрузка в своп. И так далее. В итоге большая нагрузка на диск. Имхо, куда полезнее освободившуюся память использовать под кеш.
Данный патч, включен в ядро, как минимум, -mm. Если уж есть такое желание, то можете его поставить или применить один лишь патч к своему ядру.
Спасибо за информацию. Что-то подобное себе и представлял применять пока не буду, поскольку патчи и ядра пока тема не изученая.. Но всё еще впереди.
и всё равно складывается впечатление, что работает напрямую из swap а не перетаскивает страицы обратно в оперативку... но это чисто субъективно.... Вот уже на протяжении недели в swap'e 60 метров валяется.... и не уменьшается... а работать также быстро как и с пустым swap не стал...
и всё равно складывается впечатление, что работает напрямую из swap а не перетаскивает страицы обратно в оперативку...
Это было счастьем для всех, разом, если бы процессоры Intel (?) умели сами обращаться к сектору на диске, вместо адреса памяти. Увы, увы - ОС их сначала "перетаскивает" обратно.