eMMC BKOPS: background operations and latency spikes
- eMMC firmware performs garbage collection, wear leveling, refresh and bad-block management; this maintenance can produce long-tail latency even when average speed looks normal.
- BKOPS lets the host cooperate with background maintenance, but manual and autonomous behavior depends on the device, eMMC version, kernel and one-time configuration.
- BKOPS_EN is a one-time programmable setting on relevant devices. Do not enable it from a generic script without vendor approval and a recovery plan.
- Qualify the exact eMMC, firmware, host driver and filesystem with a realistic fill state, power-cycle pattern and latency percentile—not only sequential throughput.
An embedded device passes its storage benchmark, then occasionally freezes for hundreds of milliseconds during logging or boot. The average eMMC bandwidth still looks acceptable. The missing measurement is often the time the managed flash spends maintaining itself.
eMMC combines NAND and a controller. That controller hides erase blocks, moves valid data, retires bad blocks and manages wear. BKOPS—background operations—is part of the host/device cooperation around that work.
Why managed flash needs background time
NAND cannot overwrite an occupied page directly. The controller writes new data elsewhere, marks the old copy invalid and later reclaims erase blocks. It must also distribute wear, refresh vulnerable data and replace unusable blocks.
NVIDIA lists eMMC maintenance including [2]:
- wear leveling;
- garbage collection;
- data refresh;
- bad-block management;
- movement of data between SLC and MLC/TLC areas.
Some work happens while the host is quiet. If the device does not receive enough idle opportunity, maintenance may become urgent and compete with foreground I/O. That is why a workload can show good median latency but poor 99.9th-percentile or maximum latency.
BKOPS does not create all maintenance latency; it is a mechanism for exposing and scheduling it. Disabling cooperation does not eliminate the NAND work.
Manual and autonomous BKOPS
The details vary by supported eMMC revision and device. At a high level:
| Mode | Who starts maintenance? | Integration concern |
|---|---|---|
| Manual BKOPS | Host observes need and writes BKOPS_START when it can tolerate the busy period | Host must schedule, monitor and preserve power |
| Autonomous BKOPS | Device may start background work according to its configuration | Host must tolerate device-selected latency and understand suspend behavior |
NVIDIA documents BKOPS_START in EXT_CSD byte 164 and BKOPS_EN in byte 163 for its supported flow [1]. It also warns that enabling the relevant manual behavior is a one-time operation. Linux mmc-utils includes a function to enable eMMC BKOPS [3], but availability of a command is not authorization to use it on every product.
One-time programmable fields require manufacturing discipline. A setting written during development can permanently change the sample and make later A/B tests invalid. Record the raw EXT_CSD before any change, follow the SoC and eMMC vendor instructions and make the production fuse/configuration step traceable.
How BKOPS appears as a performance problem
Look beyond a single headline speed. Common patterns include:
| Observation | Possible storage explanation |
|---|---|
| Fast fresh device, worse after filling | Fewer free blocks and more garbage-collection work |
| Pauses after many small random writes | Valid data is fragmented across erase blocks |
| Long first write after boot or power loss | Deferred or interrupted maintenance resumes |
| Good average, rare multi-hundred-millisecond outliers | Firmware maintenance blocks foreground service |
| One supplier lot behaves differently | Device, NAND, firmware or default BKOPS behavior changed |
These patterns are clues, not proof. CPU scheduling, filesystem locks, thermal throttling, power management and application synchronization can look similar. Correlate device state with block-layer latency and system events.
NVIDIA notes that a documented eMMC example can experience BKOPS delays up to hundreds of milliseconds, with rarer longer events after conditions such as power interruption [2]. Do not reuse those values as a universal limit. Measure the exact part in the final design.
A useful qualification test
Build a test that makes deferred work visible:
- Lock the sample identity. Record manufacturer, product name, revision, capacity, firmware-identifying fields and full EXT_CSD.
- Use the final host stack. Include the production SoC, kernel, MMC driver, filesystem, mount options and power policy.
- Precondition storage. Test at realistic used capacity and after the write history expected in service, not only on a factory-fresh device.
- Run the real I/O mix. Include request sizes, sync writes, database or log behavior and duty cycle from the application.
- Measure distributions. Capture median, p95, p99, p99.9 and maximum read/write latency along with throughput.
- Log maintenance state. Where supported, sample BKOPS status and correlate it with I/O outliers.
- Exercise idle windows. Compare planned maintenance opportunities with continuous load.
- Interrupt safely in testing. At approved points, test reset and power-loss recovery; verify filesystem and application data integrity afterward.
- Repeat across samples. Use multiple devices and relevant temperature corners.
The result should be an application limit such as “the logging queue survives the measured worst-case storage stall,” not merely “sequential write exceeds 100 MB/s.”
Reduce avoidable pressure
Mitigation is a system decision. Depending on vendor guidance, useful levers can include:
- scheduling a host idle window for supported manual BKOPS;
- keeping practical free capacity so garbage collection has room;
- issuing discard/erase through a validated filesystem policy;
- batching small writes into larger sequential transfers;
- limiting unnecessary logging and repeated metadata updates;
- ensuring stable power long enough for planned maintenance;
- selecting an eMMC grade and capacity qualified for the actual write workload.
NVIDIA recommends reducing small random writes, retaining free space and enabling an appropriate discard path in its platform guidance [2]. Those are starting points, not universal settings. Continuous discard, for example, can change latency; compare it with scheduled discard under the real workload.
Monitor eMMC PRE_EOL_INFO and DEVICE_LIFE_TIME as separate health signals. They do not reveal instantaneous BKOPS duration, but they help connect latency changes with long-term wear and reserved-block pressure. For architecture choices, compare eMMC, UFS and SD before freezing the design.
Procurement and change control
“eMMC 5.1, 64 GB” is not a sufficient latency specification. Controller firmware and NAND geometry can change garbage-collection behavior without changing the interface label.
For each approved BOM, retain:
- exact manufacturer part number and revision;
- firmware or production identifiers available to the host;
- BKOPS support and approved configuration;
- preconditioning and latency test results;
- power-loss recovery results;
- change-notification and requalification requirements.
If a substitute part is proposed, rerun the tail-latency and recovery workload. Average throughput parity does not establish behavioral equivalence.
Bottom line
BKOPS is eMMC's host/device mechanism for internal flash maintenance, not a switch that makes garbage collection disappear. Treat it as part of system timing: understand whether maintenance is manual or autonomous, protect one-time settings, give supported devices planned opportunities to work and qualify tail latency in the final host. That is how an occasional “freeze” becomes a measurable engineering requirement.
FAQ
What does BKOPS mean in eMMC?
Can eMMC BKOPS cause a system pause?
Should an OEM always enable eMMC BKOPS?
References
We publish measured usable capacity and welcome trial-batch verification — automotive-grade, direct from the source factory.