---
title: Boot-Time Compute Analysis
url: https://www.emergentmind.com/topics/boot-time-compute
type: topic
---

# Boot-Time Compute Analysis

“Boot-time compute” (Editor’s term) denotes the computation, I/O, orchestration, and synchronization that lie on the critical path to a usable execution state. In systems research, this path runs from power-on or scheduler allocation to a user-visible service, a launched virtual machine, a running container, or the first training iteration. In Fully Homomorphic Encryption (FHE), “bootstrapping” denotes the periodic noise-reduction step that restores the ciphertext modulus so that deeper encrypted computation remains possible. Across virtual-machine provisioning, Linux-based consumer electronics, Docker startup, large-scale LLM training, and CKKS-style FHE, recent work shows that boot-time behavior is often dominated not by nominal payload computation but by networking, storage, dependency installation, management-plane contention, synchronization, or memory bandwidth [1606.05794] [2101.09360] [2507.12619] [2602.15214] [2112.06396].

## 1. Measurement models and formal definitions

Boot-time compute is defined operationally by elapsed-time intervals and stage decompositions. For VM provisioning on an HPC system, startup time is measured by issuing a batch launch, recording an initial “start” timestamp, receiving a final HTTP “I’m up” callback from each guest in its last `cloud-init` step, and computing total startup time as $T_{\mathrm{total}} = T_{\mathrm{last}} - T_{\mathrm{start}}$; the same study also uses $t_{\mathrm{avg}}(N)=T_{\mathrm{boot}}(N)/N$ as a per-VM average time [1606.05794]. For large-scale LLM training, startup overhead is defined as the elapsed time from scheduler allocation to the first training iteration, with the decomposition
$$
T_{\mathrm{startup}} = T_{\mathrm{queue}} + T_{\mathrm{allocation}} + T_{\mathrm{load}} + T_{\mathrm{env}} + T_{\mathrm{init}},
$$
and, for GPU-waste analysis, practitioners often simplify this to
$$
T_{\mathrm{startup}} = T_{\mathrm{load}} + T_{\mathrm{env}} + T_{\mathrm{init}}.
$$
Node-level startup excludes queueing and allocation but includes synchronization delays due to stragglers [2507.12619].

Linux cold boot has also been modeled explicitly as a DAG. In Booting Booster, the full boot procedure is represented as $G=(V,E)$, with tasks as vertices and precedence constraints as directed edges. If $t(v)$ is the isolated execution time of task $v$, then the critical-path length is
$$
L_p(G)=\max_{p\in\mathrm{Paths}(G)} \sum_{v\in p} t(v),
$$
and an ideal lower bound with $C$ identical CPUs is
$$
T_n^* \ge \max\Bigl(L_p(G),\,\frac{\sum_{v\in V} t(v)}{C}\Bigr).
$$
This formalization makes the distinction between total work and critical-path work explicit [2101.09360].

Docker startup has been decomposed into kernel, runtime, and storage components:
$$
T_{\text{total}} = T_{\text{kernel}} + T_{\text{runtime}} + T_{\text{storage}(\text{tier})}.
$$
Here, namespace creation and cgroup setup are CPU-bound primitives, whereas OverlayFS mount behavior, copy-up, and layer metadata access expose storage-tier effects [2602.15214]. These models collectively frame boot-time compute as a critical-path problem: what matters is not aggregate system capability alone, but the stage whose latency or straggler behavior gates useful execution.

## 2. Virtual-machine startup in HPC-oriented provisioning systems

In the VM-provisioning literature, startup latency is treated as a key performance metric for HPC because the runtime of any individual task is typically much shorter than the lifetime of a virtualized service in an enterprise context. The comparative study of OpenStack, OpenNebula, and Eucalyptus used four identical HP ProLiant DL165 G7 nodes, each with dual-socket AMD Opteron 6274, 96 GB DDR3 RAM, four 1 TB local disks, KVM, and a Fedora Cloud 22 minimal image instrumented with a final HTTP callback from `cloud-init` [1606.05794].

On representative batch sizes of $N=1,8,32,64$, measured startup times differed by roughly an order of magnitude. Eucalyptus required approximately $10$, $30$, $70$, and $120$ seconds; OpenStack approximately $60$, $250$, $700$, and $1\,100$ seconds; and OpenNebula approximately $120$, $900$, $3\,000$, and $6\,000$ seconds. For $N=1$, OpenNebula was about $12\times$ slower than Eucalyptus, and across the full sweep the fastest stack was about $10\times$ quicker than the slowest [1606.05794].

The principal source of delay was not lower-level VM launch or kernel initialization but `cloud-init` networking. For $N=1$, OpenNebula spent about $90$ of $120$ seconds in cloud-init networking, OpenStack about $40$ of $60$ seconds, and Eucalyptus about $7$ of $10$ seconds. Other boot stages—BIOS, `initramfs` unpack, kernel probe, and `systemd` services—were roughly constant at about $2$–$3$ seconds and independent of framework. As batch size increased, scheduler and database contention in the management plane added a small incremental delay per VM in OpenStack and OpenNebula, whereas Eucalyptus scaled nearly linearly with about $1.5$ s/VM [1606.05794].

The study’s optimization recommendations were correspondingly concrete: minimize `cloud-init` network hang time, preload DHCP leases or use a static-IP metadata service, deploy a local HTTP metadata endpoint on every host, patch `cloud-init` to skip unnecessary data sources or reduce default timeouts, use RAW images where possible, disable unneeded init services and modules, and parallelize orchestration requests. This suggests that, in HPC-oriented VM startup, boot-time compute is primarily a control-plane and guest-initialization problem rather than a hypervisor-execution problem.

## 3. Linux cold boot and critical-task isolation in consumer electronics

Consumer-electronics boot optimization emphasizes that “boot completion” is not identical to “all services initialized.” Booting Booster, deployed in Samsung Smart TV 2015 models running Linux-based Tizen OS, identifies and isolates booting-critical tasks, defers non-critical tasks, and enables execution of more tasks in parallel [2101.09360].

The key abstraction is the BB Group, a subgraph $H \subseteq G$ containing only tasks that are transitively required for user-visible readiness. The Group Isolator performs reverse reachability from a small set $C_0$ of completion anchors over reversed edges, with complexity $O(|V|+|E|)$. In the TV example, $C_0$ included seven units—mount, socket, dbus, tuner, hdmi, demux, fasttv—and the backward sweep typically selected about $20$ out of about $250$ total units [2101.09360].

After pruning to $H$, Booting Booster modifies `systemd` and the Linux RCU scheme. Units not in $H$ are moved into a deferred target and not scheduled until after `bb-complete.target`. Within $H$, dependencies are preserved, but parallel launch is made more aggressive. The implementation also includes an On-demand Modularizer, an RCU Booster, a Pre-parser that converts service unit files into a single binary blob, and a BB Manager that prioritizes $H$-tasks via `nice()` and `ioprio_set()` [2101.09360].

The quantitative effect is a cold-boot reduction from about $8.1$ s to about $3.5$ s, corresponding to an overall speedup of about $2.3$ and a $57\%$ decrease in cold-boot time. The breakdown includes kernel init from $698$ ms to $403$ ms, `systemd` init from $195$ ms to $71$ ms, RCU Booster from $2289$ ms to $461$ ms, Pre-parser loading time from $150$ ms to $0$ ms, and dependency parsing from $231$ ms to $0$ ms [2101.09360]. The significance is methodological: boot-time compute can be reduced by redefining readiness as a critical subgraph rather than as the completion of all background work.

## 4. Docker startup latency across storage tiers and virtualization layers

The Docker measurement study isolates startup latency across Azure Premium SSD, Azure Standard HDD, and macOS Docker Desktop. Using `overlay2`, Linux file-system cache control for cold starts, pre-pulled images for warm starts, and $n=50$ warm-start repetitions, it reports mean, standard deviation, and $95\%$ confidence intervals for container startup and ancillary operations [2602.15214].

A central empirical result is that warm-start latency is dominated by runtime overhead rather than image size. On SSD, `alpine:latest` at $3$ MB measured $568 \pm 5$ ms, `nginx:latest` at $67$ MB measured $564 \pm 12$ ms, and `python:3.11-slim` at $155$ MB measured $554 \pm 6$ ms, for only $2.5\%$ variation across the range. By contrast, storage-tier selection imposed a $2.04\times$ startup penalty for Alpine, with HDD at $1157$ ms versus SSD at $568$ ms; the HDD/SSD ratio rose to $2.28\times$ for `nginx` and $2.41\times$ for `python` [2602.15214].

The hypervisor layer in Docker Desktop added further overhead and variance. Alpine measured $1528$ ms on macOS Docker Desktop versus $568$ ms on SSD-backed native Linux, a $2.69\times$ penalty, while `nginx` and `python` exhibited $3.28\times$ and $3.35\times$ penalties. The coefficient of variation was $9.6\times$ higher on macOS, and CPU throttling variance under `--cpus=0.5` was $9.5\times$ higher than on SSD-backed Linux [2602.15214].

The storage-path results were heterogeneous. For 256 MB sequential writes on SSD, OverlayFS achieved $1.1$ MB/s while a volume mount achieved $194.0$ MB/s, a ratio of $0.006\times$; on HDD, OverlayFS achieved $1.3$ MB/s versus $136.6$ MB/s for volumes. On the other hand, metadata creation on HDD favored OverlayFS: for a 500-file create, OverlayFS took $173$ ms versus $834$ ms for a volume mount, or $4.8\times$ faster. Namespace creation contributed only $7.94$ ms on SSD and $8.45$ ms on HDD, less than $1.5\%$ of total warm-start time [2602.15214]. The practical implication is that container boot-time compute depends far more on runtime and storage behavior than on namespace primitives or image minimization alone.

## 5. Startup overhead in large-scale LLM training

In large-scale LLM training, startup overhead is the delay between resource assignment and the first training iteration. Production evidence in BootSeer indicates that, in one training cluster, more than $3.5\%$ of GPU time is wasted due to startup overhead alone. The profiling methodology injects lightweight logging calls at the entry and exit of each stage on every GPU node, streams timestamped events to a centralized Stage Analysis Service, and over one week covered more than $28\,000$ jobs requesting over $70\,000$ GPUs [2507.12619].

Three startup bottlenecks were identified: container image loading, runtime dependency installation, and model checkpoint resumption. In LLM training, container images range from $25$ GB to $40$ GB, and even with block-level lazy loading $T_{\mathrm{load}}$ typically lies between $20$ s and $40$ s. Environment setup dominates GPU-waste overhead at about $100$ s to $300$ s per node and accounts for roughly $50\%$ of total startup in typical mid-sized jobs. Checkpoint resumption adds about $100$ s to $200$ s, and checkpoints can exceed $400$ GB [2507.12619].

At $128$ GPUs, the reported average baseline startup breakdown was about $30$ s for image loading, $250$ s for environment setup, and $160$ s for model initialization, for a total of about $440$ s. Straggler severity was quantified by a Max/Median ratio, and for environment setup this ratio grew from about $1.1$ at small scales to $1.5$–$4.0$ for jobs exceeding $1\,000$ GPUs [2507.12619].

BootSeer addresses these bottlenecks with hot block record-and-prefetch, dependency snapshotting, and striped HDFS-FUSE. Across 16, 32, 48, 64, and 128 GPU MOE training jobs, it reduced end-to-end startup from $180$ to $95$ s, $230$ to $115$ s, $300$ to $152$ s, $380$ to $190$ s, and $440$ to $232$ s, respectively, or about $47\%$–$50\%$. At $128$ GPUs, image loading improved from $30$ to $7.5$ s, environment setup from $250$ to $125$ s, and model init from $160$ to $100$ s. The environment cache collapsed the Max/Median ratio for dependency installation to near $1.0$, effectively eliminating stragglers in $128$-GPU jobs [2507.12619]. The study also notes trade-offs: cache invalidation on parameter changes, HDFS capacity use, versioning requirements for prefetch metadata, and increased complexity in checkpoint striping.

## 6. FHE bootstrapping as a memory-bound form of boot-time compute

In FHE, bootstrapping has a distinct meaning from system startup. It is the operation that synthetically restores the modulus and resets noise by homomorphically evaluating an approximation to $t \bmod q$ on an encrypted value. In CKKS-style FHE, the procedure comprises Modulus-Raise, Coefft↔Slot transforms, polynomial approximation, and Rescale; the CoeffToSlot and SlotToCoeff transforms each use a sequence of small matrix-vector multiplies to realize an $O(N\log N)$ DFT [2112.06396].

The architectural analysis defines arithmetic intensity as
$$
\mathsf{AI}=\frac{\text{number of modular add/mul ops}}{\text{bytes read+written from DRAM}}.
$$
For representative CKKS parameters, high-level bootstrapping stages remain below $1$ Op/byte: CoeffToSlot at $0.67$, PolyEval at $0.88$, and SlotToCoeff at $0.59$. At a realistic GPU bandwidth of $900$ GB/s, each major phase alone demands $60$–$100$ ms of pure data movement [2112.06396].

The reason is the working-set size and access pattern. A single ciphertext at $\log N=17$ and $\ell=35$ occupies about $73.4$ MiB, while the working set of one ciphertext plus associated switching keys requires more than $100$ MiB of cache. Limb-wise and slot-wise access patterns stress different DRAM rows and banks, so the implementation is heavily bound by main memory bandwidth. The paper therefore concludes that secure implementations of bootstrapping exhibit low arithmetic intensity, require large caches, and are heavily bound by the main memory bandwidth [2112.06396].

The proposed optimizations are consequently cache-centric rather than purely arithmetic: macro-fusion of $O(1)$ limbs, $\beta$-limb caching, $\alpha$-limb caching, re-ordering limb computations, key-switch double-hoisting, hoisting ModDown out of HRotate, and key compression via PRNG. Collectively these raise arithmetic intensity from $0.72$ Op/byte to $1.75$ Op/byte and reduce DRAM transfers from $208$ GB to $45$ GB, a $4.6\times$ reduction. In the architectural model, the fully optimized design reaches $470$ throughput units, compared with $116$ for Jung et al., $119$ for Bossuat et al., and $0.43$ for Samardzic et al. [2112.06396]. Even so, the conclusion remains that bootstrapping continues to be bottlenecked by main memory bandwidth.

## 7. Recurring patterns, misconceptions, and research implications

Across these domains, the bottleneck in boot-time compute recurrently appears outside the nominal “main” computation. In VM provisioning, `cloud-init` networking dominates launch latency; in Linux TV boot, non-critical tasks inflate elapsed time until they are deferred behind `bb-complete.target`; in LLM training, runtime dependency installation and checkpoint resumption dominate GPU-waste overhead; and in FHE, the primary constraint is memory traffic rather than arithmetic throughput [1606.05794] [2101.09360] [2507.12619] [2112.06396].

A common misconception is that reducing payload size or accelerating low-level primitives is sufficient. The Docker study found only $2.5\%$ startup variation across $3$ MB, $67$ MB, and $155$ MB images on SSD, and namespace creation contributed only $8$–$10$ ms, less than $1.5\%$ of warm-start time. The FHE analysis similarly found that even a best-case optimized implementation remains memory-bound, so bespoke high-throughput arithmetic units alone yield only marginal benefit until the memory bottleneck is addressed [2602.15214] [2112.06396].

Another recurring theme is straggler control. BootSeer uses the Max/Median ratio to quantify stage imbalance and reduces this ratio to near $1.0$ for dependency installation at $128$ GPUs; the VM provisioning study attributes part of the scaling gap in OpenStack and OpenNebula to scheduler and database contention; and Booting Booster shortens the critical path by excluding non-essential nodes from the user-visible readiness subgraph [2507.12619] [1606.05794] [2101.09360]. This suggests that boot-time compute is often best optimized by narrowing the critical path, localizing data and metadata services, caching hot working sets, and deferring or parallelizing work that does not define readiness.

The literature therefore treats boot-time compute not as a single mechanism but as a class of latency-critical initialization processes. Its unifying analytical feature is that useful execution is gated by a small set of serial or straggler-sensitive stages. Whether the system is launching virtual machines, constructing containers, bringing up a Linux device, resuming a distributed training job, or refreshing an encrypted ciphertext, the governing question is the same: which initialization steps actually determine readiness, and which are merely background work that can be cached, deferred, fused, or removed?

Source: https://www.emergentmind.com/topics/boot-time-compute