Daily · Article 03 · 3 min read
- OpenAI
OpenAI explains a 120ms-to-10ms storage-read improvement
October 23 official announcements · originals rechecked October 24, 15:52 JST
Summary
On October 23, OpenAI explained performance work on its Habitat storage platform. It reports median storage-read latency falling from roughly 120ms to 10ms; that is not a 12-fold speedup of entire ChatGPT responses.
Key facts
- Announcement: OpenAI described Habitat, its own storage platform, which uses Microsoft’s Azure Cosmos DB cloud database among its resources.
- Reported change: global storage-read median latency (p50) fell from roughly 120ms to 10ms through performance work this year. These are company-reported figures, not a new consumer feature or independent benchmark.
- Areas improved: data placement, replication, caching and service code, among other changes.OpenAI engineering article

1. Storage also needs processing capacity
A database holds information and retrieves matching items. Having room for more data and handling many requests promptly are separate concerns. A library can have empty shelves yet a long queue at its only help desk.
Azure Cosmos DB expresses the processing, input/output and memory burden in request units, RU. RU/s describes capacity per second. Operations have different costs, so an RU count is not simply a request count.Request units
| Measure | Question |
|---|---|
| Storage volume | How much information can be kept? |
| Processing capacity | How much work can be handled in a period? |
| Latency | How long does one request take to return? |
The cat asks Q&A
- The researcher
Can it be slow even when there’s free storage?
Pocket NotebookYes, if too many reads arrive together. Think of a busy help desk rather than a shortage of shelf space.
2. Sharing capacity or reserving it separately
Shared capacity can put otherwise spare resources to work. A “noisy neighbor,” however, consumes enough resources to slow other workloads. Logical groups of data need not have separate physical processing resources.Partitioning
This fictional example uses imaginary processing units per second, not RU or real prices. Assume A, B and C consume 80, 10 and 10 units respectively.
Usual demand: A 80 + B 10 + C 10 = 100
Reserve 100 for each
200 spare out of 300 total
Share a pool of 150
50 spare out of 150 total
Used Spare · all bars use the same unit scale
That is 30 above the shared limit of 150. Separate capacity also leaves A short of its 100, but A does not directly use B’s or C’s allocation.
The cat asks Q&A
- The researcher
What needs managing when capacity is shared?
Pocket NotebookWatch which workload surges and whether it slows other workloads. The illustrated spare capacity is hypothetical; actual bills also depend on pricing modes, replication, caches and operations.
3. What improved from 120ms to 10ms?
120ms is 0.12 seconds; 10ms is 0.01 seconds. p50 is the middle value when request latencies are ordered: the median. OpenAI’s comparison across its performance work this year concerns storage reads, not the worst wait for every user or the time spent generating an AI answer.
Dividing 120 by 10 gives 12. Dividing the 110ms reduction by the original 120ms gives approximately 91.7%. These describe that metric; complete responses also include work such as authentication, data retrieval, model computation and transmission.
The cat asks Q&A
- The researcher
Will my ChatGPT answer arrive 12 times faster?
Pocket NotebookThat figure alone cannot tell us. The share of time spent on storage and slow uncached requests also matter. A better median can coexist with slow experiences at the tail.
4. Nearby copies and outdated copies
A cache keeps copies of frequently read information nearby, reducing trips to the underlying store. If the original changes while the copy remains, the application may show an old value. Azure’s general cache documentation describes repeated reads, staleness windows and update conditions.General cache documentation
That document’s Azure dedicated-gateway cache is not the same implementation as Habitat’s Valkey-based cache. OpenAI describes using source-data change signals to invalidate cached copies so the next read fills them with current data.
For a fictional shop renaming an item, reading a nearby copy must be paired with discarding the old copy after a change. Moving data closer also requires considering data-residency requirements and actual regional capacity.
1 · No usable copy yet
- App lookup
- Read the original store
- Fill the cache with a copy
2 · Read the same data again
- App lookup
- Read the nearby cache
- A usable cached copy avoids this original-store read
3 · The original product name changes
- Original changes
- Change signal invalidates the old cache entry
- The next lookup fills it with fresh data
The cat asks Q&A
- The researcher
How does the cache catch up when a product name changes?
Pocket NotebookHere, a change signal invalidates the stale copy and the next lookup fills it with fresh data. A small service can also test how soon a source edit becomes visible when trying a cache.
To close
An AI service also waits for its data
A developer looking only at an average can separate frequent queries from the slow tail of requests. Before changing models, find where the waiting time actually occurs.
Sources
- OpenAI engineering articleopenai.com
- Request unitslearn.microsoft.com
- Partitioninglearn.microsoft.com
- General cache documentationlearn.microsoft.com