Comments 9
Точно, мой косяк. Проблема только в том, что APCu по умолчанию использует mmap (https://www.php.net/manual/ru/apcu.configuration.php) и для System V его нужно собирать отдельно.
В любом случае, микробенчмарки (включая уже и APCu) есть в отдельной репке: https://github.com/SerafimArts/SharedMemoryBench и как ни странно - APCu через mmap показывает наилучшую производительность (кроме записи строк, что странно).
Спасибо! Хорошая статья прямо косяком в ленте пошла - позавчера массивы, вчера общая память и FFI, сегодня файберы!
Ну, признаться, я как раз на вчерашнюю посмотрел про массивы, вспомнил времена когда Хабр ещё был тортом и свою опубликовал. Так сказать в поддержку. Вдохновило.
Спасибо, интересная статья и идея. Но насколько я понимаю это всё только на уровне фантазий и практически не используется, так? К тому же если что-то постоянно писать в разделяемую память, то в конце концов может возникнуть вопрос о том, куда это делась вся память на application-сервере?
P.S. Кажется ваши оценки результатов PHPBench не очень верные (но это не точно). Вы обращаете внимание только на значение mode
, но там ещё есть и разброс rstdev
в процентах. Если пересчитать, то получиться:
+------------+---------+---------+-------------+
| subject | mode | rstdev | interval |
+------------+---------+---------+-------------+
| benchShm | 4.491μs | ±4.43% | 4.29 - 4.69 |
| benchShmop | 2.357μs | ±1.56% | 2.32 - 2.39 |
| benchSync | 4.215μs | ±13.78% | 3.63 - 4.80 |
+------------+---------+---------+-------------+
И тогда разница между benchShm
и benchSync
совсем не однозначна. Чтобы разброс был примерно одинаковым между бенчмарками нужно использовать опцию --retry-threshold
, я писал об этом в статье Тестирование производительности c PHPBench: что и как? Приятно видеть, что кто-то юзает этот инструмент )
Странно, конечно, что разработчики PHPBench не добавили колонку с интервали в свой отчёт...
Ну изначально подобное исследование для прод решения готовилось как раз (года ~3 назад), надо было хранить где-то данные для Circuit Breaker'а, т.к. мемкеш (существующий по историческим причинам) как раз падал под нагрузкой с этой замечательной ошибкой, что вначале статьи.
Изначально рассматривался "встроенный" sysvshm, но меня смутило его API, которое предполагает некоторую сериализацию, поэтому потратил время на сравнение с shmop, а там и другие уже подтянулись и превратилось в статью.
Давайте вот честно:
год 2025, расскажем про apache и mod_php - серьёзно?
"супер кеши для высоких нагрузок" - а был ли мальчик? Вы, например, в курсе, что inmemory того же pg может быть *в разы* быстрее memcached просто из за особенностей работы с подключениями?
Т.е. - о чём статья то?
PHP: Общая память