Назад | Перейти на главную страницу

Влияние на различные команды Linux на сервере Varnish

Я знаю использование лака карта памяти метод кэширования данных в памяти, что, если я выполню следующие команды на машине, есть ли какое-либо снижение общей производительности Varnish?

например

Общий объем памяти = 4 ГБ, фиктивный случайный файл test.txt = 2 ГБ

1. cat test.txt
2. mv test.txt /another-partition
3. cp test.txt /another-partition
4. mv test.txt /another-dir
5. cp test.txt /another-dir

Ответ зависит от того, какое хранилище использует ваш кеш.

Если вы настроили varnish для использования файлового хранилища, ваши файловые операции могут повлиять на производительность.

В выделенной системе с 4 гигабайтами оперативной памяти я рекомендую вам использовать "malloc" размером около 3 гигабайт в качестве хранилища для вашего кэша.

Видеть: https://www.varnish-cache.org/docs/trunk/users-guide/storage-backends.html

Интересный вопрос!

В качестве справки эта страница от автора подсистемы виртуальной машины даст вам хорошее представление о том, что может произойти;

http://linux-mm.org/PageReplacementDesign

Обратите внимание, что на самом деле на это очень сложно ответить в его текущей форме (если вы говорите о кешах с файловой поддержкой), потому что это зависит от того, насколько горячий кеш, как долго вы кешируете элементы и `` тепло '' каждого объекта в кеше. .

Предполагая следующее: -

  • Кэш поддерживается файлом размером 10 ГБ и полностью заполнен.
  • 3% объектов в кэше составляют 90% всех попаданий.
  • У вас есть одновременное выполнение около 80 управляемых соединений в любой момент времени.
  • Вы не изменили политику виртуальной машины по умолчанию.
  • Перед командой кеш страниц почти полностью заполняется страницами из вашего кеша лака.
  • 500 МБ данных выделяются исключительно анонимным страницам из других вещей, работающих в системе.

Поскольку размер вашего кэша лака составляет 10 ГБ, он никогда полностью не поместится в памяти, поэтому следующая формула является относительно репрезентативной.

  • Кэш страниц составляет 3500 МБ.
  • Самые горячие 1750Мб кэша лака находятся в списке «активных» и защищены от вытеснения кэша страниц.
  • Кулер с лаковым кешем на 1750 Мб находится в списке «неактивных» и не защищен от выселения.
  • Самые холодные 6500Мб кэша лака не находятся в памяти, а где-то находятся на диске.

Итак, следующее наверное результат для всех ваших команд, которые вы выполняете ..

  1. Этот файл помещается в память и кэшируется, но все новые объекты в кэше по умолчанию отправляются в «неактивный» список.
  2. Это вытесняет 1750 МБ вашей «кулер / неактивной» памяти из кэша лака и заменяет его файлом catted.
  3. Теперь ядро ​​вынуждено записать 1750 МБ этих данных обратно на диск (в худшем случае).
  4. Ожидание ввода-вывода и использование устройства сильно ухудшаются, потому что вы читаете файл 2G и записываете файл 1750M.
  5. 97% входящих запросов не затрагиваются этим, потому что им нужны самые горячие 1750 МБ данных лака, которые находятся в активной части кеша страницы!
  6. 3% незадачливых клиентов хотят, чтобы данные были в кэше кулера. Эти ребята сейчас видят задержку, потому что загрузка диска уже довольно высока, и они снова выстраиваются в очередь, чтобы снова загрузить страницы в кеш! Поскольку помеченный файл никогда не перечитывается достаточно быстро, кеш страницы вытесняет эти страницы в пользу 3% клиентов, которым нужны более прохладные данные.

Это наихудший сценарий. Итак, в общих чертах - каково влияние?

97% обслуженных вами запросов не окажут незначительного влияния.

Из 3% пострадавших следует ожидать более высокой задержки обслуживания обслуживаемых - возможно, 500 миллисекунд.

НО из этих 3% неудачных запросов около 2% из них тем не мение было бы медленно, потому что они хотели получить что-то из кеш-памяти 6500 МБ, чего в любом случае никогда не было в кэше страниц! Однако сейчас они действительно страдают от высокой загрузки диска.

Итак, в целом на моем надуманном и предполагаемом примере вы увидите в общих чертах около 3% потери эффективности. (100% эффективность будет, если все объекты для каждого запроса обслуживаются из памяти).

При «нормальной» работе в этом надуманном примере производительность будет около 98%.

Неплохо для кеша, который не помещается в память!