feat(api): Add blkio cgroup tuning via --blkio flag#1595
Draft
chrisgeo wants to merge 3 commits into
Draft
Conversation
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.
chrisgeo
commented
May 24, 2026
| ], | ||
| dependencies: [ | ||
| .package(url: "https://github.com/apple/containerization.git", exact: Version(stringLiteral: scVersion)), | ||
| .package(url: "https://github.com/full-chaos/containerization.git", branch: scVersion), |
Contributor
Author
There was a problem hiding this comment.
Will remove before merge.
chrisgeo
commented
May 24, 2026
| _serve/ | ||
| .vscode/** | ||
| .worktrees/** | ||
| .worktress/** |
Contributor
Author
There was a problem hiding this comment.
Will remove before merge.
chrisgeo
commented
May 24, 2026
Comment on lines
2
to
20
| @@ -13,10 +13,10 @@ | |||
| { | |||
| "identity" : "containerization", | |||
| "kind" : "remoteSourceControl", | |||
| "location" : "https://github.com/apple/containerization.git", | |||
| "location" : "https://github.com/full-chaos/containerization.git", | |||
| "state" : { | |||
| "revision" : "db5b5b98405d53543f69105087130ffd623a5b9a", | |||
| "version" : "0.32.2" | |||
| "branch" : "feat/chaos-1380-blkio-runtime", | |||
| "revision" : "3d009dfc2724fc924dd18ca2014b5e839d554163" | |||
| } | |||
Contributor
Author
There was a problem hiding this comment.
Will revert before merge.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Type of Change
Motivation and Context
Closes #1512.
Adds block I/O cgroup tuning to
container run/container createsocompose translators (e.g. container-compose) can pass through Docker
Compose
service.blkio_configinstead of warn-skipping it.The CLI shape follows the grouped, repeatable key=value form proposed in
#1512 (comment):
The
device=value accepts either an absolute host path (resolved viastat(2)for major/minor) or a literal<major>:<minor>. Keys allowedon a per-device spec:
weight,leaf-weight,read-bps,write-bps,read-iops,write-iops. Keys allowed on a global spec (nodevice=):weight,leaf-weight. Parser rejects unknown keys, conflictingglobal weights, and global-only keys mixed onto device-less specs.
Runtime plumbing
Block I/O propagates as
ContainerConfiguration.Resources.blockIO(serialised as
ContainerizationOCI.LinuxBlockIO) and is converted toContainerization.LinuxBlockIOat the runtime boundary inRuntimeService.configureContainer.Dependency
Depends on apple/containerization#739, which introduces
Containerization.LinuxBlockIO(theSendablewrapper around the OCItype) and wires it into
LinuxContainer.Configuration. While that PR isunmerged this branch pins
containerizationto the PR branch(
full-chaos/containerization@feat/chaos-1380-blkio-runtime,revision
3d009df). Before merge, the pin must be moved back toapple/containerizationat whatever revision lands #739.Testing
swift buildclean,swift test --filter ParserTestpasses(105 tests, 5 new):
testResourcesBlockIOFlags— combined global + per-device + throttletestResourcesBlockIOAcceptsMajorMinorLiteral—device=8:0literaltestResourcesRejectsInvalidBlockIOWeight— weight outside 10..1000testResourcesRejectsUnknownBlockIOKey— typo detectiontestResourcesRejectsGlobalKeyOnDeviceSpec—read-bpswithoutdevice=container run --helpconfirmed renders the new--blkioflag.