feat: allow to configure runner concurrency

This commit is contained in:
Paul Pan 2024-04-28 01:11:57 +08:00
parent 98578709f8
commit 1dfe296820
Signed by: Paul
GPG Key ID: D639BDF5BA578AF4
5 changed files with 13 additions and 3 deletions

View File

@ -39,6 +39,7 @@ Storage:
Runner:
CGroup: ${CGROUP_PATH}
Concurrency: ${RUNNER_CONCURRENCY}
Metrics:
Namespace: ${METRICS_NAMESPACE}

View File

@ -75,6 +75,7 @@ function extract_storage() {
function extract_runner() {
check_env "CGROUP_PATH" "/sys/fs/cgroup/nsjail" true
check_env "RUNNER_CONCURRENCY" 0 false
}
function extract_metrics() {

View File

@ -50,7 +50,8 @@ type ConfigStorage struct {
}
type ConfigRunner struct {
CGroup string `yaml:"CGroup"`
CGroup string `yaml:"CGroup"`
Concurrency int `yaml:"Concurrency"`
}
type ConfigMetrics struct {

View File

@ -38,9 +38,13 @@ type Service interface {
}
func NewService(i *do.Injector) (Service, error) {
concurrency := utils.If(runtime.NumCPU() > 1, runtime.NumCPU()-1, 1)
cfg := do.MustInvoke[config.Service](i).GetConfig()
concurrency := cfg.Runner.Concurrency
if concurrency <= 0 {
concurrency = utils.If(runtime.NumCPU() > 1, runtime.NumCPU()-1, 1)
}
srv := &service{
log: do.MustInvoke[log.Service](i).GetLogger("runner"),
pool: pool.NewTaskPool(concurrency, concurrency),

View File

@ -24,7 +24,10 @@ func GetService(dev bool) Service {
cfg := &FakeConfigService{conf: model.Config{
Development: dev,
Runner: model.ConfigRunner{CGroup: "/sys/fs/cgroup/nsjail"},
Runner: model.ConfigRunner{
CGroup: "/sys/fs/cgroup/nsjail",
Concurrency: 0,
},
}}
do.ProvideValue[config.Service](injector, cfg)