UserCache\Cache Performance Report
Generated at 2026-08-01T14:42:39+00:00. Times are in microseconds; lower is faster.
- UserCache
- 1.00x
- APCu/igbinary
- 0.10x
- APCu/php
- 0.07x
- UserCache
- 1.00x
- APCu/igbinary
- 2.14x
- APCu/php
- 1.75x
- UserCache
- 1.00x
- APCu/igbinary
- 6.96x
- APCu/php
- 2.35x
- UserCache
- 1.00x
- APCu/php
- 0.17x
- UserCache
- 1.00x
- APCu/igbinary
- 0.26x
- UserCache
- 1.00x
- APCu/php
- 0.06x
- UserCache
- 1.00x
- APCu/igbinary
- 0.10x
Environment
| PHP | 8.6.0-dev (cli) |
|---|---|
| Thread Safety | NTS |
| Binary | /workspaces/php-src/sapi/cli/php |
| System | Linux 46f2bc026398 7.0.11-orbstack-00360-gc9bc4d96ac70 #1 SMP PREEMPT Thu Jun 4 16:40:25 UTC 2026 aarch64 |
| CPU | Apple M5 Max, 18 cores (host-supplied) |
| RAM | 31.36 GiB (VM allocation), host 128.00 GiB |
| Virtualization | OrbStack |
| user_cache.shm_size | 128M |
| Loaded extensions | apcu, Core, ctype, date, dom, fileinfo, filter, hash, iconv, igbinary, json, lexbor, libxml, openssl, 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.116 usmean 0.115 | 1.605 usmean 1.608 | 1.213 usmean 1.219 | 1.00x (UserCache) |
route_ | 0.135 usmean 0.137 | 131.338 usmean 131.260 | 45.901 usmean 46.125 | 1.00x (UserCache) |
large_ | 0.109 usmean 0.109 | 72.324 usmean 72.962 | 38.089 usmean 38.737 | 1.00x (UserCache) |
large_ | 0.081 usmean 0.081 | 3.234 usmean 3.235 | 3.308 usmean 3.340 | 1.00x (UserCache) |
large_ | 0.135 usmean 0.135 | 72.527 usmean 72.836 | 38.436 usmean 38.700 | 1.00x (UserCache) |
metadata_ | 0.190 usmean 0.191 | 140.305 usmean 140.543 | 55.828 usmean 56.426 | 1.00x (UserCache) |
metadata_ | 0.246 usmean 0.246 | 140.868 usmean 140.492 | 55.734 usmean 56.324 | 1.00x (UserCache) |
sleep_ | 0.182 usmean 0.184 | 6.992 usmean 6.975 | 3.910 usmean 3.895 | 1.00x (UserCache) |
serialize_ | 0.262 usmean 0.263 | 2.780 usmean 2.772 | 2.243 usmean 2.245 | 1.00x (UserCache) |
unserialize_ | 0.327 usmean 0.328 | 2.899 usmean 2.936 | 2.321 usmean 2.324 | 1.00x (UserCache) |
sleep_ | 7.017 usmean 7.052 | 41.565 usmean 41.495 | 24.514 usmean 24.621 | 1.00x (UserCache) |
sleep_ | 0.163 usmean 0.165 | 70.097 usmean 70.182 | 38.332 usmean 38.488 | 1.00x (UserCache) |
recursive_ | 7.873 usmean 8.451 | 29.077 usmean 29.083 | 24.054 usmean 24.323 | 1.00x (UserCache) |
mixed_ | 0.379 usmean 0.385 | 12.286 usmean 12.286 | 8.261 usmean 8.246 | 1.00x (UserCache) |
product_ | 4.347 usmean 4.390 | 49.947 usmean 50.458 | 30.712 usmean 30.891 | 1.00x (UserCache) |
multi_ | 0.133 usmean 0.134 | 6.535 usmean 6.527 | 4.064 usmean 4.072 | 1.00x (UserCache) |
safe_ | 0.416 usmean 0.423 | 2.060 usmean 2.068 | 2.056 usmean 2.058 | 1.00x (UserCache) |
spl_ | 0.608 usmean 0.622 | 14.867 usmean 15.036 | 5.551 usmean 5.571 | 1.00x (UserCache) |
spl_ | 1.291 usmean 1.297 | 14.740 usmean 14.914 | 5.420 usmean 5.413 | 1.00x (UserCache) |
spl_ | 0.903 usmean 0.908 | 23.459 usmean 23.473 | 9.664 usmean 9.671 | 1.00x (UserCache) |
carbon_ | 136.529 usmean 137.746 | 154.668 usmean 154.819 | 147.211 usmean 147.466 | 1.00x (UserCache) |
carbon_ | 136.744 usmean 137.524 | 163.246 usmean 163.606 | 155.312 usmean 154.883 | 1.00x (UserCache) |
raw_ | 6.719 usmean 6.733 | 80.565 usmean 80.721 | 70.625 usmean 71.004 | 1.00x (UserCache) |
raw_ | 6.123 usmean 6.133 | 84.762 usmean 85.250 | 72.490 usmean 72.847 | 1.00x (UserCache) |
serialized_ | 0.132 usmean 0.133 | 0.333 usmean 0.371 | 0.333 usmean 0.369 | 1.00x (UserCache) |
reference_ | 0.114 usmean 0.116 | 0.293 usmean 0.293 | 0.331 usmean 0.331 | 1.00x (UserCache) |
cycle_ | 0.132 usmean 0.134 | 0.313 usmean 0.355 | 0.334 usmean 0.368 | 1.00x (UserCache) |
nested_ | 0.125 usmean 0.126 | 6.887 usmean 6.881 | 4.940 usmean 4.929 | 1.00x (UserCache) |
CLI Store
| Workload | UserCache | APCu/php | APCu/igbinary | Faster/UserCache |
|---|---|---|---|---|
constant_store trade-off note | 2.029 usmean 2.034 | 1.067 usmean 1.100 | 0.804 usmean 0.836 | 2.52x (APCu/igbinary) |
route_store trade-off note | 85.738 usmean 85.680 | 78.918 usmean 78.893 | 59.563 usmean 59.844 | 1.44x (APCu/igbinary) |
large_store trade-off note | 64.476 usmean 64.949 | 45.257 usmean 45.289 | 37.411 usmean 37.332 | 1.72x (APCu/igbinary) |
large_store trade-off note | 3.214 usmean 3.214 | 3.061 usmean 3.060 | 3.122 usmean 3.140 | 1.05x (APCu/php) |
large_store trade-off note | 92.167 usmean 92.109 | 44.686 usmean 44.702 | 36.528 usmean 36.613 | 2.52x (APCu/igbinary) |
metadata_store trade-off note | 141.938 usmean 141.880 | 83.279 usmean 82.867 | 66.386 usmean 66.590 | 2.14x (APCu/igbinary) |
metadata_store trade-off note | 142.198 usmean 142.248 | 82.801 usmean 83.079 | 66.606 usmean 66.705 | 2.13x (APCu/igbinary) |
sleep_store trade-off note | 8.352 usmean 8.391 | 4.659 usmean 4.628 | 3.804 usmean 3.770 | 2.20x (APCu/igbinary) |
serialize_store trade-off note | 5.044 usmean 5.055 | 1.832 usmean 1.864 | 1.826 usmean 1.819 | 2.76x (APCu/igbinary) |
unserialize_store trade-off note | 4.798 usmean 4.814 | 1.827 usmean 1.858 | 1.679 usmean 1.727 | 2.86x (APCu/igbinary) |
sleep_store trade-off note | 79.395 usmean 79.600 | 26.250 usmean 26.249 | 18.904 usmean 19.053 | 4.20x (APCu/igbinary) |
sleep_store trade-off note | 90.013 usmean 90.114 | 45.008 usmean 45.500 | 37.527 usmean 37.452 | 2.40x (APCu/igbinary) |
recursive_store trade-off note | 36.441 usmean 36.468 | 16.845 usmean 16.863 | 14.154 usmean 14.168 | 2.57x (APCu/igbinary) |
mixed_store trade-off note | 19.890 usmean 20.113 | 8.160 usmean 8.193 | 7.962 usmean 7.991 | 2.50x (APCu/igbinary) |
product_store trade-off note | 53.282 usmean 53.165 | 20.051 usmean 20.065 | 18.528 usmean 18.549 | 2.88x (APCu/igbinary) |
multi_store trade-off note | 7.027 usmean 7.023 | 4.536 usmean 4.508 | 3.542 usmean 3.500 | 1.98x (APCu/igbinary) |
safe_store trade-off note | 1.477 usmean 1.522 | 1.038 usmean 1.071 | 1.150 usmean 1.170 | 1.42x (APCu/php) |
spl_store trade-off note | 14.739 usmean 14.830 | 9.653 usmean 9.703 | 4.334 usmean 4.329 | 3.40x (APCu/igbinary) |
spl_store trade-off note | 13.703 usmean 13.775 | 9.729 usmean 9.736 | 3.989 usmean 3.939 | 3.43x (APCu/igbinary) |
spl_store trade-off note | 25.339 usmean 25.345 | 16.801 usmean 16.873 | 8.809 usmean 8.832 | 2.88x (APCu/igbinary) |
carbon_store trade-off note | 342.010 usmean 342.190 | 267.014 usmean 266.620 | 266.837 usmean 267.274 | 1.28x (APCu/igbinary) |
carbon_store trade-off note | 373.148 usmean 372.989 | 298.183 usmean 297.798 | 292.753 usmean 293.336 | 1.27x (APCu/igbinary) |
raw_store trade-off note | 65.472 usmean 65.545 | 41.639 usmean 41.685 | 41.691 usmean 41.879 | 1.57x (APCu/php) |
raw_store trade-off note | 65.366 usmean 65.485 | 44.119 usmean 44.194 | 43.571 usmean 43.680 | 1.50x (APCu/igbinary) |
serialized_store trade-off note | 0.510 usmean 0.535 | 0.260 usmean 0.260 | 0.263 usmean 0.264 | 1.96x (APCu/php) |
reference_store trade-off note | 0.490 usmean 0.502 | 0.243 usmean 0.245 | 0.261 usmean 0.262 | 2.02x (APCu/php) |
cycle_store trade-off note | 0.492 usmean 0.497 | 0.266 usmean 0.270 | 0.260 usmean 0.265 | 1.89x (APCu/igbinary) |
nested_store trade-off note | 8.595 usmean 8.575 | 4.270 usmean 4.285 | 4.983 usmean 4.915 | 2.01x (APCu/php) |
Store Memory Per Entry
Marginal shared-memory bytes one additional entry of each workload costs the backend, measured as the backend used-memory delta across 64 distinct keys during the CLI store phase. Fixed segment overhead (headers, hash tables) cancels out of the delta. serialize() and igbinary byte sizes are shown as wire-size references; lower is better.
| Workload | UserCache | APCu/php | APCu/igbinary | Smallest/UserCache | serialize() | igbinary |
|---|---|---|---|---|---|---|
constant_ | 5,552 B | 1,864 B | 840 B | 6.61x (APCu/igbinary) | 1,602 B | 575 B |
route_ | 278,624 B | 168,336 B | 34,808 B | 8.00x (APCu/igbinary) | 168,073 B | 34,538 B |
large_ | 213,232 B | 90,280 B | 35,488 B | 6.01x (APCu/igbinary) | 90,025 B | 35,224 B |
large_ | 196,839 B | 196,864 B | 196,879 B | 1.00x (UserCache) | 196,620 B | 196,617 B |
large_ | 214,040 B | 90,568 B | 35,776 B | 5.98x (APCu/igbinary) | 90,310 B | 35,508 B |
metadata_ | 319,319 B | 180,904 B | 41,815 B | 7.64x (APCu/igbinary) | 180,641 B | 41,538 B |
metadata_ | 319,343 B | 180,920 B | 41,831 B | 7.63x (APCu/igbinary) | 180,654 B | 41,551 B |
sleep_ | 21,632 B | 9,896 B | 3,048 B | 7.10x (APCu/igbinary) | 9,637 B | 2,780 B |
serialize_ | 14,448 B | 4,136 B | 2,488 B | 5.81x (APCu/igbinary) | 3,864 B | 2,209 B |
unserialize_ | 14,744 B | 4,528 B | 2,696 B | 5.47x (APCu/igbinary) | 4,256 B | 2,416 B |
sleep_ | 74,560 B | 30,688 B | 8,408 B | 8.87x (APCu/igbinary) | 30,409 B | 8,122 B |
sleep_ | 214,352 B | 91,320 B | 36,520 B | 5.87x (APCu/igbinary) | 91,053 B | 36,246 B |
recursive_ | 47,072 B | 18,728 B | 5,496 B | 8.56x (APCu/igbinary) | 18,462 B | 5,219 B |
mixed_ | 43,888 B | 15,544 B | 7,256 B | 6.05x (APCu/igbinary) | 15,278 B | 6,976 B |
product_ | 86,336 B | 38,112 B | 12,664 B | 6.82x (APCu/igbinary) | 37,844 B | 12,389 B |
multi_ | 26,240 B | 9,615 B | 2,504 B | 10.48x (APCu/igbinary) | 9,351 B | 2,227 B |
safe_ | 2,488 B | 872 B | 600 B | 4.15x (APCu/igbinary) | 615 B | 328 B |
spl_ | 27,080 B | 15,871 B | 3,168 B | 8.55x (APCu/igbinary) | 15,602 B | 2,895 B |
spl_ | 21,567 B | 16,056 B | 3,167 B | 6.81x (APCu/igbinary) | 15,786 B | 2,884 B |
spl_ | 39,032 B | 22,712 B | 4,088 B | 9.55x (APCu/igbinary) | 22,449 B | 3,819 B |
carbon_ | 67,376 B | 32,048 B | 7,304 B | 9.22x (APCu/igbinary) | 31,783 B | 7,031 B |
carbon_ | 73,720 B | 31,304 B | 8,304 B | 8.88x (APCu/igbinary) | 31,040 B | 8,038 B |
raw_ | 92,736 B | 28,080 B | 6,864 B | 13.51x (APCu/igbinary) | 27,818 B | 6,594 B |
raw_ | 94,336 B | 30,392 B | 8,296 B | 11.37x (APCu/igbinary) | 30,128 B | 8,025 B |
serialized_ | 616 B | 464 B | 376 B | 1.64x (APCu/igbinary) | 194 B | 99 B |
reference_ | 656 B | 440 B | 400 B | 1.64x (APCu/igbinary) | 170 B | 124 B |
cycle_ | 616 B | 456 B | 368 B | 1.67x (APCu/igbinary) | 184 B | 89 B |
nested_ | 31,624 B | 8,168 B | 3,344 B | 9.46x (APCu/igbinary) | 7,897 B | 3,066 B |
Empty-cache fixed overhead (headers and hash tables, excluded from the per-entry deltas above): UserCache 4.55 MiB, APCu/php 0.13 MiB, APCu/igbinary 0.13 MiB.
FPM One Fetch Per Request (APCu serializer=php)
| Workload | UserCache | APCu/php | Faster/UserCache | Workers |
|---|---|---|---|---|
constant_ | 2.605 usmean 2.832p25-p75 2.000-3.552 | 6.083 usmean 6.361p25-p75 5.000-7.375 | 1.00x (UserCache) | 5 |
route_ | 1.916 usmean 2.394p25-p75 1.542-3.166 | 252.500 usmean 260.874p25-p75 232.770-280.240 | 1.00x (UserCache) | 5 |
large_ | 1.875 usmean 2.336p25-p75 1.458-2.959 | 137.229 usmean 135.907p25-p75 130.042-145.719 | 1.00x (UserCache) | 5 |
large_ | 2.021 usmean 2.638p25-p75 1.625-3.125 | 8.021 usmean 8.033p25-p75 7.000-8.875 | 1.00x (UserCache) | 5 |
large_ | 3.021 usmean 3.702p25-p75 2.334-4.709 | 155.667 usmean 153.761p25-p75 142.667-164.667 | 1.00x (UserCache) | 5 |
metadata_ | 3.417 usmean 4.098p25-p75 2.698-4.834 | 276.875 usmean 278.627p25-p75 256.187-290.719 | 1.00x (UserCache) | 5 |
metadata_ | 2.875 usmean 3.437p25-p75 2.167-3.969 | 244.501 usmean 250.987p25-p75 227.646-267.333 | 1.00x (UserCache) | 5 |
sleep_ | 2.917 usmean 3.303p25-p75 2.167-3.927 | 17.854 usmean 18.196p25-p75 15.542-20.823 | 1.00x (UserCache) | 5 |
serialize_ | 3.459 usmean 3.810p25-p75 2.708-4.625 | 8.459 usmean 8.710p25-p75 7.031-10.208 | 1.00x (UserCache) | 5 |
unserialize_ | 4.125 usmean 4.278p25-p75 3.281-5.260 | 9.980 usmean 10.248p25-p75 8.729-11.802 | 1.00x (UserCache) | 5 |
sleep_ | 16.396 usmean 16.168p25-p75 13.687-18.469 | 101.375 usmean 98.935p25-p75 79.667-109.916 | 1.00x (UserCache) | 5 |
sleep_ | 2.980 usmean 3.485p25-p75 2.125-4.469 | 155.688 usmean 157.648p25-p75 129.448-162.594 | 1.00x (UserCache) | 5 |
recursive_ | 15.833 usmean 15.816p25-p75 14.323-17.927 | 67.021 usmean 66.027p25-p75 62.312-71.292 | 1.00x (UserCache) | 5 |
mixed_ | 4.438 usmean 4.876p25-p75 3.250-6.011 | 31.146 usmean 32.827p25-p75 27.500-36.302 | 1.00x (UserCache) | 5 |
product_ | 17.792 usmean 17.555p25-p75 13.833-20.510 | 94.605 usmean 95.733p25-p75 80.312-111.208 | 1.00x (UserCache) | 5 |
multi_ | 2.667 usmean 2.892p25-p75 2.042-3.583 | 15.813 usmean 16.214p25-p75 13.896-17.791 | 1.00x (UserCache) | 5 |
safe_ | 8.521 usmean 9.765p25-p75 6.948-10.771 | 15.146 usmean 16.384p25-p75 11.990-19.583 | 1.00x (UserCache) | 5 |
spl_ | 5.146 usmean 6.531p25-p75 3.865-7.750 | 40.188 usmean 43.036p25-p75 32.000-49.001 | 1.00x (UserCache) | 5 |
spl_ | 5.959 usmean 6.328p25-p75 4.708-7.541 | 41.250 usmean 41.128p25-p75 33.927-46.135 | 1.00x (UserCache) | 5 |
spl_ | 5.605 usmean 5.914p25-p75 4.156-7.000 | 58.604 usmean 59.215p25-p75 43.396-67.605 | 1.00x (UserCache) | 5 |
carbon_ | 288.938 usmean 276.509p25-p75 248.458-306.948 | 327.458 usmean 325.886p25-p75 273.125-341.354 | 1.00x (UserCache) | 5 |
carbon_ | 250.563 usmean 255.346p25-p75 220.156-284.125 | 301.667 usmean 318.720p25-p75 260.479-341.855 | 1.00x (UserCache) | 5 |
raw_ | 25.625 usmean 27.459p25-p75 21.645-31.531 | 129.125 usmean 139.496p25-p75 116.573-155.458 | 1.00x (UserCache) | 5 |
raw_ | 21.375 usmean 22.550p25-p75 17.823-25.625 | 132.584 usmean 143.457p25-p75 119.823-161.552 | 1.00x (UserCache) | 5 |
serialized_ | 3.292 usmean 3.719p25-p75 2.625-5.208 | 4.063 usmean 4.657p25-p75 2.834-6.136 | 1.00x (UserCache) | 5 |
reference_ | 3.000 usmean 3.534p25-p75 2.375-4.135 | 3.688 usmean 4.132p25-p75 2.750-5.000 | 1.00x (UserCache) | 5 |
cycle_ | 2.917 usmean 3.655p25-p75 2.375-4.250 | 3.250 usmean 3.667p25-p75 2.583-4.594 | 1.00x (UserCache) | 5 |
nested_ | 2.563 usmean 2.720p25-p75 1.959-3.458 | 18.938 usmean 19.802p25-p75 16.667-22.511 | 1.00x (UserCache) | 5 |
FPM One Fetch Per Request (APCu serializer=igbinary)
| Workload | UserCache | APCu/igbinary | Faster/UserCache | Workers |
|---|---|---|---|---|
constant_ | 2.458 usmean 2.657p25-p75 1.792-3.291 | 4.958 usmean 5.779p25-p75 3.928-6.333 | 1.00x (UserCache) | 5 |
route_ | 2.209 usmean 2.593p25-p75 1.406-3.281 | 95.376 usmean 99.463p25-p75 88.448-106.188 | 1.00x (UserCache) | 5 |
large_ | 2.250 usmean 2.627p25-p75 1.573-3.541 | 70.542 usmean 80.659p25-p75 61.115-92.646 | 1.00x (UserCache) | 5 |
large_ | 1.875 usmean 2.666p25-p75 1.167-3.344 | 8.125 usmean 7.985p25-p75 5.959-9.562 | 1.00x (UserCache) | 5 |
large_ | 2.375 usmean 3.103p25-p75 1.698-3.979 | 74.438 usmean 78.328p25-p75 67.927-84.063 | 1.00x (UserCache) | 5 |
metadata_ | 3.688 usmean 4.088p25-p75 2.698-5.000 | 103.063 usmean 107.597p25-p75 95.719-111.781 | 1.00x (UserCache) | 5 |
metadata_ | 4.542 usmean 5.197p25-p75 2.657-6.427 | 106.958 usmean 113.770p25-p75 99.239-113.635 | 1.00x (UserCache) | 5 |
sleep_ | 2.834 usmean 3.697p25-p75 2.084-4.719 | 12.813 usmean 14.015p25-p75 10.865-16.313 | 1.00x (UserCache) | 5 |
serialize_ | 3.667 usmean 4.208p25-p75 2.792-5.250 | 8.084 usmean 8.723p25-p75 6.656-10.480 | 1.00x (UserCache) | 5 |
unserialize_ | 5.146 usmean 5.180p25-p75 3.667-6.437 | 10.292 usmean 10.539p25-p75 8.229-12.062 | 1.00x (UserCache) | 5 |
sleep_ | 17.438 usmean 17.575p25-p75 13.854-19.854 | 61.501 usmean 59.074p25-p75 49.771-67.803 | 1.00x (UserCache) | 5 |
sleep_ | 3.333 usmean 3.765p25-p75 2.656-4.750 | 88.375 usmean 88.784p25-p75 75.677-94.250 | 1.00x (UserCache) | 5 |
recursive_ | 14.875 usmean 15.447p25-p75 11.490-16.667 | 38.646 usmean 41.153p25-p75 32.812-44.313 | 1.00x (UserCache) | 5 |
mixed_ | 5.063 usmean 5.556p25-p75 3.834-6.719 | 26.459 usmean 26.701p25-p75 21.865-29.802 | 1.00x (UserCache) | 5 |
product_ | 20.209 usmean 20.080p25-p75 14.542-23.636 | 71.125 usmean 75.455p25-p75 64.448-86.178 | 1.00x (UserCache) | 5 |
multi_ | 3.125 usmean 3.485p25-p75 2.281-4.469 | 14.709 usmean 14.686p25-p75 12.657-16.708 | 1.00x (UserCache) | 5 |
safe_ | 7.000 usmean 7.659p25-p75 5.531-9.635 | 12.188 usmean 13.018p25-p75 9.282-15.542 | 1.00x (UserCache) | 5 |
spl_ | 4.876 usmean 5.330p25-p75 3.917-6.552 | 17.438 usmean 17.720p25-p75 15.417-19.635 | 1.00x (UserCache) | 5 |
spl_ | 6.646 usmean 7.284p25-p75 5.291-9.156 | 18.667 usmean 19.327p25-p75 15.375-21.771 | 1.00x (UserCache) | 5 |
spl_ | 6.813 usmean 7.320p25-p75 5.375-9.042 | 35.334 usmean 35.271p25-p75 29.969-40.552 | 1.00x (UserCache) | 5 |
carbon_ | 277.355 usmean 276.789p25-p75 226.990-295.511 | 302.563 usmean 301.926p25-p75 242.073-320.500 | 1.00x (UserCache) | 5 |
carbon_ | 243.416 usmean 249.795p25-p75 227.115-267.583 | 275.605 usmean 285.417p25-p75 259.312-303.656 | 1.00x (UserCache) | 5 |
raw_ | 29.542 usmean 28.907p25-p75 24.875-33.781 | 137.041 usmean 130.249p25-p75 98.969-151.219 | 1.00x (UserCache) | 5 |
raw_ | 24.771 usmean 24.544p25-p75 20.552-29.052 | 133.979 usmean 129.971p25-p75 118.604-144.094 | 1.00x (UserCache) | 5 |
serialized_ | 3.063 usmean 3.525p25-p75 2.282-4.208 | 4.063 usmean 4.485p25-p75 3.240-5.417 | 1.00x (UserCache) | 5 |
reference_ | 2.500 usmean 2.685p25-p75 1.823-3.250 | 3.042 usmean 3.321p25-p75 2.458-3.750 | 1.00x (UserCache) | 5 |
cycle_ | 2.896 usmean 3.288p25-p75 2.240-3.885 | 3.396 usmean 3.837p25-p75 2.667-4.437 | 1.00x (UserCache) | 5 |
nested_ | 2.896 usmean 3.193p25-p75 2.166-3.958 | 18.458 usmean 17.867p25-p75 15.354-20.854 | 1.00x (UserCache) | 5 |
FPM Hot Read (APCu serializer=php)
| Workload | UserCache | APCu/php | Faster/UserCache | Workers |
|---|---|---|---|---|
route_ | 0.241 usmean 0.264p25-p75 0.209-0.317 | 144.208 usmean 153.572p25-p75 134.443-157.722 | 1.00x (UserCache) | 5 |
large_ | 0.198 usmean 0.221p25-p75 0.172-0.266 | 76.507 usmean 77.493p25-p75 75.574-77.759 | 1.00x (UserCache) | 5 |
large_ | 0.126 usmean 0.125p25-p75 0.117-0.133 | 4.661 usmean 4.617p25-p75 4.271-4.803 | 1.00x (UserCache) | 5 |
large_ | 0.486 usmean 0.490p25-p75 0.475-0.513 | 73.106 usmean 76.920p25-p75 72.248-74.271 | 1.00x (UserCache) | 5 |
metadata_ | 0.850 usmean 0.849p25-p75 0.813-0.881 | 151.349 usmean 154.998p25-p75 145.496-159.044 | 1.00x (UserCache) | 5 |
metadata_ | 0.889 usmean 0.889p25-p75 0.863-0.906 | 144.132 usmean 152.466p25-p75 140.999-155.482 | 1.00x (UserCache) | 5 |
sleep_ | 0.245 usmean 0.249p25-p75 0.234-0.260 | 7.455 usmean 7.785p25-p75 7.256-7.672 | 1.00x (UserCache) | 5 |
serialize_ | 0.319 usmean 0.327p25-p75 0.305-0.335 | 3.092 usmean 3.186p25-p75 3.010-3.199 | 1.00x (UserCache) | 5 |
unserialize_ | 0.384 usmean 0.389p25-p75 0.377-0.396 | 3.194 usmean 3.245p25-p75 3.150-3.209 | 1.00x (UserCache) | 5 |
sleep_ | 7.475 usmean 7.534p25-p75 7.329-7.692 | 45.141 usmean 49.931p25-p75 44.112-49.630 | 1.00x (UserCache) | 5 |
sleep_ | 0.230 usmean 0.226p25-p75 0.206-0.240 | 73.350 usmean 79.976p25-p75 71.217-91.458 | 1.00x (UserCache) | 5 |
recursive_ | 6.941 usmean 7.435p25-p75 6.880-7.076 | 41.227 usmean 44.618p25-p75 40.261-42.545 | 1.00x (UserCache) | 5 |
mixed_ | 0.448 usmean 0.449p25-p75 0.430-0.471 | 12.690 usmean 14.256p25-p75 12.257-13.776 | 1.00x (UserCache) | 5 |
product_ | 5.343 usmean 5.356p25-p75 5.202-5.514 | 50.895 usmean 57.813p25-p75 50.264-62.098 | 1.00x (UserCache) | 5 |
multi_ | 0.178 usmean 0.180p25-p75 0.170-0.192 | 6.791 usmean 7.143p25-p75 6.659-6.981 | 1.00x (UserCache) | 5 |
safe_ | 0.510 usmean 0.527p25-p75 0.495-0.550 | 2.253 usmean 2.412p25-p75 2.179-2.327 | 1.00x (UserCache) | 5 |
spl_ | 0.688 usmean 0.699p25-p75 0.662-0.710 | 16.634 usmean 17.535p25-p75 15.746-17.249 | 1.00x (UserCache) | 5 |
spl_ | 1.028 usmean 1.028p25-p75 1.005-1.037 | 24.645 usmean 26.444p25-p75 24.176-26.115 | 1.00x (UserCache) | 5 |
carbon_ | 145.020 usmean 149.419p25-p75 142.020-153.616 | 165.512 usmean 167.472p25-p75 162.488-167.949 | 1.00x (UserCache) | 5 |
carbon_ | 145.585 usmean 148.561p25-p75 143.622-152.418 | 172.366 usmean 176.834p25-p75 170.228-175.152 | 1.00x (UserCache) | 5 |
raw_ | 7.294 usmean 7.316p25-p75 7.197-7.363 | 81.075 usmean 81.920p25-p75 80.366-82.983 | 1.00x (UserCache) | 5 |
raw_ | 6.806 usmean 7.034p25-p75 6.755-6.874 | 91.123 usmean 94.583p25-p75 89.688-94.950 | 1.00x (UserCache) | 5 |
serialized_ | 0.216 usmean 0.217p25-p75 0.205-0.224 | 0.452 usmean 0.491p25-p75 0.441-0.498 | 1.00x (UserCache) | 5 |
reference_ | 0.174 usmean 0.179p25-p75 0.169-0.194 | 0.338 usmean 0.394p25-p75 0.329-0.422 | 1.00x (UserCache) | 5 |
cycle_ | 0.226 usmean 0.225p25-p75 0.213-0.237 | 0.546 usmean 0.561p25-p75 0.494-0.629 | 1.00x (UserCache) | 5 |
nested_ | 0.181 usmean 0.184p25-p75 0.162-0.202 | 8.510 usmean 8.941p25-p75 8.200-9.065 | 1.00x (UserCache) | 5 |
FPM Hot Read (APCu serializer=igbinary)
| Workload | UserCache | APCu/igbinary | Faster/UserCache | Workers |
|---|---|---|---|---|
route_ | 0.228 usmean 0.251p25-p75 0.197-0.288 | 50.365 usmean 54.661p25-p75 48.817-53.432 | 1.00x (UserCache) | 5 |
large_ | 0.194 usmean 0.208p25-p75 0.175-0.234 | 39.964 usmean 40.538p25-p75 39.287-40.445 | 1.00x (UserCache) | 5 |
large_ | 0.117 usmean 0.118p25-p75 0.112-0.123 | 4.334 usmean 4.251p25-p75 3.567-4.763 | 1.00x (UserCache) | 5 |
large_ | 0.474 usmean 0.483p25-p75 0.463-0.491 | 41.167 usmean 43.103p25-p75 40.306-42.358 | 1.00x (UserCache) | 5 |
metadata_ | 0.807 usmean 0.817p25-p75 0.787-0.845 | 57.675 usmean 60.793p25-p75 57.051-63.877 | 1.00x (UserCache) | 5 |
metadata_ | 0.910 usmean 0.923p25-p75 0.877-0.943 | 58.479 usmean 62.267p25-p75 57.178-60.338 | 1.00x (UserCache) | 5 |
sleep_ | 0.241 usmean 0.244p25-p75 0.228-0.252 | 4.106 usmean 4.230p25-p75 4.004-4.239 | 1.00x (UserCache) | 5 |
serialize_ | 0.321 usmean 0.321p25-p75 0.302-0.339 | 2.464 usmean 2.480p25-p75 2.396-2.583 | 1.00x (UserCache) | 5 |
unserialize_ | 0.382 usmean 0.386p25-p75 0.367-0.393 | 2.630 usmean 2.641p25-p75 2.580-2.696 | 1.00x (UserCache) | 5 |
sleep_ | 7.400 usmean 7.498p25-p75 7.343-7.518 | 25.146 usmean 26.531p25-p75 24.890-25.572 | 1.00x (UserCache) | 5 |
sleep_ | 0.221 usmean 0.228p25-p75 0.211-0.244 | 43.000 usmean 47.665p25-p75 41.915-47.738 | 1.00x (UserCache) | 5 |
recursive_ | 6.896 usmean 7.198p25-p75 6.660-7.126 | 31.298 usmean 33.095p25-p75 29.233-33.803 | 1.00x (UserCache) | 5 |
mixed_ | 0.442 usmean 0.450p25-p75 0.424-0.478 | 8.496 usmean 8.511p25-p75 8.287-8.676 | 1.00x (UserCache) | 5 |
product_ | 5.206 usmean 5.258p25-p75 5.024-5.391 | 31.501 usmean 34.669p25-p75 31.013-31.941 | 1.00x (UserCache) | 5 |
multi_ | 0.174 usmean 0.179p25-p75 0.166-0.193 | 4.324 usmean 4.349p25-p75 4.262-4.465 | 1.00x (UserCache) | 5 |
safe_ | 0.510 usmean 0.523p25-p75 0.493-0.547 | 2.220 usmean 2.223p25-p75 2.152-2.297 | 1.00x (UserCache) | 5 |
spl_ | 0.683 usmean 0.679p25-p75 0.641-0.711 | 5.976 usmean 5.945p25-p75 5.777-6.131 | 1.00x (UserCache) | 5 |
spl_ | 1.006 usmean 1.002p25-p75 0.970-1.031 | 10.384 usmean 11.362p25-p75 10.109-10.726 | 1.00x (UserCache) | 5 |
carbon_ | 145.656 usmean 151.941p25-p75 144.067-157.422 | 156.726 usmean 159.569p25-p75 155.732-159.022 | 1.00x (UserCache) | 5 |
carbon_ | 145.891 usmean 153.629p25-p75 144.402-152.890 | 160.036 usmean 165.993p25-p75 157.956-168.736 | 1.00x (UserCache) | 5 |
raw_ | 7.299 usmean 7.323p25-p75 7.174-7.406 | 73.746 usmean 74.180p25-p75 72.623-74.392 | 1.00x (UserCache) | 5 |
raw_ | 6.743 usmean 6.833p25-p75 6.666-6.890 | 75.549 usmean 76.907p25-p75 74.943-76.333 | 1.00x (UserCache) | 5 |
serialized_ | 0.214 usmean 0.217p25-p75 0.204-0.224 | 0.512 usmean 0.526p25-p75 0.488-0.572 | 1.00x (UserCache) | 5 |
reference_ | 0.168 usmean 0.170p25-p75 0.164-0.177 | 0.386 usmean 0.397p25-p75 0.378-0.400 | 1.00x (UserCache) | 5 |
cycle_ | 0.226 usmean 0.232p25-p75 0.211-0.241 | 0.532 usmean 0.564p25-p75 0.512-0.567 | 1.00x (UserCache) | 5 |
nested_ | 0.174 usmean 0.194p25-p75 0.167-0.194 | 5.592 usmean 5.543p25-p75 5.368-5.657 | 1.00x (UserCache) | 5 |
Resident Payload Probe
| Workload | Resident direct access | UserCache fetch + access | Estimated fetch overhead | Resident / UserCache |
|---|---|---|---|---|
constant_resident baseline note | 0.050 us | 0.116 us | 0.066 us | 0.43x |
route_resident baseline note | 0.077 us | 0.135 us | 0.058 us | 0.57x |
large_resident baseline note | 0.055 us | 0.109 us | 0.054 us | 0.50x |
large_resident baseline note | 0.030 us | 0.081 us | 0.051 us | 0.37x |
product_resident baseline note | 0.077 us | 4.347 us | 4.270 us | 0.02x |
Bulk Read: 32 Keys
| Backend | Median/batch | Mean/batch | Mean/key |
|---|---|---|---|
user_UserCache fetchMultiple | 1.110 us | 1.118 us | 0.035 us |
user_UserCache fetch loop | 1.692 us | 1.692 us | 0.053 us |
apcu_APCu fetch array | 7.242 us | 7.265 us | 0.227 us |
apcu_APCu fetch loop | 8.221 us | 8.234 us | 0.257 us |
Bulk Read: 128 Keys
| Backend | Median/batch | Mean/batch | Mean/key |
|---|---|---|---|
user_UserCache fetchMultiple | 4.913 us | 4.927 us | 0.038 us |
user_UserCache fetch loop | 7.336 us | 7.350 us | 0.057 us |
apcu_APCu fetch array | 29.199 us | 29.280 us | 0.229 us |
apcu_APCu fetch loop | 32.915 us | 32.941 us | 0.257 us |
Artifacts
| Artifact | Path |
|---|---|
| CLI repeated read JSON | /workspaces/php-src/php-user_cache_benchmark_harness/results/read-workloads-20260801T143646Z/median/cli-read/user-cache-benchmark-median.json |
| CLI write JSON | /workspaces/php-src/php-user_cache_benchmark_harness/results/read-workloads-20260801T143646Z/median/cli-write/user-cache-benchmark-median.json |
| Resident probe JSON | /workspaces/php-src/php-user_cache_benchmark_harness/results/read-workloads-20260801T143646Z/median/resident-payload-probe.json |
| FPM one fetch/request JSON #1 | /workspaces/php-src/php-user_cache_benchmark_harness/results/read-workloads-20260801T143646Z/median/fpm-read-once-php.json |
| FPM one fetch/request JSON #2 | /workspaces/php-src/php-user_cache_benchmark_harness/results/read-workloads-20260801T143646Z/median/fpm-read-once-igbinary.json |
| FPM hot read JSON #1 | /workspaces/php-src/php-user_cache_benchmark_harness/results/read-workloads-20260801T143646Z/median/fpm-read-hot-php.json |
| FPM hot read JSON #2 | /workspaces/php-src/php-user_cache_benchmark_harness/results/read-workloads-20260801T143646Z/median/fpm-read-hot-igbinary.json |
| Bulk read JSON #1 | /workspaces/php-src/php-user_cache_benchmark_harness/results/read-workloads-20260801T143646Z/median/bulk-read-32.json |
| Bulk read JSON #2 | /workspaces/php-src/php-user_cache_benchmark_harness/results/read-workloads-20260801T143646Z/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.