VSM: Логирование и статистика в общей памяти
Varnish использует общую память для экспорта параметров, логирования и статистики, так как это быстрее и эффективнее, чем обычные файлы.
«Varnish Shared Memory» или VSM — это общий механизм, поддерживающий наборы файлов общей памяти, каждый из которых представляет собой блок памяти, идентифицируемый двухкомпонентным именем (класс, идентификатор).
Класс указывает тип данных, хранящихся в блоке, например, «Arg» для аргументов командной строки, полезных для установления подключения CLI к varnishd, «Stat» для счётчиков статистики (VSC) и «Log» для записей логов (VSL).
Часть имени ident в основном используется со счётчиками статистики, где они идентифицируют динамические счётчики, такие как:
SMA.Transient.c_bytes
Подход Varnish:
При запуске varnishd открываются заблокированные файлы общей памяти; рекомендуется использовать разные аргументы -n, если есть попытка запустить несколько экземпляров varnishd с одинаковым именем.
Дочерние процессы каждый используют свои собственные файлы общей памяти, поскольку перезапуск рабочего процесса помечает чистый разрыв в работе.
В максимально возможной степени старые файлы общей памяти помечаются как заброшенные, устанавливая поле alloc_seq в ноль, которое должны отслеживать все читатели VSM.
Процессы, подписанные на файлы VSM в течение длительного времени, должны заметить, если файл VSM становится «немым», и проверить, не было ли переименовано файл из-за перезапуска дочернего процесса.
Блоки в файле общей памяти образуют связанный список, и всякий раз, когда этот список изменяется, изменяется поле alloc_seq.
Связанный список и другие метаданные в файле VSM работают со смещениями относительно начального адреса отображения в памяти файла VSM, поэтому его не нужно отображать по какому-либо конкретному адресу.
Когда выделяются новые блоки, например, при добавлении нового бэкенда, они добавляются в конец списка, независимо от их расположения в файле VSM.
Когда блок освобождается, он удаляется из связанного списка выделений, его длина устанавливается в ноль, а alloc_seq изменяется, чтобы указать изменение структуры. В течение следующих 60 секунд блок не будет трогаться или повторно использоваться, давая другим подписчикам возможность обнаружить освобождение.
Файл заголовков <vapi/vsm.h> предоставляет поддерживаемую API для доступа к файлам VSM.
Copyright © 2006 Verdens Gang AS
Copyright © 2006–2020 Varnish Software AS
Licensed under the BSD-2-Clause License.
https://varnish-cache.org/docs/7.4/reference/vsm.html