Summary
tests/performance/test_large_object_memory.py exercises only ArrowSerializer + the CacheSerializationHandler envelope in isolation, with raw allocated before tracemalloc.start(). So the File backend's os.read(st_size) + file_data[14:] double-copy and CachekitIO's response.content buffering are invisible to the "read ~1.1x" assertion.
Evidence
tests/performance/test_large_object_memory.py:44-96 — no FileBackend/Redis/CachekitIO; tracemalloc started after the read input is allocated
Impact
The headline OOM-fixed / low-read-RSS claim rests on a test that structurally excludes the largest read-side cost.
Fix
Add backend-inclusive tracemalloc tests (File at minimum), plus coverage for: chunk-sizing on skewed frames (#161), NaN TTL (#158), and a binary round-trip through RedisBackend (#154).
Summary
tests/performance/test_large_object_memory.pyexercises onlyArrowSerializer+ theCacheSerializationHandlerenvelope in isolation, withrawallocated beforetracemalloc.start(). So the File backend'sos.read(st_size)+file_data[14:]double-copy and CachekitIO'sresponse.contentbuffering are invisible to the "read ~1.1x" assertion.Evidence
tests/performance/test_large_object_memory.py:44-96— noFileBackend/Redis/CachekitIO;tracemallocstarted after the read input is allocatedImpact
The headline OOM-fixed / low-read-RSS claim rests on a test that structurally excludes the largest read-side cost.
Fix
Add backend-inclusive tracemalloc tests (File at minimum), plus coverage for: chunk-sizing on skewed frames (#161), NaN TTL (#158), and a binary round-trip through
RedisBackend(#154).