Skip to content

Commit 004d770

Browse files
ppennaCopilot
andcommitted
guest: delete the process modules and cgroups
The old layered init, the managed agent's sandbox mode and the one-shot container helpers are gone, and with them the last users of the guest process modules: guest::exec ran a layered root's executions, which guest::spawn started, guest::entry entered into their namespaces, view and identity, guest::cgroup placed and guest::process collected, and guest::root's bootstrap moved the init's processes into the cgroups that held them. nvx-init runs its workloads as plain processes through sys::spawn, without per-execution containment. Delete guest::{exec, spawn, process, cgroup, entry}, with their submodules and tests, and guest::root::{bootstrap, Bootstrap, BootstrapStep, Resources}, with root::Error::Bootstrap. Delete the OS support that only they used: - sys::entry's per-execution entry: EntryChild, its clone3 start in new mount, PID and UTS namespaces, its view of /proc, /sys and /dev, with the procfs entries that it masked or made read-only, its move into the root, its umask, its working directory's resolution beneath the root, and the CloneArgs and OpenHow structures. sys::entry keeps a layered root's runtime file systems and the workload identity, which nvx-init and Root use. - The spawn child's per-execution stages, with their ChildSpec setters: the root, the working directory's credentials check, inherited descriptors, the cgroup placement, the session, the barrier and the entry. The child keeps the path of nvx-init's workloads. LaunchStage, whose numbers the child's launch report carries and which guest::spawn held, moves into sys::spawn as a crate-private enum of the stages that the child still takes, each with its number. - The waits and signals that only guest::exec used: process_group_of, WaitTarget and wait_named, and the sys re-exports of signal_process_group and signal_through_pidfd, which sys::process keeps for kill_process_group and kill_through_pidfd. - The cgroup writes: root::kernel's Kernel::write, which only the bootstrap called. - fd's shut_down_sending, take_pipe_end, open_at and create_socket_pair, which only guest::exec's pipes and sockets used. fd's per-execution memfd and seals already left with #1310. Root::switch keeps its move of the root and its change of root, and the rooted open keeps its EAGAIN retry. What the warning-denied builds then find unused goes too: root::bind_runtime_file, whose retained variant bind_runtime_file_retained takes its rustdoc, and guest::mappings' bind_with re-export. guest::account's items, which only guest::entry re-exported, become crate-private. Tests: - The deleted modules' 125 tests retire: 44 of guest::exec, among them a_stalled_sink_stalls_only_its_own_execution_and_loses_nothing, 22 of guest::entry, 22 of guest::spawn, 17 of guest::cgroup, 9 of guest::process and 2 of guest::root::bootstrap; guest::root's 6 bootstrap tests; and sys::spawn's a_child_enters_its_root_or_reports_why_not, the_check_s_credentials_keep_the_parent_s_supplementary_groups and an_entry_leads_a_session_and_keeps_its_barrier_from_the_program, whose stages go. So do the deleted modules' 8 doc tests, and the test hooks of their code and of the deleted child stages. - sys::spawn's invalid_specs_are_refused_before_forking, stream_sources_below_the_standard_streams_are_raised_and_kept_from_the_program and the_launch_descriptors_are_close_on_exec lose their cases of the credentials check, inherited descriptors and cgroup placement. - sys::entry's the_kernel_structures_have_their_uapi_sizes loses CloneArgs and OpenHow, and its Simulation helper goes. - Tests that used a deleted helper use the kept one: a_thread_that_may_hold_the_permission_spawns_no_command spawns through sys::spawn; a_write_takes_back_its_own_sigpipe_beside_one_pending_for_the_process and a_stolen_or_auto_reaped_status_is_reported_once_and_never_reclassified_by_an_ending wait with sys::wait; privileged_capture_sweep_kills_setsid_escapees_and_spares_both_helpers reads process groups with getpgid; and the managed agent's runtime tests signal through sys::tests' signal_through_pidfd. a_real_time_signal_goes_through_a_pidfd_and_to_a_process_group drops its check of process_group_of. - The helpers that only deleted tests used go: root::kernel's fake writes and process moves, root's bootstrap fixtures, sys::process's untraced and traced children, sys::fd's set_descriptor_limit and sys::spawn's CAP_SYS_CHROOT. Docs: the rustdoc of guest, guest::root, sys and the kept OS modules, the crate's guest summary, the nvx README, whose module table and sections drop the five modules, and the guest-agent guidelines no longer describe the deleted modules or the root's bootstrap. The case matrix retires the deleted doc tests and names the kept ones by the lines to which they move. The test-layout allowlist and the Linux public API snapshot drop the deleted modules. Part of #1123 (SL6.11b). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 321bd2b commit 004d770

42 files changed

Lines changed: 285 additions & 11059 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎doc/acceptance-case-matrix.md‎

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ its own in turn.
3434
| [The adapter's other tests](#the-adapters-other-tests) | 169 | 0 | 9 | 160 |
3535
| [MicroVM scenarios](#microvm-scenarios) | 54 | 50 | 3 | 1 |
3636
| [CI](#ci) | 69 | 42 | 3 | 24 |
37-
| [Docs](#docs) | 36 | 25 | 3 | 8 |
37+
| [Docs](#docs) | 36 | 18 | 2 | 16 |
3838

3939
## The adapter's scenarios
4040

@@ -480,22 +480,22 @@ this matrix. The README's own code is no doctest.
480480
| `nvx-rs/src/gpt/mod.rs - gpt (line 43)` | kept | |
481481
| `nvx-rs/src/guest/activation.rs - guest::activation (line 158)` | kept | SL6.11c rewrote it on `guest::snapshot::capture`, when its capture preparation and admission fence left (#1087) |
482482
| `nvx-rs/src/guest/activation/state.rs - guest::activation::state::Activation (line 56)` | kept | |
483-
| `nvx-rs/src/guest/cgroup.rs - guest::cgroup (line 36)` | kept | Its module leaves with the exec engine (#1087), whose PR retires it |
484-
| `nvx-rs/src/guest/entry.rs - guest::entry (line 90)` | kept | Its module leaves with the exec engine (#1087), whose PR retires it |
485-
| `nvx-rs/src/guest/exec.rs - guest::exec (line 79)` | kept | Its module leaves with the exec engine (#1087), whose PR retires it |
486-
| `nvx-rs/src/guest/exec.rs - guest::exec::Execution::adopt (line 619)` | kept | Its module leaves with the exec engine (#1087), whose PR retires it |
483+
| `nvx-rs/src/guest/cgroup.rs - guest::cgroup (line 36)` | retired | `guest::cgroup` leaves (SL6.11b) |
484+
| `nvx-rs/src/guest/entry.rs - guest::entry (line 90)` | retired | `guest::entry` leaves (SL6.11b) |
485+
| `nvx-rs/src/guest/exec.rs - guest::exec (line 79)` | retired | `guest::exec` leaves (SL6.11b) |
486+
| `nvx-rs/src/guest/exec.rs - guest::exec::Execution::adopt (line 619)` | retired | `guest::exec` leaves (SL6.11b) |
487487
| `nvx-rs/src/guest/gpt.rs - guest::gpt (line 18)` | kept | The guest's space becomes private (#1127), whose PR moves it to the space's unit tests |
488488
| `nvx-rs/src/guest/mappings/mapper.rs - guest::mappings::mapper (line 107)` | kept | The guest's space becomes private (#1127), whose PR moves it to the space's unit tests |
489489
| `nvx-rs/src/guest/mappings/table.rs - guest::mappings::table::MappingTable (line 47)` | kept | |
490-
| `nvx-rs/src/guest/mod.rs - guest (line 39)` | kept | The guest-agent guidelines quote it |
490+
| `nvx-rs/src/guest/mod.rs - guest (line 34)` | kept | The guest-agent guidelines quote it |
491491
| `nvx-rs/src/guest/nvxs.rs - guest::nvxs (line 22)` | kept | |
492-
| `nvx-rs/src/guest/process.rs - guest::process (line 12)` | kept | Its module leaves with the exec engine (#1087), whose PR retires it |
493-
| `nvx-rs/src/guest/process.rs - guest::process (line 39)` | kept | Its module leaves with the exec engine (#1087), whose PR retires it |
492+
| `nvx-rs/src/guest/process.rs - guest::process (line 12)` | retired | `guest::process` leaves (SL6.11b) |
493+
| `nvx-rs/src/guest/process.rs - guest::process (line 39)` | retired | `guest::process` leaves (SL6.11b) |
494494
| `nvx-rs/src/guest/reseed.rs - guest::reseed (line 17)` | kept | |
495-
| `nvx-rs/src/guest/root.rs - guest::root (line 130)` | kept | The guest's space becomes private (#1127), whose PR moves it to the space's unit tests |
495+
| `nvx-rs/src/guest/root.rs - guest::root (line 126)` | kept | SL6.11b removed its bootstrap, which left with the cgroups. The guest's space becomes private (#1127), whose PR moves it to the space's unit tests |
496496
| `nvx-rs/src/guest/snapshot.rs - guest::snapshot (line 25)` | kept | The guest-agent guidelines quote it |
497-
| `nvx-rs/src/guest/spawn.rs - guest::spawn (line 41)` | kept | Its module leaves with the exec engine (#1087), whose PR retires it |
498-
| `nvx-rs/src/guest/spawn.rs - guest::spawn::LaunchStage::from_code (line 201)` | rewritten | `nvx-rs/src/guest/spawn/tests.rs::launch_stages_keep_their_numbers`. The exec engine's launch failure and outcome, which the example read, leave with the engine (SL6.11a) |
497+
| `nvx-rs/src/guest/spawn.rs - guest::spawn (line 41)` | retired | `guest::spawn` leaves (SL6.11b) |
498+
| `nvx-rs/src/guest/spawn.rs - guest::spawn::LaunchStage::from_code (line 201)` | retired | `LaunchStage::from_code` and its test, `launch_stages_keep_their_numbers`, leave with `guest::spawn` (SL6.11b). The stages of nvx-init's executions keep their numbers in the crate's own fork boundary, whose launch report `nvx-rs/src/guest/init/tests/exec.rs::native_workload_cwd_accepts_procfs_links_but_closes_inherited_descriptors` reads from a real launch |
499499
| `nvx-rs/src/guest/terminal.rs - guest::terminal (line 10)` | kept | |
500500
| `nvx-rs/src/guest/time/mod.rs - guest::time (line 9)` | kept | SL6.11c removed its capture and restore finish, which became crate-private: `guest::snapshot::capture` runs them |
501501
| `nvx-rs/src/host/sandbox/prepared.rs - host::sandbox::prepared::PreparedLaunch (line 92)` | retired | `PreparedLaunch` leaves with the checked-file handoff (SL6.3, #1122) |
@@ -505,9 +505,9 @@ this matrix. The README's own code is no doctest.
505505
| `nvx-rs/src/host/template/plan.rs - host::template::plan::TemplatePlan (line 137)` | retired | `TemplatePlan` leaves with the template store (SL6.2a, #1121) |
506506
| `nvx-rs/src/host/template/store.rs - host::template::store::Store (line 473)` | retired | The template store leaves (SL6.2a, #1121) |
507507
| `nvx-rs/src/host/transport.rs - host::transport (line 22)` | kept | |
508-
| `nvx-rs/src/lib.rs - (line 58)` | rewritten | Its `Instance` and sandbox store leave (SL6.1, #1121): `nvx-rs/src/lib.rs - (line 57)` compiles a cold boot and a stop through `host::vm` |
508+
| `nvx-rs/src/lib.rs - (line 58)` | rewritten | Its `Instance` and sandbox store leave (SL6.1, #1121): `nvx-rs/src/lib.rs - (line 53)` compiles a cold boot and a stop through `host::vm` |
509509
| `nvx-rs/src/protocol/nvxs/mod.rs - protocol::nvxs (line 68)` | kept | |
510510
| `nvx-rs/src/host/snapshot/capture.rs - host::snapshot::capture::finish_capture (line 48)` | kept | |
511511
| `nvx-rs/src/host/store/mod.rs - host::store (line 104)` | retired | The sandbox store leaves (SL6.1, #1121) |
512-
| `nvx-rs/README.md`, its Example: an instance through `LaunchSpec` and the sandbox store | rewritten | Nothing compiles it. `nvx-rs/examples/host-workflows.rs` compiles the documented host workflows, and the library's guide (SL6.10a) replaces the example. SL6.1 (#1121) made it the cold boot that `nvx-rs/src/lib.rs - (line 57)` compiles |
512+
| `nvx-rs/README.md`, its Example: an instance through `LaunchSpec` and the sandbox store | rewritten | Nothing compiles it. `nvx-rs/examples/host-workflows.rs` compiles the documented host workflows, and the library's guide (SL6.10a) replaces the example. SL6.1 (#1121) made it the cold boot that `nvx-rs/src/lib.rs - (line 53)` compiles |
513513
| `nvx-rs/examples/external-launch.rs` | kept | Compiled with the crate's targets, and run by hand on a host. Since SL6.3 (#1122), which deletes `host::supervisor`, a minimal launcher of its own on `std::process` starts its VMM |

‎doc/guest-agent-guidelines.md‎

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,8 @@ forks a child, which waits for a grandchild that forces an RCU grace period,
5353
and collects only the child, so a grandchild that outlives the RCU stall
5454
timeout passes to PID 1, or to the nearest subreaper. No call starts the
5555
announcer, which is a program, `/sbin/nvx-ingress`: an init runs it itself,
56-
or has `nvx-ingress start` run it from a socket that it binds for it. Until
57-
the nvx-rs slimming
58-
([microsoft/nvx#1076](https://github.com/microsoft/nvx/issues/1076)) removes
59-
them, the crate also keeps the older process
60-
modules, `guest::{exec, spawn, entry, cgroup, process}`, which NVX's older
61-
guest agents use. nvx-init uses none of these modules, and its time daemon
62-
runs for the VM's life.
56+
or has `nvx-ingress start` run it from a socket that it binds for it.
57+
nvx-init's time daemon runs for the VM's life.
6358

6459
## Build the space
6560

‎nvx-rs/README.md‎

Lines changed: 10 additions & 122 deletions
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,11 @@ nvx-rs/
5252
│ ├── testing/ feature `testing`: the fake OpenVMM
5353
│ ├── guest/ feature `guest`: the programs that run in Linux guests, the guest's NVXS
5454
│ │ connection, the libraries through which a guest init or agent opens the
55-
│ │ terminal on which it serves its session, starts a program, drives its
56-
│ │ execution, collects its children's statuses, settles its executions'
57-
│ │ cgroups, mounts host mappings beneath the descriptors of the roots that it
58-
│ │ names, assembles and tears down a layered root, reads a GPT disk's partition
59-
│ │ table through its block device, and prepares a template's guest for a
60-
│ │ capture before its root's assembly, and the typed calls through which it
61-
│ │ runs the time ABI's steps and the reseed
55+
│ │ terminal on which it serves its session, mounts host mappings beneath the
56+
│ │ descriptors of the roots that it names, assembles and tears down a layered
57+
│ │ root, reads a GPT disk's partition table through its block device, and
58+
│ │ prepares a template's guest for a capture before its root's assembly, and
59+
│ │ the typed calls through which it runs the time ABI's steps and the reseed
6260
│ └── bin/ nvx-rs, nvx-fake-openvmm, and the guest binaries
6361
├── tests/ fake-OpenVMM, CLI, NVXS session, process and spawn, checked-handoff,
6462
│ host-module layering, and guest-binary tests, the CLI's scenario tests and
@@ -130,16 +128,11 @@ changes only when the module's purpose does.
130128
| [`nvx::guest::mappings`](#nvxguestmappings) | `Mapping` and `MappingTable`: host mappings, and the account of a host's mapping table, for any guest init or agent |
131129
| [`nvx::guest::nvxs`](#nvxguestnvxs) | `GuestConnection`: the guest's role of the NVXS session over a byte stream, such as the control console |
132130
| [`nvx::guest::terminal`](#nvxguestterminal) | `Terminal`: the terminal on which a guest agent serves its session, such as the VM's control console |
133-
| [`nvx::guest::spawn`](#nvxguestspawn) | `Command`: starts a program in a new process, for any guest init or agent |
134-
| [`nvx::guest::entry`](#nvxguestentry) | `Entry`: the namespaces, view, root, and identity in which a program runs, for any guest init or agent |
135-
| [`nvx::guest::process`](#nvxguestprocess) | `Child`: the status of one child that the caller names, and of no other |
136-
| [`nvx::guest::cgroup`](#nvxguestcgroup) | Cgroup v2 handles through which a guest init or agent places, accounts, kills, and settles its executions |
137-
| [`nvx::guest::exec`](#nvxguestexec) | `Execution`: drives one program as an execution, for any guest init or agent |
138131
| [`nvx::guest::time`](#nvxguesttime) | x86_64: the boot steps of NVX time ABI v1 as typed calls in the caller's process, for any guest init or agent |
139132
| [`nvx::guest::snapshot`](#nvxguestsnapshot) | x86_64: bounded Fresh capture with inline restore repair and staged failure dispositions, without execution control |
140133
| [`nvx::guest::activation`](#nvxguestactivation) | x86_64: fence-free activation of each clone that its capture repaired |
141134
| [`nvx::guest::reseed`](#nvxguestreseed) | A restore's fresh entropy, and the reseed of the kernel's random number generator with it |
142-
| [`nvx::guest::root`](#nvxguestroot) | The operations of a layered root: its bootstrap, assembly, shares, export, mappings, and teardown |
135+
| [`nvx::guest::root`](#nvxguestroot) | The operations of a layered root: its assembly, shares, export, mappings, and teardown |
143136
| [`nvx::guest::view`](#nvxguestview) | The VM-wide hostname, machine ID, and single-server resolver, whose binds the layered root owns |
144137
| [`nvx::guest::gpt`](#nvxguestgpt) | `read_disk`: the partition table of a GPT disk, read and checked through its block device |
145138

@@ -1199,101 +1192,6 @@ session's bytes as they are, and drains it, so that it sends what the agent
11991192
wrote before the agent ends the VM. NVX's managed agent and other guest agents
12001193
serve their sessions on it.
12011194

1202-
### `nvx::guest::spawn`
1203-
1204-
`Command`: starts a program in a new process for any guest init or agent, with
1205-
its arguments, environment, a `PATH` in which it looks for a program named
1206-
without a `/`, root and working directories, standard streams, inherited
1207-
descriptors, cgroup, process group or new session, a `Barrier` at which the
1208-
program waits until the caller releases it, a reset that gives every signal its
1209-
default disposition and blocks none, and an `entry::Prepared` execution to
1210-
enter, without NVX's control protocol, managed agent, or workload identity.
1211-
1212-
Its `LaunchReport` tells whether the program started, or which `LaunchStage`
1213-
failed and why. Each stage keeps its number, `LaunchStage::code`, which
1214-
`LaunchStage::from_code` turns back into the stage, and a new stage takes a
1215-
number of its own.
1216-
1217-
### `nvx::guest::entry`
1218-
1219-
`Entry`: the execution that a program enters, for any guest init or agent, from
1220-
typed inputs: a root, which is a mount, moved over `/` in new mount, PID, and
1221-
UTS namespaces, where the program is PID 1 and leads a new session; a hostname;
1222-
a fresh procfs, a read-only sysfs, and a `/dev` of its own with only the
1223-
allowlisted `DeviceNode`s, a devpts, and a `/dev/shm`, every other mount
1224-
`nodev`; the `MachineId`, the image's own or one generated by
1225-
`MachineId::generate`, the time status, and the resolver file that
1226-
`Entry::resolver` names, if any, which `Entry::bind_runtime` binds read-only
1227-
into the root once, through `mappings::bind`'s walk and attach, for every later
1228-
execution, and returns as `RuntimeBinds`, which `RuntimeBinds::remove` unmounts
1229-
in reverse order before the root's teardown, and of which a failed bind removes
1230-
those made before it, with an `Error::Rollback` that names any that stays; and
1231-
the `Identity`: user and group IDs, supplementary groups, and `Capabilities`
1232-
from an allowlist, which only user ID 0 may hold, without `CAP_NET_BIND_SERVICE`
1233-
and `CAP_NET_RAW` while the execution's listeners are `Publication::Published`,
1234-
taken with `no_new_privs`.
1235-
1236-
Its program starts with every signal's default disposition and none blocked. For
1237-
user ID 0, the risky procfs and sysfs entries are read-only or masked.
1238-
1239-
`Entry::prepare` checks it, reads the existing `Account` of the IDs from the
1240-
root's account databases unless `AccountMode::Numeric` takes them as they are,
1241-
and `spawn::Command::enter` runs it, with each step a `LaunchStage`. It reads no
1242-
kernel command line or boot token and creates no account.
1243-
1244-
### `nvx::guest::process`
1245-
1246-
`Child`: the status of one child that the caller names, by its pidfd or its
1247-
process ID. It waits for that child alone, so another child's status stays for
1248-
the caller; a caller that collects every status itself, such as a PID 1 that
1249-
adopts orphans, hands each one to its `Child` with `observe`. Statuses are
1250-
`std::process::ExitStatus`, real-time signals included.
1251-
1252-
### `nvx::guest::cgroup`
1253-
1254-
`Layout`: the agent's cgroup and the workload cgroup, which the caller names,
1255-
and which may not hold the agent's.
1256-
1257-
`ExecutionCgroup`: the cgroup of one execution, the workload cgroup itself or a
1258-
child of it, which it prepares with the caller's resource values, places
1259-
processes in, checks for occupancy through `pids.current`, kills with
1260-
`cgroup.kill`, and settles, over the execution's cgroup or the whole workload
1261-
subtree, as the caller's `Scope` chooses. It holds its cgroups' directories
1262-
open, and the process's removals and preparations of cgroups take turns, so that
1263-
it never reaches another cgroup that takes one of their paths. Settling calls
1264-
the caller's status collector between its checks, and collects no status itself.
1265-
1266-
### `nvx::guest::exec`
1267-
1268-
`Execution`: drives one program that the caller spawned with the program's ends
1269-
of its `Pipes`, or that the caller started itself and adopts with its own ends
1270-
of the program's pipes and a `Child` that names it, without blocking, from the
1271-
caller's own loop or reactor, and reports each step as an `Event`: the launch
1272-
report, which an adopted program has at once, the output of each stream, kill
1273-
failures, and the `Outcome`.
1274-
1275-
It reads a stream only as far as the caller's `grant` allows, so a stalled sink
1276-
stalls its own execution alone, writes the program's standard input without
1277-
`SIGPIPE`, and ends the program on a cancellation, a timeout, or a
1278-
disconnection, with `SIGKILL` through the program's pidfd to the program and, if
1279-
the caller asks, its process group, while no collector has taken its status,
1280-
and, through the opened directory of a cgroup that the caller names, to that
1281-
cgroup.
1282-
1283-
`signal` sends the program a signal that the caller chooses, such as `SIGTERM`
1284-
for a graceful stop, as container runtimes stop their workloads, to the same
1285-
processes but the cgroup's, each of them once unless the program leaves its
1286-
group meanwhile, while no collector has taken its status. It ends neither the
1287-
program nor the execution: it records no cause, so a program that exits after it
1288-
ends with its own status, and the caller ends one that outlives the caller's own
1289-
deadline with `terminate` or `cancel`. It refuses `SIGKILL`, which only the
1290-
execution's causes send.
1291-
1292-
It closes the program's input once the program has ended. It waits for its
1293-
program alone, by a pidfd, or takes the status from the caller's collector with
1294-
`observe`; with `Options::caller_reaps`, that collector is the program's only
1295-
one.
1296-
12971195
### `nvx::guest::time`
12981196

12991197
x86_64: `TimeAbi`, the boot steps of NVX time ABI v1 as typed calls in the
@@ -1316,7 +1214,7 @@ snapshot capture below prepares strictly.
13161214
A call takes the permission for OpenVMM's ports on the calling thread for each
13171215
port transaction alone, and fails with `TimeError::PortRelease` if the thread
13181216
may still hold some of it, which a process that it started would inherit, and
1319-
from which `nvx::guest::spawn` starts none. No call waits for a child that it
1217+
from which NVX's guest programs start none. No call waits for a child that it
13201218
did not start.
13211219

13221220
`nvx-time` runs its steps through them.
@@ -1478,11 +1376,6 @@ The operations of a layered root, for a guest init or agent, whether or not it
14781376
is PID 1. The module is hidden: NVX's internal reference code of the guest's
14791377
space, unstable, and crate-private once nothing outside NVX uses it.
14801378

1481-
`bootstrap`: the agent's and the workload's sibling cgroups of a `Layout`, with
1482-
every process of their parent moved into the agent's, the agent's `memory.low`,
1483-
and the workload cgroup prepared through `ExecutionCgroup::prepare`, with its
1484-
`memory.max` and `pids.max`, and user namespaces kept unavailable.
1485-
14861379
`assemble`: the `Assembly`'s block devices, found by their MMIO windows, checked
14871380
against their roles' access modes and their expected sizes, and flushed, and the
14881381
`Root` that it mounts, at a runtime directory, a canonical path that no symbolic
@@ -2679,17 +2572,12 @@ The `guest` feature adds the programs that run in NVX's Linux guests: the
26792572
`nvx::guest` module and one binary per program. The Alpine, Ubuntu, and Azure
26802573
Linux images ship all ten at their established `/sbin/nvx-*` paths. The
26812574
module's libraries are not programs: `terminal` opens the terminal on which an
2682-
agent serves its session, `spawn` starts a program in a new process, `entry`
2683-
has the program enter an execution's namespaces, view, root, and identity,
2684-
`process` collects the status of a child that the caller names, `cgroup`
2685-
places, kills, and settles the processes of an execution, `exec` drives one
2686-
program as an execution, and `mappings` describes host mappings and keeps the
2575+
agent serves its session, and `mappings` describes host mappings and keeps the
26872576
account of a host's mapping table. NVX's own guest space is internal reference
26882577
code, hidden, unstable, and crate-private once nothing outside NVX uses it:
26892578
the mapper of `mappings` mounts host mappings beneath the descriptors of the
2690-
roots that its caller names, and `root` bootstraps the guest for a layered root
2691-
through `cgroup`, assembles the root, mounts live shares and mappings in it
2692-
through the mapper, and tears it down.
2579+
roots that its caller names, and `root` assembles a layered root, mounts live
2580+
shares and mappings in it through the mapper, and tears it down.
26932581
`nvx-managed-agent` opens its control terminal and runs direct workloads through
26942582
nvx-init's plain-process core: each child resets its priority, drops its
26952583
credentials and capabilities, and enters its working directory before exec.

0 commit comments

Comments
 (0)