internal/pkg: per-cache SCHED_IDLE
All checks were successful
Test / Create distribution (push) Successful in 1m19s
Test / Sandbox (push) Successful in 3m11s
Test / Hakurei (push) Successful in 4m22s
Test / ShareFS (push) Successful in 4m27s
Test / Sandbox (race detector) (push) Successful in 5m49s
Test / Hakurei (race detector) (push) Successful in 6m48s
Test / Flake checks (push) Successful in 1m27s

This is cleaner than setting it globally, and is impossible to race.

Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
2026-04-03 16:48:43 +09:00
parent 5093a06026
commit 591a60bac9
3 changed files with 9 additions and 6 deletions

View File

@@ -88,10 +88,12 @@ func main() {
} else if base, err = check.NewAbs(flagBase); err != nil {
return
}
cache, err = pkg.Open(ctx, msg, 0, flagCures, base)
var flags int
if flagIdle {
pkg.SetSchedIdle = true
flags &= pkg.CSchedIdle
}
cache, err = pkg.Open(ctx, msg, flags, flagCures, base)
return
}).Flag(

View File

@@ -40,9 +40,6 @@ type ExecPath struct {
W bool
}
// SetSchedIdle is whether to set [ext.SCHED_IDLE] scheduling priority.
var SetSchedIdle bool
// GetArtifactFunc is the function signature of [FContext.GetArtifact].
type GetArtifactFunc func(Artifact) (*check.Absolute, unique.Handle[Checksum])
@@ -427,7 +424,6 @@ func (a *execArtifact) makeContainer(
z.ParentPerm = 0700
z.HostNet = hostNet
z.Hostname = "cure"
z.SetScheduler = SetSchedIdle
z.SchedPolicy = ext.SCHED_IDLE
if z.HostNet {
z.Hostname = "cure-net"
@@ -609,6 +605,7 @@ func (a *execArtifact) cure(f *FContext, hostNet bool) (err error) {
); err != nil {
return
}
z.SetScheduler = f.cache.flags&CSchedIdle != 0
var status io.Writer
if status, err = f.GetStatusWriter(); err != nil {

View File

@@ -503,6 +503,10 @@ const (
// This behaviour significantly reduces performance and is not recommended
// outside of testing a custom [Artifact] implementation.
CValidateKnown = 1 << iota
// CSchedIdle arranges for the [ext.SCHED_IDLE] scheduling priority to be
// set for [KindExec] and [KindExecNet] containers.
CSchedIdle
)
// Cache is a support layer that implementations of [Artifact] can use to store