У меня есть программа, потребляющая много памяти во время операций ввода / вывода, что является побочным эффектом их выполнения. Когда я запускаю программу с использованием direct_io, проблема памяти исчезла, но время, затраченное программой на завершение работы, в четыре раза больше.
Есть ли способ уменьшить максимальный размер буферного кеша (буфера ядра, используемого во время операций ввода-вывода)? Желательно без изменения исходников ядра.
Я пытался уменьшить /proc/sys/vm/
dirty_bytes и т.д. Но это, похоже, не имеет заметного значения.
ОБНОВЛЕНИЕ: использование echo 1 > /proc/sys/vm/drop_caches
echo 2 > /proc/sys/vm/drop_caches
echo 3 > /proc/sys/vm/drop_caches
Во время выполнения программы временно уменьшает объем используемой памяти.
Могу ли я каким-то образом ограничить кеширование страниц, дентрии и иноды вместо того, чтобы постоянно их освобождать? Это, вероятно, решит мою проблему.
Раньше не замечал этого, но проблема возникает с каждой операцией ввода-вывода, а не только с разделением. Похоже, что linux кэширует все, что происходит через ввод / вывод, до определенной точки, когда он достигает почти максимальной доступной памяти, оставляя 4 МБ свободной памяти. Таким образом, существует некоторый верхний предел для того, сколько памяти может быть кэшировано для ввода-вывода. Но я не могу найти где это. Добрые от отчаяния. Если я не могу разделить его на 2 где-нибудь в исходниках ядра, я с радостью сделаю это.
12-12-2016 Обновление: я перестал исправлять это, но что-то привлекло мое внимание и напомнило мне об этой проблеме. У меня дома старый неисправный жесткий диск, и он тратит ресурсы, как сумасшедшие, когда я пытаюсь что-то с ним сделать.
Возможно ли, что это может быть просто сбой жесткого диска? HDD, о котором идет речь, умер в течение месяца с момента возникновения моей проблемы. Если это так, я получил свой ответ.