UserCache\Cache Performance Report
Generated at 2026-07-15T04:32:18+00:00. Times are in microseconds; lower is faster.
- UserCache
- 1.00x
- APCu/igbinary
- 0.11x
- APCu/php
- 0.07x
- UserCache
- 1.00x
- APCu/igbinary
- 2.12x
- APCu/php
- 1.78x
- UserCache
- 1.00x
- APCu/php
- 0.16x
- UserCache
- 1.00x
- APCu/igbinary
- 0.25x
- UserCache
- 1.00x
- APCu/php
- 0.05x
- UserCache
- 1.00x
- APCu/igbinary
- 0.09x
Environment
| PHP | 8.6.0-dev (cli) |
|---|---|
| Thread Safety | NTS |
| Binary | /workspaces/php-src/sapi/cli/php |
| System | Linux b7b55aa64c52 7.0.11-orbstack-00360-gc9bc4d96ac70 #1 SMP PREEMPT Thu Jun 4 16:40:25 UTC 2026 aarch64 |
| user_cache.shm_size | 128M |
| Loaded extensions | apcu, Core, ctype, date, dom, fileinfo, filter, hash, iconv, igbinary, json, lexbor, libxml, pcntl, pcre, PDO, pdo_sqlite, Phar, posix, random, Reflection, session, SimpleXML, SPL, sqlite3, standard, tokenizer, uri, user_cache, xml, xmlreader, xmlwriter, Zend OPcache |
CLI Repeated Read
| Workload | UserCache | APCu/php | APCu/igbinary | Faster/UserCache |
|---|---|---|---|---|
constant_ | 0.150 usmean 0.158 | 2.288 usmean 2.315 | 1.750 usmean 1.703 | 1.00x (UserCache) |
route_ | 0.265 usmean 0.246 | 178.401 usmean 178.792 | 58.700 usmean 58.630 | 1.00x (UserCache) |
large_ | 0.170 usmean 0.160 | 97.574 usmean 97.470 | 49.568 usmean 49.587 | 1.00x (UserCache) |
large_ | 0.104 usmean 0.106 | 4.279 usmean 4.296 | 5.168 usmean 5.122 | 1.00x (UserCache) |
large_ | 0.178 usmean 0.181 | 97.809 usmean 99.108 | 51.346 usmean 51.861 | 1.00x (UserCache) |
metadata_ | 0.261 usmean 0.274 | 185.098 usmean 184.877 | 73.001 usmean 72.602 | 1.00x (UserCache) |
metadata_ | 0.345 usmean 0.347 | 184.780 usmean 185.717 | 71.004 usmean 71.737 | 1.00x (UserCache) |
sleep_ | 0.313 usmean 0.286 | 9.587 usmean 9.605 | 4.988 usmean 4.997 | 1.00x (UserCache) |
serialize_ | 0.353 usmean 0.352 | 3.913 usmean 3.968 | 2.878 usmean 2.899 | 1.00x (UserCache) |
unserialize_ | 0.416 usmean 0.434 | 4.010 usmean 3.981 | 3.040 usmean 3.055 | 1.00x (UserCache) |
sleep_ | 8.499 usmean 8.530 | 55.379 usmean 55.289 | 32.409 usmean 32.352 | 1.00x (UserCache) |
sleep_ | 0.223 usmean 0.241 | 93.968 usmean 93.962 | 48.815 usmean 49.326 | 1.00x (UserCache) |
recursive_ | 9.495 usmean 9.519 | 36.163 usmean 36.338 | 30.542 usmean 30.001 | 1.00x (UserCache) |
mixed_ | 0.504 usmean 0.505 | 16.422 usmean 16.464 | 10.724 usmean 10.727 | 1.00x (UserCache) |
product_ | 5.904 usmean 5.881 | 65.354 usmean 65.879 | 39.248 usmean 39.259 | 1.00x (UserCache) |
multi_ | 0.192 usmean 0.192 | 9.091 usmean 9.093 | 5.349 usmean 5.352 | 1.00x (UserCache) |
safe_ | 0.537 usmean 0.583 | 2.604 usmean 2.623 | 2.507 usmean 2.489 | 1.00x (UserCache) |
spl_ | 0.776 usmean 0.775 | 20.834 usmean 20.950 | 7.469 usmean 7.451 | 1.00x (UserCache) |
spl_ | 1.699 usmean 1.744 | 20.278 usmean 20.552 | 7.019 usmean 7.037 | 1.00x (UserCache) |
spl_ | 1.465 usmean 1.453 | 31.600 usmean 32.030 | 12.805 usmean 12.867 | 1.00x (UserCache) |
carbon_ | 175.941 usmean 174.151 | 197.982 usmean 200.696 | 187.117 usmean 189.898 | 1.00x (UserCache) |
carbon_ | 174.545 usmean 174.819 | 217.264 usmean 217.625 | 194.251 usmean 194.157 | 1.00x (UserCache) |
raw_ | 9.748 usmean 9.816 | 101.927 usmean 102.655 | 89.492 usmean 89.471 | 1.00x (UserCache) |
raw_ | 7.791 usmean 7.825 | 109.900 usmean 110.375 | 92.075 usmean 92.635 | 1.00x (UserCache) |
serialized_ | 0.199 usmean 0.202 | 0.446 usmean 0.468 | 0.446 usmean 0.488 | 1.00x (UserCache) |
reference_ | 0.173 usmean 0.173 | 0.363 usmean 0.381 | 0.443 usmean 0.433 | 1.00x (UserCache) |
cycle_ | 0.178 usmean 0.185 | 0.465 usmean 0.486 | 0.511 usmean 0.502 | 1.00x (UserCache) |
nested_ | 0.164 usmean 0.164 | 9.215 usmean 9.233 | 6.661 usmean 6.737 | 1.00x (UserCache) |
CLI Store
| Workload | UserCache | APCu/php | APCu/igbinary | Faster/UserCache |
|---|---|---|---|---|
constant_store trade-off note | 2.409 usmean 2.542 | 1.571 usmean 1.572 | 0.952 usmean 1.025 | 2.53x (APCu/igbinary) |
route_store trade-off note | 110.129 usmean 110.087 | 97.106 usmean 95.913 | 77.789 usmean 77.870 | 1.42x (APCu/igbinary) |
large_store trade-off note | 82.087 usmean 82.517 | 55.363 usmean 55.165 | 47.946 usmean 48.019 | 1.71x (APCu/igbinary) |
large_store trade-off note | 4.042 usmean 4.026 | 3.817 usmean 3.848 | 4.041 usmean 4.076 | 1.06x (APCu/php) |
large_store trade-off note | 117.106 usmean 118.986 | 57.215 usmean 56.719 | 48.474 usmean 48.540 | 2.42x (APCu/igbinary) |
metadata_store trade-off note | 182.026 usmean 182.444 | 103.037 usmean 102.750 | 87.857 usmean 87.742 | 2.07x (APCu/igbinary) |
metadata_store trade-off note | 187.574 usmean 188.098 | 105.072 usmean 105.030 | 86.652 usmean 86.877 | 2.16x (APCu/igbinary) |
sleep_store trade-off note | 10.751 usmean 10.933 | 5.878 usmean 5.886 | 4.739 usmean 4.854 | 2.27x (APCu/igbinary) |
serialize_store trade-off note | 6.114 usmean 6.165 | 2.452 usmean 2.389 | 2.377 usmean 2.379 | 2.57x (APCu/igbinary) |
unserialize_store trade-off note | 5.986 usmean 5.994 | 2.138 usmean 2.148 | 2.292 usmean 2.411 | 2.80x (APCu/php) |
sleep_store trade-off note | 101.984 usmean 102.151 | 33.080 usmean 32.666 | 25.304 usmean 25.372 | 4.03x (APCu/igbinary) |
sleep_store trade-off note | 117.454 usmean 117.804 | 56.451 usmean 56.624 | 48.522 usmean 48.401 | 2.42x (APCu/igbinary) |
recursive_store trade-off note | 44.041 usmean 44.076 | 21.945 usmean 21.855 | 18.553 usmean 18.390 | 2.37x (APCu/igbinary) |
mixed_store trade-off note | 25.369 usmean 25.316 | 9.288 usmean 9.766 | 9.607 usmean 9.986 | 2.73x (APCu/php) |
product_store trade-off note | 72.566 usmean 73.923 | 25.443 usmean 25.783 | 25.117 usmean 25.122 | 2.89x (APCu/igbinary) |
multi_store trade-off note | 9.058 usmean 9.083 | 5.014 usmean 5.245 | 4.909 usmean 4.780 | 1.85x (APCu/igbinary) |
safe_store trade-off note | 2.273 usmean 2.319 | 1.319 usmean 1.325 | 1.454 usmean 1.458 | 1.72x (APCu/php) |
spl_store trade-off note | 18.716 usmean 18.687 | 11.876 usmean 11.986 | 5.524 usmean 5.523 | 3.39x (APCu/igbinary) |
spl_store trade-off note | 16.726 usmean 16.704 | 11.958 usmean 11.929 | 4.939 usmean 4.984 | 3.39x (APCu/igbinary) |
spl_store trade-off note | 32.140 usmean 31.804 | 19.989 usmean 20.099 | 11.961 usmean 12.026 | 2.69x (APCu/igbinary) |
carbon_store trade-off note | 432.810 usmean 432.119 | 351.480 usmean 350.404 | 344.502 usmean 341.845 | 1.26x (APCu/igbinary) |
carbon_store trade-off note | 473.681 usmean 471.870 | 382.077 usmean 383.724 | 373.511 usmean 380.788 | 1.27x (APCu/igbinary) |
raw_store trade-off note | 89.758 usmean 89.334 | 52.647 usmean 52.805 | 51.381 usmean 51.287 | 1.75x (APCu/igbinary) |
raw_store trade-off note | 87.507 usmean 87.638 | 54.877 usmean 54.220 | 53.436 usmean 53.618 | 1.64x (APCu/igbinary) |
serialized_store trade-off note | 0.602 usmean 0.598 | 0.358 usmean 0.358 | 0.342 usmean 0.343 | 1.76x (APCu/igbinary) |
reference_store trade-off note | 0.540 usmean 0.580 | 0.302 usmean 0.302 | 0.330 usmean 0.330 | 1.79x (APCu/php) |
cycle_store trade-off note | 0.606 usmean 0.607 | 0.321 usmean 0.321 | 0.331 usmean 0.354 | 1.89x (APCu/php) |
nested_store trade-off note | 10.903 usmean 10.989 | 5.030 usmean 5.287 | 5.872 usmean 6.064 | 2.17x (APCu/php) |
FPM One Fetch Per Request (APCu serializer=php)
| Workload | UserCache | APCu/php | Faster/UserCache | Workers |
|---|---|---|---|---|
constant_ | 1.896 usmean 2.519p25-p75 1.417-3.052 | 4.792 usmean 5.513p25-p75 4.125-6.563 | 1.00x (UserCache) | 5 |
route_ | 1.625 usmean 2.563p25-p75 1.417-3.448 | 241.251 usmean 247.006p25-p75 228.698-257.552 | 1.00x (UserCache) | 5 |
large_ | 1.667 usmean 2.341p25-p75 1.375-2.969 | 139.604 usmean 143.575p25-p75 126.645-156.980 | 1.00x (UserCache) | 5 |
large_ | 1.625 usmean 2.151p25-p75 1.334-2.688 | 6.667 usmean 7.134p25-p75 6.084-7.927 | 1.00x (UserCache) | 5 |
large_ | 2.667 usmean 3.339p25-p75 1.865-4.000 | 139.541 usmean 141.968p25-p75 130.135-151.114 | 1.00x (UserCache) | 5 |
metadata_ | 3.437 usmean 4.217p25-p75 2.542-5.750 | 280.229 usmean 290.820p25-p75 251.542-306.219 | 1.00x (UserCache) | 5 |
metadata_ | 4.500 usmean 5.539p25-p75 3.292-6.896 | 280.125 usmean 288.033p25-p75 251.781-316.541 | 1.00x (UserCache) | 5 |
sleep_ | 2.958 usmean 3.553p25-p75 2.125-4.416 | 17.542 usmean 18.933p25-p75 15.375-20.146 | 1.00x (UserCache) | 5 |
serialize_ | 2.750 usmean 3.252p25-p75 2.042-4.083 | 7.417 usmean 8.304p25-p75 6.500-8.781 | 1.00x (UserCache) | 5 |
unserialize_ | 3.291 usmean 3.789p25-p75 2.458-4.541 | 8.313 usmean 9.730p25-p75 7.229-9.916 | 1.00x (UserCache) | 5 |
sleep_ | 12.667 usmean 15.007p25-p75 11.167-15.958 | 91.625 usmean 95.896p25-p75 85.667-100.937 | 1.00x (UserCache) | 5 |
sleep_ | 2.750 usmean 3.454p25-p75 2.000-4.344 | 148.000 usmean 149.932p25-p75 133.823-167.844 | 1.00x (UserCache) | 5 |
recursive_ | 12.792 usmean 13.772p25-p75 10.875-14.605 | 55.376 usmean 57.515p25-p75 49.615-61.594 | 1.00x (UserCache) | 5 |
mixed_ | 3.646 usmean 4.251p25-p75 2.750-5.094 | 29.667 usmean 31.114p25-p75 26.187-33.500 | 1.00x (UserCache) | 5 |
product_ | 18.438 usmean 20.487p25-p75 15.667-22.708 | 99.834 usmean 105.848p25-p75 90.594-112.386 | 1.00x (UserCache) | 5 |
multi_ | 2.063 usmean 2.572p25-p75 1.615-3.052 | 15.896 usmean 16.815p25-p75 14.209-17.791 | 1.00x (UserCache) | 5 |
safe_ | 6.083 usmean 7.307p25-p75 4.833-8.802 | 12.021 usmean 14.331p25-p75 9.292-16.771 | 1.00x (UserCache) | 5 |
spl_ | 4.438 usmean 5.371p25-p75 3.406-6.375 | 38.896 usmean 40.608p25-p75 36.375-42.698 | 1.00x (UserCache) | 5 |
spl_ | 4.750 usmean 6.029p25-p75 3.833-6.771 | 38.334 usmean 39.699p25-p75 35.032-41.531 | 1.00x (UserCache) | 5 |
spl_ | 5.084 usmean 5.935p25-p75 4.000-7.386 | 55.104 usmean 57.168p25-p75 49.542-62.459 | 1.00x (UserCache) | 5 |
carbon_ | 266.271 usmean 299.571p25-p75 243.177-332.302 | 326.105 usmean 350.808p25-p75 279.010-371.646 | 1.00x (UserCache) | 5 |
carbon_ | 272.229 usmean 311.869p25-p75 245.365-337.718 | 328.396 usmean 372.865p25-p75 294.834-404.469 | 1.00x (UserCache) | 5 |
raw_ | 23.438 usmean 26.163p25-p75 19.781-27.927 | 135.188 usmean 142.597p25-p75 113.479-150.917 | 1.00x (UserCache) | 5 |
raw_ | 21.147 usmean 24.441p25-p75 17.948-25.459 | 144.771 usmean 157.101p25-p75 125.083-164.896 | 1.00x (UserCache) | 5 |
serialized_ | 2.500 usmean 3.048p25-p75 1.865-3.625 | 3.083 usmean 4.041p25-p75 2.448-4.719 | 1.00x (UserCache) | 5 |
reference_ | 2.375 usmean 3.132p25-p75 1.875-3.730 | 2.896 usmean 3.347p25-p75 2.281-3.771 | 1.00x (UserCache) | 5 |
cycle_ | 2.375 usmean 3.030p25-p75 1.834-3.677 | 3.000 usmean 3.375p25-p75 2.282-4.136 | 1.00x (UserCache) | 5 |
nested_ | 2.250 usmean 2.792p25-p75 1.750-3.261 | 17.667 usmean 18.288p25-p75 15.594-19.521 | 1.00x (UserCache) | 5 |
FPM One Fetch Per Request (APCu serializer=igbinary)
| Workload | UserCache | APCu/igbinary | Faster/UserCache | Workers |
|---|---|---|---|---|
constant_ | 1.729 usmean 2.318p25-p75 1.375-2.844 | 4.625 usmean 5.434p25-p75 3.698-6.375 | 1.00x (UserCache) | 5 |
route_ | 1.792 usmean 2.549p25-p75 1.458-3.219 | 95.542 usmean 97.268p25-p75 84.792-106.688 | 1.00x (UserCache) | 5 |
large_ | 2.229 usmean 2.990p25-p75 1.583-3.750 | 72.208 usmean 77.375p25-p75 66.938-90.844 | 1.00x (UserCache) | 5 |
large_ | 1.938 usmean 2.291p25-p75 1.375-2.834 | 7.396 usmean 8.180p25-p75 6.542-8.511 | 1.00x (UserCache) | 5 |
large_ | 2.625 usmean 3.270p25-p75 1.906-4.167 | 74.292 usmean 76.813p25-p75 68.073-81.739 | 1.00x (UserCache) | 5 |
metadata_ | 3.417 usmean 4.160p25-p75 2.292-5.531 | 109.938 usmean 113.559p25-p75 101.094-124.708 | 1.00x (UserCache) | 5 |
metadata_ | 3.375 usmean 4.466p25-p75 2.542-5.886 | 108.229 usmean 111.937p25-p75 98.303-121.876 | 1.00x (UserCache) | 5 |
sleep_ | 2.688 usmean 3.368p25-p75 2.000-4.136 | 12.271 usmean 13.043p25-p75 10.427-14.083 | 1.00x (UserCache) | 5 |
serialize_ | 2.896 usmean 3.753p25-p75 2.125-4.239 | 6.896 usmean 7.808p25-p75 5.708-8.667 | 1.00x (UserCache) | 5 |
unserialize_ | 3.188 usmean 3.782p25-p75 2.417-4.500 | 7.729 usmean 8.728p25-p75 6.625-9.677 | 1.00x (UserCache) | 5 |
sleep_ | 13.083 usmean 14.194p25-p75 10.657-15.208 | 54.292 usmean 56.118p25-p75 47.885-60.250 | 1.00x (UserCache) | 5 |
sleep_ | 2.625 usmean 3.255p25-p75 1.907-4.177 | 75.167 usmean 78.299p25-p75 68.177-88.208 | 1.00x (UserCache) | 5 |
recursive_ | 13.000 usmean 13.391p25-p75 11.000-14.208 | 39.646 usmean 41.481p25-p75 36.021-45.146 | 1.00x (UserCache) | 5 |
mixed_ | 3.708 usmean 4.256p25-p75 2.615-5.042 | 20.646 usmean 21.325p25-p75 18.197-22.875 | 1.00x (UserCache) | 5 |
product_ | 17.625 usmean 19.445p25-p75 14.990-21.177 | 69.646 usmean 72.785p25-p75 61.562-79.844 | 1.00x (UserCache) | 5 |
multi_ | 2.208 usmean 2.643p25-p75 1.615-3.198 | 12.541 usmean 13.134p25-p75 10.958-14.594 | 1.00x (UserCache) | 5 |
safe_ | 6.646 usmean 8.420p25-p75 5.125-10.021 | 11.813 usmean 14.240p25-p75 9.333-16.771 | 1.00x (UserCache) | 5 |
spl_ | 4.167 usmean 4.868p25-p75 3.250-5.677 | 16.146 usmean 17.287p25-p75 14.334-18.541 | 1.00x (UserCache) | 5 |
spl_ | 4.938 usmean 5.866p25-p75 4.042-6.792 | 15.209 usmean 16.485p25-p75 13.792-17.417 | 1.00x (UserCache) | 5 |
spl_ | 5.125 usmean 5.772p25-p75 3.906-7.063 | 29.001 usmean 30.463p25-p75 25.948-33.302 | 1.00x (UserCache) | 5 |
carbon_ | 268.730 usmean 302.565p25-p75 245.573-307.989 | 312.771 usmean 336.756p25-p75 274.344-356.823 | 1.00x (UserCache) | 5 |
carbon_ | 280.583 usmean 301.946p25-p75 239.083-321.771 | 309.750 usmean 334.476p25-p75 271.875-356.427 | 1.00x (UserCache) | 5 |
raw_ | 23.229 usmean 26.371p25-p75 20.157-28.094 | 117.396 usmean 129.155p25-p75 105.761-137.146 | 1.00x (UserCache) | 5 |
raw_ | 20.292 usmean 22.610p25-p75 18.292-23.833 | 120.667 usmean 130.426p25-p75 112.833-134.938 | 1.00x (UserCache) | 5 |
serialized_ | 2.542 usmean 3.115p25-p75 1.906-3.708 | 3.459 usmean 3.997p25-p75 2.709-4.666 | 1.00x (UserCache) | 5 |
reference_ | 2.417 usmean 3.002p25-p75 1.875-3.594 | 3.084 usmean 3.759p25-p75 2.542-4.250 | 1.00x (UserCache) | 5 |
cycle_ | 2.334 usmean 3.003p25-p75 1.781-3.625 | 3.250 usmean 3.815p25-p75 2.615-4.552 | 1.00x (UserCache) | 5 |
nested_ | 2.146 usmean 2.501p25-p75 1.615-3.167 | 16.917 usmean 17.489p25-p75 15.240-18.646 | 1.00x (UserCache) | 5 |
FPM Hot Read (APCu serializer=php)
| Workload | UserCache | APCu/php | Faster/UserCache | Workers |
|---|---|---|---|---|
route_ | 0.304 usmean 0.335p25-p75 0.238-0.442 | 212.027 usmean 217.867p25-p75 197.228-230.387 | 1.00x (UserCache) | 5 |
large_ | 0.323 usmean 0.353p25-p75 0.238-0.405 | 116.056 usmean 121.032p25-p75 107.359-131.462 | 1.00x (UserCache) | 5 |
large_ | 0.172 usmean 0.178p25-p75 0.151-0.192 | 5.530 usmean 6.376p25-p75 5.170-7.371 | 1.00x (UserCache) | 5 |
large_ | 0.767 usmean 0.745p25-p75 0.592-0.805 | 125.220 usmean 126.088p25-p75 112.921-135.656 | 1.00x (UserCache) | 5 |
metadata_ | 1.392 usmean 1.418p25-p75 1.191-1.604 | 246.913 usmean 250.880p25-p75 229.788-272.830 | 1.00x (UserCache) | 5 |
metadata_ | 1.610 usmean 1.601p25-p75 1.289-1.906 | 251.151 usmean 251.487p25-p75 235.370-266.820 | 1.00x (UserCache) | 5 |
sleep_ | 0.359 usmean 0.385p25-p75 0.307-0.412 | 11.672 usmean 12.114p25-p75 9.723-12.473 | 1.00x (UserCache) | 5 |
serialize_ | 0.530 usmean 0.536p25-p75 0.499-0.597 | 3.929 usmean 4.742p25-p75 3.804-4.455 | 1.00x (UserCache) | 5 |
unserialize_ | 0.580 usmean 0.597p25-p75 0.466-0.679 | 4.139 usmean 4.894p25-p75 3.887-6.025 | 1.00x (UserCache) | 5 |
sleep_ | 9.927 usmean 12.198p25-p75 8.738-14.287 | 73.339 usmean 78.263p25-p75 64.159-90.616 | 1.00x (UserCache) | 5 |
sleep_ | 0.288 usmean 0.394p25-p75 0.259-0.480 | 124.373 usmean 128.555p25-p75 118.797-144.432 | 1.00x (UserCache) | 5 |
recursive_ | 11.272 usmean 11.911p25-p75 8.768-13.735 | 65.316 usmean 68.182p25-p75 57.749-74.116 | 1.00x (UserCache) | 5 |
mixed_ | 0.545 usmean 0.678p25-p75 0.502-0.741 | 22.369 usmean 22.561p25-p75 16.332-24.867 | 1.00x (UserCache) | 5 |
product_ | 6.958 usmean 8.125p25-p75 6.180-9.740 | 83.118 usmean 86.982p25-p75 76.250-97.882 | 1.00x (UserCache) | 5 |
multi_ | 0.260 usmean 0.266p25-p75 0.199-0.310 | 10.763 usmean 11.272p25-p75 9.093-12.962 | 1.00x (UserCache) | 5 |
safe_ | 0.843 usmean 0.806p25-p75 0.656-0.918 | 2.648 usmean 2.882p25-p75 2.588-2.969 | 1.00x (UserCache) | 5 |
spl_ | 0.806 usmean 1.017p25-p75 0.763-1.209 | 27.675 usmean 30.500p25-p75 21.711-33.264 | 1.00x (UserCache) | 5 |
spl_ | 1.853 usmean 1.888p25-p75 1.540-2.097 | 42.300 usmean 45.344p25-p75 35.069-54.069 | 1.00x (UserCache) | 5 |
carbon_ | 252.578 usmean 251.068p25-p75 222.442-271.584 | 284.320 usmean 280.795p25-p75 255.715-316.004 | 1.00x (UserCache) | 5 |
carbon_ | 244.618 usmean 252.163p25-p75 220.515-270.127 | 296.670 usmean 299.340p25-p75 278.020-323.788 | 1.00x (UserCache) | 5 |
raw_ | 10.756 usmean 12.484p25-p75 9.736-13.380 | 137.803 usmean 142.077p25-p75 124.740-161.113 | 1.00x (UserCache) | 5 |
raw_ | 8.568 usmean 9.408p25-p75 8.287-11.300 | 153.148 usmean 157.693p25-p75 141.025-168.253 | 1.00x (UserCache) | 5 |
serialized_ | 0.248 usmean 0.316p25-p75 0.233-0.416 | 0.786 usmean 0.802p25-p75 0.728-0.906 | 1.00x (UserCache) | 5 |
reference_ | 0.197 usmean 0.200p25-p75 0.187-0.210 | 0.504 usmean 0.548p25-p75 0.420-0.689 | 1.00x (UserCache) | 5 |
cycle_ | 0.260 usmean 0.269p25-p75 0.239-0.273 | 0.838 usmean 0.858p25-p75 0.721-0.897 | 1.00x (UserCache) | 5 |
nested_ | 0.217 usmean 0.258p25-p75 0.199-0.262 | 10.650 usmean 11.819p25-p75 9.672-14.370 | 1.00x (UserCache) | 5 |
FPM Hot Read (APCu serializer=igbinary)
| Workload | UserCache | APCu/igbinary | Faster/UserCache | Workers |
|---|---|---|---|---|
route_ | 0.261 usmean 0.323p25-p75 0.228-0.390 | 76.385 usmean 81.299p25-p75 66.420-90.985 | 1.00x (UserCache) | 5 |
large_ | 0.255 usmean 0.280p25-p75 0.208-0.314 | 73.193 usmean 76.799p25-p75 60.865-80.220 | 1.00x (UserCache) | 5 |
large_ | 0.169 usmean 0.167p25-p75 0.135-0.183 | 5.360 usmean 5.214p25-p75 4.774-5.853 | 1.00x (UserCache) | 5 |
large_ | 0.600 usmean 0.626p25-p75 0.594-0.635 | 62.959 usmean 68.568p25-p75 60.153-77.256 | 1.00x (UserCache) | 5 |
metadata_ | 1.095 usmean 1.155p25-p75 1.060-1.201 | 89.145 usmean 96.890p25-p75 83.867-112.038 | 1.00x (UserCache) | 5 |
metadata_ | 1.489 usmean 1.519p25-p75 1.144-1.771 | 99.186 usmean 100.651p25-p75 88.242-113.372 | 1.00x (UserCache) | 5 |
sleep_ | 0.378 usmean 0.399p25-p75 0.333-0.446 | 5.746 usmean 6.215p25-p75 5.251-6.228 | 1.00x (UserCache) | 5 |
serialize_ | 0.369 usmean 0.472p25-p75 0.353-0.417 | 4.521 usmean 4.435p25-p75 4.212-4.862 | 1.00x (UserCache) | 5 |
unserialize_ | 0.603 usmean 0.568p25-p75 0.450-0.621 | 3.134 usmean 3.228p25-p75 3.084-3.252 | 1.00x (UserCache) | 5 |
sleep_ | 10.490 usmean 11.093p25-p75 9.790-11.799 | 41.715 usmean 46.508p25-p75 36.748-55.533 | 1.00x (UserCache) | 5 |
sleep_ | 0.348 usmean 0.341p25-p75 0.275-0.373 | 74.521 usmean 73.510p25-p75 59.540-83.896 | 1.00x (UserCache) | 5 |
recursive_ | 11.579 usmean 13.255p25-p75 10.549-13.539 | 51.965 usmean 54.135p25-p75 49.063-56.971 | 1.00x (UserCache) | 5 |
mixed_ | 0.676 usmean 0.664p25-p75 0.520-0.744 | 11.160 usmean 12.684p25-p75 10.325-14.184 | 1.00x (UserCache) | 5 |
product_ | 7.164 usmean 8.154p25-p75 6.881-9.323 | 50.380 usmean 54.179p25-p75 47.878-54.794 | 1.00x (UserCache) | 5 |
multi_ | 0.238 usmean 0.234p25-p75 0.199-0.265 | 6.965 usmean 6.287p25-p75 5.627-7.414 | 1.00x (UserCache) | 5 |
safe_ | 0.636 usmean 0.685p25-p75 0.610-0.696 | 3.013 usmean 3.051p25-p75 2.833-3.220 | 1.00x (UserCache) | 5 |
spl_ | 1.034 usmean 1.006p25-p75 0.853-1.089 | 7.220 usmean 8.027p25-p75 7.017-8.655 | 1.00x (UserCache) | 5 |
spl_ | 1.724 usmean 1.741p25-p75 1.402-1.946 | 14.155 usmean 15.827p25-p75 12.714-16.548 | 1.00x (UserCache) | 5 |
carbon_ | 241.256 usmean 245.096p25-p75 227.960-255.717 | 262.102 usmean 264.984p25-p75 245.554-287.616 | 1.00x (UserCache) | 5 |
carbon_ | 246.977 usmean 250.270p25-p75 222.066-276.604 | 266.909 usmean 273.685p25-p75 251.147-294.671 | 1.00x (UserCache) | 5 |
raw_ | 13.038 usmean 13.930p25-p75 10.575-15.815 | 129.844 usmean 137.004p25-p75 113.206-161.159 | 1.00x (UserCache) | 5 |
raw_ | 11.407 usmean 11.078p25-p75 8.400-13.165 | 129.047 usmean 132.199p25-p75 118.679-144.682 | 1.00x (UserCache) | 5 |
serialized_ | 0.320 usmean 0.338p25-p75 0.269-0.349 | 0.636 usmean 0.661p25-p75 0.620-0.674 | 1.00x (UserCache) | 5 |
reference_ | 0.247 usmean 0.259p25-p75 0.210-0.303 | 0.464 usmean 0.497p25-p75 0.429-0.508 | 1.00x (UserCache) | 5 |
cycle_ | 0.288 usmean 0.277p25-p75 0.217-0.319 | 0.646 usmean 0.655p25-p75 0.612-0.714 | 1.00x (UserCache) | 5 |
nested_ | 0.206 usmean 0.229p25-p75 0.187-0.217 | 8.069 usmean 8.916p25-p75 6.664-9.753 | 1.00x (UserCache) | 5 |
Resident Payload Probe
| Workload | Resident direct access | UserCache fetch + access | Estimated fetch overhead | Resident / UserCache |
|---|---|---|---|---|
constant_resident baseline note | 0.058 us | 0.150 us | 0.092 us | 0.39x |
route_resident baseline note | 0.120 us | 0.265 us | 0.145 us | 0.45x |
large_resident baseline note | 0.074 us | 0.170 us | 0.096 us | 0.44x |
large_resident baseline note | 0.034 us | 0.104 us | 0.070 us | 0.33x |
product_resident baseline note | 0.089 us | 5.904 us | 5.815 us | 0.02x |
Bulk Read: 32 Keys
| Backend | Median/batch | Mean/batch | Mean/key |
|---|---|---|---|
user_UserCache fetchMultiple | 1.469 us | 1.514 us | 0.047 us |
user_UserCache fetch loop | 2.347 us | 2.321 us | 0.073 us |
apcu_APCu fetch array | 10.102 us | 10.080 us | 0.315 us |
apcu_APCu fetch loop | 11.284 us | 11.337 us | 0.354 us |
Bulk Read: 128 Keys
| Backend | Median/batch | Mean/batch | Mean/key |
|---|---|---|---|
user_UserCache fetchMultiple | 5.946 us | 6.074 us | 0.047 us |
user_UserCache fetch loop | 8.351 us | 8.539 us | 0.067 us |
apcu_APCu fetch array | 40.632 us | 40.339 us | 0.315 us |
apcu_APCu fetch loop | 44.931 us | 45.011 us | 0.352 us |
Artifacts
| Artifact | Path |
|---|---|
| CLI repeated read JSON | /workspaces/php-src/php-user_cache_benchmark_harness/results/read-workloads-20260715T042452Z/median/cli-read/user-cache-benchmark-median.json |
| CLI write JSON | /workspaces/php-src/php-user_cache_benchmark_harness/results/read-workloads-20260715T042452Z/median/cli-write/user-cache-benchmark-median.json |
| Resident probe JSON | /workspaces/php-src/php-user_cache_benchmark_harness/results/read-workloads-20260715T042452Z/median/resident-payload-probe.json |
| FPM one fetch/request JSON #1 | /workspaces/php-src/php-user_cache_benchmark_harness/results/read-workloads-20260715T042452Z/median/fpm-read-once-php.json |
| FPM one fetch/request JSON #2 | /workspaces/php-src/php-user_cache_benchmark_harness/results/read-workloads-20260715T042452Z/median/fpm-read-once-igbinary.json |
| FPM hot read JSON #1 | /workspaces/php-src/php-user_cache_benchmark_harness/results/read-workloads-20260715T042452Z/median/fpm-read-hot-php.json |
| FPM hot read JSON #2 | /workspaces/php-src/php-user_cache_benchmark_harness/results/read-workloads-20260715T042452Z/median/fpm-read-hot-igbinary.json |
| Bulk read JSON #1 | /workspaces/php-src/php-user_cache_benchmark_harness/results/read-workloads-20260715T042452Z/median/bulk-read-32.json |
| Bulk read JSON #2 | /workspaces/php-src/php-user_cache_benchmark_harness/results/read-workloads-20260715T042452Z/median/bulk-read-128.json |
Workloads
Click a workload name in the result tables to jump to its description. CLI repeated read stores the payload before timing, then measures only fetch() plus the access probe. CLI store repeatedly stores the payload over the configured key space. Resident direct access runs only the access probe against an already-resident payload. FPM rows run the same fetch path through nginx/php-fpm workers. Bulk read primes multiple keys, then measures fetching the whole key set.
| Workload | What It Measures | Measured In |
|---|---|---|
constant_Constant array | Small immutable constant-array payload.Mutates fetched copy: no | CLI repeated read, CLI store, Resident direct access, FPM one fetch/request |
route_Compiled route table read | Framework-shaped compiled route table and URL generator arrays.Mutates fetched copy: no | CLI repeated read, CLI store, Resident direct access, FPM one fetch/request, FPM hot read |
large_Large nested array | Larger object-free nested array with repeated scalar leaves.Mutates fetched copy: no | CLI repeated read, CLI store, Resident direct access, FPM one fetch/request, FPM hot read |
large_Large immutable string | Large string payload that stresses byte-copy avoidance on repeated reads.Mutates fetched copy: no | CLI repeated read, CLI store, Resident direct access, FPM one fetch/request, FPM hot read |
large_Large direct userland-object graph | Large payload object containing many array rows and a child object.Mutates fetched copy: no | CLI repeated read, CLI store, FPM one fetch/request, FPM hot read |
metadata_Application metadata object read | Application metadata object with route and service metadata arrays.Mutates fetched copy: no | CLI repeated read, CLI store, FPM one fetch/request, FPM hot read |
metadata_Application metadata object fetch and mutate | Fetches a cached userland object graph, then mutates the fetched copy.Mutates fetched copy: yes | CLI repeated read, CLI store, FPM one fetch/request, FPM hot read |
sleep___sleep()/__wakeup() contract object | Object routed through the serialization contract: __sleep() filters state on store, __wakeup() runs per fetch.Mutates fetched copy: no | CLI repeated read, CLI store, FPM one fetch/request, FPM hot read |
serialize___serialize()/__unserialize() entity | Modern entity pair using the __serialize()/__unserialize() contract with a related entity.Mutates fetched copy: no | CLI repeated read, CLI store, FPM one fetch/request, FPM hot read |
unserialize___unserialize() only entity | Userland entity declaring __unserialize() without __serialize(), matching the legacy object-data format.Mutates fetched copy: no | CLI repeated read, CLI store, FPM one fetch/request, FPM hot read |
sleep___sleep() entity result-set collection | ORM-style result set: 100 small entities each running the __sleep()/__wakeup() contract.Mutates fetched copy: no | CLI repeated read, CLI store, FPM one fetch/request, FPM hot read |
sleep___sleep() object holding a large dataset | Report-style object with the standard large row set behind the serialization contract.Mutates fetched copy: no | CLI repeated read, CLI store, FPM one fetch/request, FPM hot read |
recursive_Recursive parent/child reference graph | Category-tree object graph with parent back-references and the __sleep()/__wakeup() contract.Mutates fetched copy: no | CLI repeated read, CLI store, FPM one fetch/request, FPM hot read |
mixed_Mixed plain and contract payload | Realistic cache entry mixing plain arrays, __serialize() entities, and __sleep() objects.Mutates fetched copy: no | CLI repeated read, CLI store, FPM one fetch/request, FPM hot read |
product_Product listing view-model | Production-shaped product-list cache entry mixing DTO objects, facet arrays, pagination context, and generated-at metadata.Mutates fetched copy: no | CLI repeated read, CLI store, Resident direct access, FPM one fetch/request, FPM hot read |
multi_Multi-key configuration read | Configuration-entry map carried over from the old multi-key workload.Mutates fetched copy: no | CLI repeated read, CLI store, FPM one fetch/request, FPM hot read |
safe_DateTime/DateInterval direct-restore object | DateTimeImmutable, DateTimeZone, and DateInterval safe-direct state.Mutates fetched copy: no | CLI repeated read, CLI store, FPM one fetch/request, FPM hot read |
spl_SPL collection direct-restore object | ArrayObject, ArrayIterator, RecursiveArrayIterator, and SplFixedArray state.Mutates fetched copy: no | CLI repeated read, CLI store, FPM one fetch/request, FPM hot read |
spl_SPL linked-list direct-restore object | SplDoublyLinkedList, SplQueue, and SplStack state.Mutates fetched copy: no | CLI repeated read, CLI store, FPM one fetch/request |
spl_SPL heap direct-restore object | SplMinHeap, SplMaxHeap, and SplPriorityQueue state.Mutates fetched copy: no | CLI repeated read, CLI store, FPM one fetch/request, FPM hot read |
carbon_Carbon DateTime serializer object | CarbonImmutable/Carbon/CarbonTimeZone object graph used to compare DateTime-derived restore costs.Mutates fetched copy: no | CLI repeated read, CLI store, FPM one fetch/request, FPM hot read |
carbon_Model with Carbon properties | Dummy model objects with three Carbon properties: createdAt, updatedAt, and publishedAt.Mutates fetched copy: no | CLI repeated read, CLI store, FPM one fetch/request, FPM hot read |
raw_Raw DateTime serializer object | DateTimeImmutable/DateTime/DateTimeZone object graph mirroring carbon_datetime_object with native date types.Mutates fetched copy: no | CLI repeated read, CLI store, FPM one fetch/request, FPM hot read |
raw_Model with DateTime properties | Dummy model objects with three native DateTime properties: createdAt, updatedAt, and publishedAt.Mutates fetched copy: no | CLI repeated read, CLI store, FPM one fetch/request, FPM hot read |
serialized_Serialized cyclic object | Cyclic object graph workload used to exercise serialization fallback behavior.Mutates fetched copy: no | CLI repeated read, CLI store, FPM one fetch/request, FPM hot read |
reference_Assigned object with child reference | Userland object with a nested referenced child object.Mutates fetched copy: no | CLI repeated read, CLI store, FPM one fetch/request, FPM hot read |
cycle_Assigned cyclic object | Cyclic userland object graph with identity-preserving peer reference.Mutates fetched copy: no | CLI repeated read, CLI store, FPM one fetch/request, FPM hot read |
nested_Assigned nested array mutation | Nested array payload used by the old assignment mutation workload.Mutates fetched copy: no | CLI repeated read, CLI store, FPM one fetch/request, FPM hot read |
bulk_read_32_keysBulk Read: 32 Keys | Uses the multi-key config payload, primes 32 keys before timing, then repeatedly fetches all keys as a batch. UserCache is measured with fetchMultiple() and with a per-key fetch() loop; APCu is measured with apcu_fetch(array) and with a per-key loop.Measured batches per iteration: 1500 | Bulk read |
bulk_read_128_keysBulk Read: 128 Keys | Uses the multi-key config payload, primes 128 keys before timing, then repeatedly fetches all keys as a batch. UserCache is measured with fetchMultiple() and with a per-key fetch() loop; APCu is measured with apcu_fetch(array) and with a per-key loop.Measured batches per iteration: 600 | Bulk read |
Notes
Already-resident data is a baseline
The resident table does not include UserCache store time. It compares direct access to an already-resident payload with fetching a previously stored UserCache entry and running the same access probe. The difference estimates fetch and materialization overhead after the value has already been stored. The primary comparison for UserCache is against APCu/php and APCu/igbinary when reconstructing object-heavy payloads, not against literals already resident in the request.
Slower stores are an expected trade-off for faster reads
Store workloads are shown to make the write-side cost explicit. APCu-style shared caches are usually used for read-heavy paths, where a stored value is read many times. Store throughput is an intentional trade-off in this design, not the metric it is optimized for.