Tiny sensors that run forever on scavenged energy — sun, radio waves, vibration — store harvested power in a capacitor, but its size is fixed at design time and forces a cruel tradeoff, where a small capacitor wakes fast but dies fast while a large one lasts but may never charge enough to start, and either way a volatile power source wastes energy as heat when the buffer is full or as leakage when it is starved; this work from Virginia Tech builds REACT, a buffer of reconfigurable, isolated capacitor banks that grows to capture surplus power and collapses to squeeze the last usable charge out during a deficit — capturing 25 percent more usable energy and reacting to events almost 8 times faster, with none of the switching losses that sank prior dynamic designs.
The argument in one glance
-
Problem
Batteryless sensors store scavenged energy in a capacitor, and its size is a bind
Tiny sensors that run for years without a battery scavenge ambient energy — sunlight, stray radio waves, vibration — but that power is too weak and erratic to run a chip continuously. So they store it in a buffer capacitor, charge it to a threshold, then spend it in a short burst of work before recharging. The capacitor is the heart of the design, and its size, chosen once at design time, decides almost everything about how the system behaves.
-
What people did
Pick a fixed capacitor size to balance reacting fast against lasting long
Designers size the capacitor to trade off two things. A small buffer charges quickly, so the system wakes fast to catch a sensor event or a deadline — but it holds little energy, so it dies after a short burst and cannot power a long atomic operation like a radio transmission. A large buffer holds enough for those operations and runs longer, but it charges slowly and needs far more energy just to switch on at all. You choose one point on this line and live with it.
-
Why it fell short
Because power is volatile, a fixed buffer wastes energy at both extremes
Real harvested power is wildly volatile — most of the energy arrives in brief spikes while the system spends most of its time nearly starved. A fixed buffer loses both ways. When a surplus arrives, a small buffer fills and must dump the excess as heat to avoid overvoltage. When power is scarce, a large buffer wastes the energy spent just reaching its start voltage, leaks charge while off, and may never charge enough to run at all. A single fixed size meets both conditions over a deployment, and squanders energy in each.
-
This paper's idea
Make the buffer resize itself to follow the power, without switching losses
REACT replaces the fixed capacitor with a fabric of reconfigurable, mutually-isolated capacitor banks that varies its total capacitance to follow net input power. It stays small at cold start for fast reactivity, expands by connecting banks to capture a surplus instead of burning it, and collapses banks from parallel into series during a deficit to boost voltage and reclaim charge that would otherwise be stranded. Crucially, isolating the banks avoids the energy that dynamic buffers normally bleed on every reconfiguration — capturing 25 percent more usable energy and reacting almost 8 times faster.
Why this problem is worth solving
The whole design hinges on one component and the tradeoff its size imposes, so it is worth being precise. A batteryless system cannot run directly off a harvester, because ambient power is too weak and unstable — a shadow crossing a solar cell or a shift in a radio antenna causes rapid, outsized swings. So it isolates itself behind a buffer capacitor: the harvester charges the capacitor up to an enable voltage, the system switches on and drains it in a burst of work, then switches off and waits to recharge, operating intermittently. The capacitor’s size sets two opposing properties. Reactivity is how fast it charges to the enable voltage, and thus how quickly the system can wake to handle a time-sensitive event; a small capacitor is highly reactive because little energy fills it. Longevity is how much energy it holds, and thus how long or how energy-intensive an uninterrupted burst it can support; a radio transmission, for instance, is atomic and must have a guaranteed quantum of energy to finish. A large capacitor gives longevity but poor reactivity, and a small one the reverse. Since the size is fixed at design time, the designer must guess a single point on this tradeoff and accept its costs everywhere.
The reason a fixed choice is doubly wrong is that the power is not just scarce but volatile, which introduces a third cost the tradeoff usually ignores. Beyond reacting fast and lasting long, a buffer has a third property that turns out to swing with the power source: how much of the harvested energy actually reaches useful work rather than being lost. Harvested power is bursty — in one solar deployment, the great majority of the energy arrived in short spikes, while the system spent most of its time below a fraction of that power. A small buffer, during one of those spikes, fills to capacity and then has to burn the incoming surplus as heat to avoid overvoltage: energy scavenged and thrown away. A large buffer catches the spike, but pays a different tax: the energy spent charging it up to the enable voltage cannot do any work and leaks away while the system is off, and in weak power it may never reach the enable voltage and so never runs at all. Because the power source drifts between surplus and deficit over a single deployment, a fixed buffer suffers both losses at different times. This is why efficiency, not just the classic reactivity-longevity tradeoff, is what makes buffer design genuinely hard — and worth rethinking.
What people did before, and where it broke
- Pick a fixed capacitor size. Choose the smallest buffer that can power every atomic operation, balancing reactivity against longevity. Where it broke. One fixed point cannot serve a volatile source: it wastes surplus as heat when small, and cold-start energy and leakage when large, and may never start at all in weak power.
- Scale performance to match power. Speed up execution when power is plentiful, slow down when scarce, so the small buffer never overflows. Where it broke. Batteryless work is often periodic sensing or fixed-cost operations (a radio send) whose timing does not correlate with when power happens to be high, so there is nothing useful to speed up on demand.
- Multiplex several static buffers (Capybara, Flicker). Give tasks or peripherals separate buffers and charge them by projected priority. Where it broke. It needs error-prone guesses about future supply and demand, and energy stranded on a partially-charged secondary buffer leaks away — the energy is not fungible, not freely directable to whatever needs it.
- Vary the enable voltage of one buffer (Dewdrop). Draw from a single capacitor at different thresholds to make its energy fungible. Where it broke. It still has one fixed capacitor size, so it never escapes the reactivity-longevity tradeoff.
- Reconfigure a fully-connected capacitor network (Morphy). Wire many capacitors through switches so software can combine them in series or parallel for any equivalent capacitance. Where it broke. Every reconfiguration makes current rush between capacitors at different voltages to equalize, dissipating a quarter or more of the stored energy each time — so under volatile power, which forces frequent reconfiguration, it underperforms even a static buffer.
- The gap. Fixed buffers cannot follow volatile power, multiplexed ones strand energy and need speculation, and the one dynamic design that made energy fungible bled it away on every switch. What was missing was a buffer that resizes to follow the power and loses nothing when it does — which is exactly what efficient batteryless operation needs.
How REACT works
A buffer that grows on surplus and collapses on deficit, without switching loss
-
-
new
-
new
-
new
-
new
-
new
The idea
Stop choosing a size, and let the buffer resize itself to the power. The root problem is that a fixed capacitor forces one compromise on a source that swings between surplus and deficit — small enough to react wastes surplus, large enough to last wastes cold-start energy and may never start. REACT eliminates the choice by making capacitance a variable that tracks net input power: a small last-level buffer for fast reactivity when empty, expanding by connecting banks when power is plentiful, and shrinking when it is scarce, so the buffer is always near the size the moment calls for. Turning a resource that used to be fixed at design time into one continuously resized to conditions, so a single system captures the benefits of both extremes instead of picking one, is the same move the serverless GPU-scaling work covered elsewhere on this site makes, replacing a static allocation with one that grows and shrinks to demand and so escapes the tradeoff a fixed choice imposes.
Reclaim the charge that would otherwise be stranded below the usable line. Expanding a buffer to catch a surplus creates a subtler problem: the more capacitance you hold charge on, the lower its voltage, and charge sitting below the minimum operating voltage is unusable — normally just leaked away. REACT reclaims it with a physical trick. When voltage sinks toward the cutoff, it reconfigures a charged bank from parallel into series, which keeps the same charge but on a smaller equivalent capacitance, boosting its voltage back above the usable threshold and letting the system keep drawing energy that a fixed buffer would have abandoned — cutting that loss quadratically in the bank size. Salvaging capacity that would otherwise sit stranded and wasted, by transforming how it is held rather than discarding it, is the same instinct the serverless orchestration work covered elsewhere on this site acts on, reclaiming resource that would otherwise idle and turning it back into useful work.
Isolate the banks so reconfiguring them loses nothing. The reason the previous dynamic buffer failed was that its capacitors were all wired together, so every time software changed the configuration, current rushed between capacitors at different voltages to equalize, dissipating a large fraction of the stored energy as heat — a tax paid on every switch, ruinous when volatile power demands constant switching. REACT organizes its capacitors into mutually-isolated banks separated by diodes, so that no current ever flows between banks: expanding or collapsing one moves charge only to or from the common output, never wastefully sideways into a neighbor. Partitioning a shared resource into isolated pieces so that reconfiguring one causes no costly flow into the others is the same discipline the CXL memory work covered elsewhere on this site follows, keeping state in private, isolated pieces precisely so that no expensive cross-traffic happens when the system changes.
Following a deployment through REACT
A sensor through a day of changing power
Tracing shifting conditions shows each mechanism in turn.
Step 1 of 5
Dawn: weak power, wake fast anyway
At first light the harvest is feeble. A large fixed buffer might never charge enough to switch on at all. REACT charges only its tiny last-level buffer, reaches the enable voltage quickly, and wakes to begin low-power sensing while all other banks stay disconnected.
The last-level buffer sets both the fast cold-start and the minimum guaranteed burst.
Why it works
- A small last-level buffer gives reactivity a big buffer cannot. A large fixed capacitor needs a lot of energy just to reach its start voltage, so it wakes slowly or never in weak power → but charging only a tiny buffer at cold start reaches the enable voltage fast → so REACT reacts as quickly as the smallest buffer while its other banks wait, disconnected.
- Expanding capacity on a surplus captures energy a small buffer throws away. A small buffer fills during a power spike and must burn the excess as heat to avoid overvoltage → but connecting more banks when the buffer nears full absorbs the surplus instead → so REACT gains a large buffer’s capacity without a large buffer’s slow start.
- Collapsing capacitance on a deficit reclaims charge that would be stranded. Charge left on a big capacitor below the minimum operating voltage is unusable and normally lost to leakage → but reconfiguring the bank from parallel to series shifts that charge onto a smaller equivalent capacitance, boosting its voltage back above the usable threshold → so energy that would have been wasted powers real work, and the loss shrinks with the square of the bank size.
- Isolating the banks avoids the switching loss that sank prior dynamic buffers. In a fully-connected capacitor network, reconfiguring makes current rush between capacitors at different voltages, dissipating a quarter or more of the stored energy each time → but keeping banks mutually isolated with diodes lets none of that current flow → so REACT can vary capacitance as often as volatile power demands without bleeding energy on every change.
- A unified, fungible buffer lets software guarantee longevity without pre-committing energy. Reserving energy in separate buffers for specific future tasks needs error-prone guesses and leaks charge from partly-filled reserves → but pooling all harvested energy at the last-level buffer and exposing capacitance as a stored-energy gauge lets software demand a minimum before an atomic operation → so a radio transmission can be guaranteed to complete, with the same energy free for anything else if plans change.
What it costs (trade-offs and scope)
- It adds hardware, cost, and a small standing power draw. Banks, switches, isolation diodes, and comparators are more than a single capacitor, and the circuit itself draws about 68 microwatts (roughly 14 per bank) — non-trivial on a device that may run at microwatts, though it is about a quarter cheaper than the prior dynamic design.
- It is a prototype tested on replayed power traces, not a long field deployment. Evaluation uses a record-and-replay power frontend over five traces of minutes to hours, with peripherals emulated by a resistor, rather than a multi-week outdoor deployment.
- Isolated banks trade configuration range for efficiency. Because each bank can only be fully series or fully parallel, REACT offers fewer equivalent-capacitance settings than a fully-connected network, and its reactivity floor is the last-level buffer, which a smaller-minimum design can slightly beat.
- Large banks risk voltage spikes. Collapsing a bank to series multiplies its voltage, which can overshoot the safe range or be misread as a full-buffer signal, so the size of the last-level buffer caps how big each bank’s capacitors may be.
- The longevity guarantee needs application cooperation and tuning. Basic operation needs no code changes, but guaranteeing a long atomic operation requires the application to set minimum capacitance levels, and choosing bank sizes and voltage thresholds is a design task with real constraints.
- Harvester current crosses two diodes. All incoming energy flows through isolation diodes on the critical path; ideal-diode circuits keep the drop tiny, but it is a loss to engineer around.
- The prior-work comparison slightly favors the baseline. The compared dynamic design was given an externally-powered controller not charged against its energy budget, so REACT’s real-world margin over it is if anything understated — but it is the authors’ own reimplementation.
The evaluation
Buffering strategies for batteryless systems
| Property | Small static | Large static | Morphy (dynamic) | REACT |
|---|---|---|---|---|
| Reactivity (wake speed) | High, wakes fast | Low, may never start | High, smallest config | High, from last-level buffer |
| Capacity for long operations | Low, cannot power atomics | High | High | High, expands on demand |
| Energy on a power surplus | Wasted as heat when full | Captured | Captured by expanding | |
| Reconfiguration loss | Not applicable | |||
| Usable energy versus REACT |
Check yourself
Check your understanding
1. Why is choosing a fixed buffer-capacitor size a bind for batteryless systems?
2. How does REACT get both fast reactivity and high capacity from one buffer?
3. What is the key advantage of REACT's isolated banks over a fully-connected capacitor network?
4. Which statement best reflects the limits of REACT?
Sources
The paper is “Energy-Adaptive Buffering for Efficient, Responsive, and Persistent Batteryless Systems” by Harrison Williams and Matthew Hicks, published at ASPLOS 2024, DOI 10.1145/3620666.3651370. The authors are at Virginia Tech; the design and evaluation data are open-sourced.
This explainer is written from the full 15-page text. Everything above comes from the paper’s own sections: the introduction and background establishing the reactivity-longevity tradeoff of fixed buffers and the third metric of efficiency under volatile power (with the observation that most harvested energy arrives in short spikes, so small buffers waste surplus as heat and large buffers waste cold-start energy and may never start), and the survey of prior approaches (performance scaling, multiplexed static buffers like Capybara and Flicker, Dewdrop’s variable enable voltage, and Morphy’s lossy fully-connected network); the REACT design covering the last-level buffer for reactivity and fungible energy pooling, the dynamic capacitor banks that expand on a surplus (series then parallel) and reclaim charge on a deficit (parallel to series, reducing loss by the square of the bank size), the mutually-isolated bank architecture with ideal diodes and break-before-make switches that eliminates the dissipative switching current, the bank-size voltage-spike constraint, and the software interface for longevity guarantees; and the evaluation on an MSP430 platform with an Ekho-style power-replay frontend across four benchmarks and five solar and RF traces, reporting a 25.6 percent average increase in usable energy over static buffers (39 percent over an equally-reactive buffer, 19 percent over an equal-capacity one), a 7.7-times responsiveness improvement, a 26 percent improvement over Morphy at about a quarter lower cost, and a 1.8 percent software and 68-microwatt power overhead.