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