Skip to content

feat(api): Add blkio resource flags#17

Open
chrisgeo wants to merge 6 commits into
mainfrom
feat/chaos-1380-blkio-flags
Open

feat(api): Add blkio resource flags#17
chrisgeo wants to merge 6 commits into
mainfrom
feat/chaos-1380-blkio-flags

Conversation

@chrisgeo

@chrisgeo chrisgeo commented May 6, 2026

Copy link
Copy Markdown

Summary

  • Adds --blkio-weight, --blkio-weight-device, --device-read-bps, --device-write-bps, --device-read-iops, and --device-write-iops resource flags.
  • Parses block I/O device specs into OCI LinuxBlockIO resources and propagates them through ContainerConfiguration into sandbox setup.
  • Points the containerization dependency at the CHAOS-1380 block I/O runtime branch.

Validation

  • CLANG_MODULE_CACHE_PATH=/tmp/container-clang-cache SWIFTPM_ENABLE_PLUGINS=0 swift test --filter ParserTest/testResourcesBlockIOFlags
  • CLANG_MODULE_CACHE_PATH=/tmp/container-clang-cache SWIFTPM_ENABLE_PLUGINS=0 swift test --filter 'ParserTest/testResources(BlockIOFlags|RejectsInvalidBlockIOWeight)'
  • CLANG_MODULE_CACHE_PATH=/tmp/container-clang-cache SWIFTPM_ENABLE_PLUGINS=0 swift build
  • git diff --check

Dependencies

Depends on apple/containerization#739

@linear

linear Bot commented May 6, 2026

Copy link
Copy Markdown

@chrisgeo chrisgeo changed the title [codex] Add blkio resource flags feat(api): Add blkio resource flags May 6, 2026
@chrisgeo chrisgeo force-pushed the feat/chaos-1380-blkio-flags branch from 873d613 to 7978fb9 Compare May 14, 2026 18:02
@chrisgeo chrisgeo marked this pull request as ready for review May 14, 2026 18:06
@chrisgeo chrisgeo force-pushed the feat/chaos-1380-blkio-flags branch 2 times, most recently from 2921cd9 to 8265a51 Compare May 27, 2026 18:41
chrisgeo and others added 5 commits May 28, 2026 19:24
Two changes addressing review feedback from
apple/containerization#739 and
apple#1512 (comment):

1. Adopt the new `Containerization.LinuxBlockIO` wrapper added in
   containerization PR apple#739 (pin advanced to 3d009df). The wire format in
   `ContainerConfiguration.Resources.blockIO` stays as the Codable
   `ContainerizationOCI.LinuxBlockIO`; `RuntimeService.configureContainer`
   converts to the wrapper at the boundary via the new
   `toContainerizationBlockIO` helper.

2. Replace the six separate `--blkio-*` / `--device-*` flags with a
   single repeatable `--blkio` flag using key=value[,key=value] syntax,
   per apple#1512 (comment):

       --blkio weight=500
       --blkio device=/dev/sda,weight=700,leaf-weight=300
       --blkio device=/dev/sda,read-bps=1048576,write-bps=1048576
       --blkio device=/dev/sda,read-iops=1000,write-iops=1000

   Device values accept either an absolute host path (resolved via stat(2))
   or a literal `<major>:<minor>`. Parser rejects unknown keys, conflicting
   global weights, and global-only keys appearing on device-less specs.

Tests cover the combined spec, major:minor literal, invalid-weight,
unknown-key, and global-only-on-device-spec error paths.
…imeData

Addresses jglogan review feedback on PR apple#1595:

1. Move `blockIO` field out of the cross-platform
   `ContainerConfiguration.Resources` and into the Linux-specific
   `LinuxRuntimeData`. The CLI now encodes `LinuxRuntimeData(blockIO: …)`
   into the opaque `RuntimeConfiguration.runtimeData` field, and the
   Linux runtime decodes it inside `configureContainer` before applying
   the OCI `LinuxBlockIO` to `czConfig.blockIO`. Keeps OS-specific
   options out of the generic container config type.

2. Move the `--blkio` flag from `Flags.Resource` to `Flags.Management`
   and simplify its help to a single line pointing at the command
   reference, in the spirit of the existing generic options pattern.
   The structured key=value parsing/validation in `Parser.blockIO` is
   unchanged.

3. `Parser.resources` no longer takes `blkio`; `Parser.blockIO` stays
   public and is now invoked by `ContainerRun` / `ContainerCreate`
   directly. Tests rewritten to exercise `Parser.blockIO` directly.

`swift build` clean; `swift test --filter ParserTest` 105 tests pass,
`RuntimeConfiguration` tests pass, `container run --help` shows
`--blkio` under MANAGEMENT OPTIONS.

Deferred (per PR body): Package.swift / Package.resolved still pin
containerization to apple/containerization#739's branch because that
upstream PR is still open. Those will revert to apple/containerization
at merge time, once apple#739 lands.
The branch pin to full-chaos/containerization@feat/chaos-1380-blkio-runtime
was a temporary measure while apple/containerization#739 was in flight.
Revert to the upstream pin so this PR can be merged independently of apple#739.

Note: the runtime plumbing in RuntimeService.swift still references
Containerization.LinuxBlockIO and czConfig.blockIO, which only exist on
the apple#739 branch. The build will be temporarily broken until apple#739 lands
upstream and the pin is bumped to whatever release contains it.
Co-authored-by: J Logan <sgtbakerrahulnet@yahoo.com>
@chrisgeo chrisgeo force-pushed the feat/chaos-1380-blkio-flags branch from 9bc6f25 to 9736b24 Compare May 29, 2026 02:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant