В целях тестирования я хочу заставить Apache 2 загружать каждый запрошенный файл с диска вместо загрузки его из кеша в памяти. Из того, что я читал, делал синхронизировать с последующим
echo 3 > /proc/sys/vm/drop_caches
позволяет мне сбросить кеш Linux. Последующий запрос на конкретный файл не будет обслуживаться из кеша Linux, но дальнейшие запросы для того же файла будут снова обслуживаться из кеша Linux. Это так, потому что / proc / sys / vm / drop_caches не отключает кеширование, а только отбрасывает то, что было кэшировано до этого момента. Вероятно, я мог бы сбросить кеш перед каждым запросом, но я бы предпочел другое решение. Что еще я могу сделать, чтобы apache загружал каждый запрошенный файл с диска?
Почему я хочу это сделать: Знаю, что в обычном режиме кеширование включено. Но сервер не обслуживает небольшие и часто используемые файлы, такие как html-страницы, небольшие изображения и т. Д. Вместо этого он обслуживает файлы размером в пару мегабайт из очень большого набора файлов. Доступ к этим файлам осуществляется довольно равномерно, и поэтому доступ к каждому отдельному файлу осуществляется очень редко. Таким образом, при нормальной работе я ожидаю, что большинство обращений не вызовут попадания в кеш, а потребуют загрузки файла с диска. У меня есть несколько примеров файлов, к которым я хочу получить доступ с помощью apache ab эталонный тест, чтобы измерить, сколько транзакций в секунду может обслуживать сервер. К сожалению, я считаю, что получаемые мной результаты слишком оптимистичны из-за кеширования. Поэтому я хочу отключить кеширование диска Linux, и любое кеширование Apache может сделать сам.
Обновить: ответ, данный до сих пор сообщает мне, как отключить собственное кеширование Apache, но мне все еще интересно, есть ли способ отключить кеширование, выполняемое ядром Linux.
Я не думаю, что в Linux можно отключить кеширование всего диска.
В качестве взлома вы можете продолжать запускать «sync; echo 3> / proc / sys / vm / drop_caches», чтобы очистить почти все, что кэшируется в памяти. С консоли
watch -n 1 `sync; echo 3 > /proc/sys/vm/drop_caches`
сделает свое дело. В приведенном выше примере ничто не будет оставаться кэшированным ядром более секунды, хотя это не повлияет на данные, хранящиеся в памяти Apache или другими процессами. Он также может не сбрасывать данные из файлов с отображением памяти, которые все еще открыты с заблокированными частями.
Если вы хотите, чтобы ничего не кэшировалось в начале теста, и вам все равно, кэширует ли он данные во время тестов, то вы можете просто добавить один вызов для «sync» и «echo 3> / proc / sys / vm. / drop_caches "в начале вашего тестового запуска.
Если в вашем тесте используются сценарии, которые обращаются к базе данных, вам потребуется указать серверной части базы данных не кэшировать данные в ОЗУ и между тестами.
Вы можете отключить большую часть кеширования в Apache, отключив модуль mod_cache, закомментировав следующие строки в вашей конфигурации, чтобы помочь:
LoadModule cache_module
LoadModule disk_cache_module
LoadModule mem_cache_module
Нет, отключить использование буферного кеша невозможно. Есть способы сделать это программно (например, открыть файл в O_DIRECT), но для этого придется переписать apache.
По сути, похоже, что вы пытаетесь протестировать свою подсистему ввода-вывода для нескольких потоковых файлов размером в мегабайт. Есть гораздо лучшие способы сделать это, не добавляя в картину накладные расходы apache.
Если вы полны решимости попробовать это, вы можете попробовать написать небольшую программу для распределения большей части физической памяти на компьютере, чтобы уменьшить объем доступного дискового кеша, однако это, вероятно, приведет к тому, что сервер испортит результаты ваших тестов (apache multi process модель будет плохо взаимодействовать с этим, если вы не установите StartServers
, MinServers
и MaxServers
на то же значение, чтобы избежать создания процесса во время выполнения теста)
Я мог бы быть здесь ужасно неаккуратным (так что дайте мне знать, если я делаю неверное предположение), но кеширование диска в Linux известно как свопинг и использует файл подкачки или раздел подкачки.
swapoff -a
Следует отключить кеширование диска.