Народ, подскажите как управлять буфером NFS ?
Я так понял, что по умолчанию он захватывает по возможности всю оперативную память, а так как у нас идёт работа с сейсмическими данными, то возможности у него есть и он действительно захватывает всю оперативную память.В общем вкратце происходит вот такое дело:
Клиент заходит удалённо на сервер и запускает нужную ему программу, которая работает с данными по NFS c других серверов. Эти данные съедают всю память, потому что их много. Тут подключается к примеру ещё один клиент и запускает свой экземпляр программы со своими данными, начинает отжирать память у первого и начинается какой-то жуткий своппинг. А ещё могут быть клиенты, которым NFS и не нужен - тут уже надо смотреть приоритеты кто там у кого будет отбирать, но это и не так важно.В общем я надеялся, что может быть в NFS есть какой-то параметр позволяющий ограничить каждому клиенту или потоку размер занимаемой памяти. И тогда NFS для каждого клиента изначально будет выстраивать работу по другому алгоритму и никаких своппингов не будет.
Конечно Вы можете сказать, что NFS тут не причём, это всё программа съедает,
но
сама программа не может забирать 16 гигабайт памяти. Программа по NFS берёт данные с других серверов. Получается если в самой системе (RedHat, ядро 2.6.18) ограничить буфер NFS для каждого потока к примеру до 2 гигабайт, то каждый клиент и экземпляр будет работать, как-будто бы у него 2 гигабайта оперативки. Я это примерно так представлял.И ещё: Есть какие-то формулы или таблицы как расчитать оптимальное количество потоков NFS в зависимости от объёма памяти и количества ядер?
что показывает ps -ax -o 'rss command' | sort -n | tail -30
В редхате так ограничить кэш нельзя.
Почитай про эти параметры:
vm.swappiness
vm.dirty_ratio
vm.dirty_background_ratio