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

APC - настройка apc.mmap_file_mask

При настройке APC в качестве кеша опкодов для PHP есть параметр конфигурации, называемый apc.mmap_file_mask. Из того, что я прочитал, вы можете настроить его тремя способами, но я не совсем понимаю значение каждого из них.

  1. /tmp/apc.XXXXXX - (по умолчанию) «mmap с файловой поддержкой»
  2. /tmp/apc.shm.XXXXXX - используйте "shm_open / mmap в стиле POSIX"
  3. / dev / zero - "используйте интерфейс вашего ядра / dev / zero для анонимной памяти с mmap'ом"

Источник: http://php.net/manual/en/apc.configuration.php#ini.apc.mmap-file-mask

Может ли кто-нибудь прокомментировать это и то, что они порекомендовали бы? Я предполагаю, что будут последствия использования памяти и производительности и, возможно, безопасности, но я не знаю, так ли это? Из прочтения, которое я закончил, я предполагаю, что №2 и №3 быстрее, но я думал, что APC уже использует разделяемую память как есть (как установлено apc.shm_size), поэтому я не понимаю.

/tmp/apc.XXXXXX -> Эта маска файла mmap представляет собой обычную файловую систему на основе mmap и использует mkstemp для создания уникального временного файла, который является mmap'd. 6 'X заменяются уникальной строкой, чтобы сделать имя файла уникальным. Это просто запись данных в файл в файловой системе.

/tmp/apc.shm.XXXXXX -> Обратите внимание, что it_must_ быть только /apc.shm.XXXXXX в системах Linux. Отличие от обычного mmap с файловой поддержкой заключается в том, что этот механизм создает временный файл с помощью вызова mktemp () и выполняет вызов shm_open (), который создает и открывает новый или открывает существующий объект общей памяти POSIX. Объект разделяемой памяти POSIX фактически является дескриптором, который может использоваться несвязанными процессами для отображения одной и той же области разделяемой памяти. Я не пробовал это раньше, но думаю, что у него может быть как минимум 3 крестика (так что apc.shml.XXX тоже должен работать).

/ dev / zero -> mmap'ing /dev/zero является анонимным отображением памяти, что означает, что это объект памяти, не имеющий связанного файла, и все содержимое инициализировано нулем. Если вы не укажете mmap_file_mask, APC будет использовать анонимную карту (с флагами MAP_SHARED и MAP_ANON). Таким образом, указав /dev/zero и отсутствие указания mmap_file_mask эквивалентны в том смысле, что они оба являются анонимной картой. Исторически сложилось так, что MAP_SHARED и MAP_ANON вместе в linux не поддерживались до версии ядра 2.4.

С точки зрения производительности, 3 будет наилучшим образом, поскольку файловая поддержка mmap'а имеет значительно больший объем дискового ввода-вывода. Итак, 3 должен быть самым быстрым, поскольку он не имеет резервного файла и является частью самой памяти, затем 2 и 1, наконец. Однако это только теория, и практические тесты в различных конфигурациях могут подтвердить реальность. Однако недостатком анонимного сопоставления (и сопоставления с общей памятью) является то, что память mmap не сохраняется между выполнениями приложения, что приводит к потере кеша при перезапуске.