Я скачал много торрент-файлов, и пока я их заполнял, я заметил, что очень часто, когда я запускаю браузер, он работает медленно и горит индикатор активности жесткого диска. Обычно, когда я запускаю программу, она кэшируется в ОЗУ, и ее повторный запуск происходит очень быстро, и у меня 3 ГБ ОЗУ, поэтому обычно она остается в кеше почти навсегда. Но когда мой торрент-клиент заполняется, кажется, что через час запущенные мной программы больше не кэшируются в ОЗУ.
Я подумал, может быть, это из-за того, что чтение с диска, которое выполняет торрент-клиент, кэшируется и со временем заполняет ОЗУ. Но я не думаю, что это необходимо, поскольку они читаются только один раз и вряд ли скоро будут прочитаны снова.
Итак, мои вопросы - так ли я думаю, и если да, то возможно ли в принципе предотвратить кэширование чтения с диска? Я могу попробовать отредактировать исходный код программы.
Это будет зависеть от того, какую торрент-программу вы используете. Некоторые из них могут вести себя по-разному.
Но да, возможно обойти системный кеш, так как это общая проблема.
Если вам удобно редактировать исходный код (возможно, это должно быть на другом StackExchange ..), найдите, где торрент-программа открывает файл с диска. Скорее всего, вызов open (). Если это fdopen (), то он использует stdlib, и я не уверен, что stdlib поддерживает прямой ввод / вывод.
Этот системный вызов принимает до трех аргументов, первый - имя файла, второй - флаги, третий - необязательная маска создания файла. Флаги, вероятно, будут похожи на O_RDWR
в данный момент. Флаг «не использовать системный кеш» - это O_DIRECT
, и вы объединяете флаги, разделяя их с |
.
Таким образом, результатом аргумента flags в этом случае будет O_RDWR | O_DIRECT
. Просто добавьте новый флаг.
Для получения дополнительной информации см.
man 2 open
. Не закрывайте браузер:)
Кэш-память ввода-вывода (используемая только для чтения, а не записи в файл), хотя и чрезмерная, не приведет к тому, что страницы, используемые программой, будут поменялись местами.