Skip to content

Add LinuxContainer block I/O resources#739

Open
chrisgeo wants to merge 2 commits into
apple:mainfrom
full-chaos:feat/chaos-1380-blkio-runtime
Open

Add LinuxContainer block I/O resources#739
chrisgeo wants to merge 2 commits into
apple:mainfrom
full-chaos:feat/chaos-1380-blkio-runtime

Conversation

@chrisgeo
Copy link
Copy Markdown

Adds ability to expose blockio flags in support of: https://github.com/apple/container/issues/1512

/// The memory in bytes to give to the container.
public var memoryInBytes: UInt64 = 1024.mib()
/// Optional block I/O resource limits for the container cgroup.
public var blockIO: LinuxBlockIO?
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd prefer we don't use the OCI types directly (it gives us a little wiggle room to add various knobs). You can add a new LinuxBlockIO type in Containerization and use this and just convert to the oci variant like we do for other things in this file.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the feedback.

Does this new shape align with what you were imagining?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@dcantah @chrisgeo see apple/container#1512 (comment) for thoughts on container UX as well.

Mirrors the LinuxRLimit/LinuxCapabilities pattern so the public API can
evolve independently of the OCI spec types. Configuration.blockIO now
holds the wrapper and is converted via toOCI() at spec assembly.
@jglogan jglogan self-requested a review May 18, 2026 17:06
chrisgeo added a commit to full-chaos/container that referenced this pull request May 24, 2026
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.
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.

3 participants