я заметил, что я получаю серьезные проблемы с отзывчивостью системы (рабочий стол GUI) после выполнения команды, как это:Прочитайте файл, но подскажите ядру не кэшировать его содержимое?
cat file_larger_than_ram.bin | ./simple-process
Моей теория состоит в том, что это приводит к ядру Linux, чтобы отменить кэш файлов, которые он провел до сих пор в неиспользуемой части ОЗУ. В то же время процессам необходимо получить доступ к данным, над которыми они работают, поэтому после выполнения вышеприведенной команды им необходимо снова загрузить свои файлы. Учитывая, что я только собираюсь использовать file_larger_than_ram.bin
один раз, есть ли способ намекнуть, что ядро не кэширует файл? Я слышал, что я мог бы использовать fadvise
для этого, но я не уверен, учитывая то, что fadvise64(2)
говорит:
POSIX_FADV_DONTNEED пытается освободить кэшировать страницы, связанные с указанной области. Это полезно, например, при потоках больших файлов. Программа может периодически запрашивать ядро для освобождения кэшированных данных, которые уже были использованы, поэтому вместо использования кэшированных страниц более полезны .
Будет ли применяться fdadvise (input_desc, 0, 0, POSIX_FADV_DONTNEED);
действительно вести себя так, как я ожидаю, и решить проблему здесь?
Какие-либо проблемы с проверкой? Из описания кажется, что он должен работать –
Тестирование всех альтернатив потребует много времени, поэтому я решил, что попрошу, если кто-то уже знает ответ. Похоже, что «dd» может быть полезен здесь - я предложил добавить к 'cat': https://lists.gnu.org/archive/html/coreutils/2015-10/msg00111.html и обнаружил, что он уже был отклонен один раз , – d33tah
Вы видели это http://unix.stackexchange.com/questions/36907/drop-a-specific-file-from-the-linux-filesystem-cache? –