Skip to content

Commit 5e52c1e

Browse files
authored
Persistent Worker: introduce "tuning" section to configuration file (#955)
1 parent 3af5e7d commit 5e52c1e

File tree

9 files changed

+64
-14
lines changed

9 files changed

+64
-14
lines changed

internal/commands/worker/config.go

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,23 @@ import (
44
"bytes"
55
"errors"
66
"fmt"
7+
"io"
8+
"os"
9+
"strconv"
10+
"strings"
11+
712
"github.com/cirruslabs/cirrus-cli/internal/executor/endpoint"
813
"github.com/cirruslabs/cirrus-cli/internal/worker"
914
"github.com/cirruslabs/cirrus-cli/internal/worker/chacha"
1015
"github.com/cirruslabs/cirrus-cli/internal/worker/resourcemodifier"
1116
"github.com/cirruslabs/cirrus-cli/internal/worker/security"
17+
"github.com/cirruslabs/cirrus-cli/internal/worker/tuning"
1218
"github.com/cirruslabs/cirrus-cli/internal/worker/upstream"
1319
"github.com/dustin/go-humanize"
1420
"github.com/sirupsen/logrus"
1521
"github.com/spf13/cobra"
1622
"gopkg.in/natefinch/lumberjack.v2"
1723
"gopkg.in/yaml.v3"
18-
"io"
19-
"os"
20-
"strconv"
21-
"strings"
2224
)
2325

2426
var ErrConfiguration = errors.New("configuration error")
@@ -38,6 +40,8 @@ type Config struct {
3840

3941
Security *security.Security `yaml:"security"`
4042

43+
Tuning *tuning.Tuning `yaml:"tuning"`
44+
4145
Standby *worker.StandbyConfig `yaml:"standby"`
4246

4347
ResourceModifiers []*resourcemodifier.Modifier `yaml:"resource-modifiers"`
@@ -234,6 +238,10 @@ func buildWorker(output io.Writer, opts ...worker.Option) (*worker.Worker, error
234238
))
235239
}
236240

241+
if config.Tuning != nil {
242+
opts = append(opts, worker.WithTuning(config.Tuning))
243+
}
244+
237245
if config.TartPrePull != nil {
238246
opts = append(opts, worker.WithTartPrePull(config.TartPrePull))
239247
}

internal/executor/instance/instance.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@ package instance
33
import (
44
"errors"
55
"fmt"
6+
"path"
7+
"runtime"
8+
"strings"
9+
610
"github.com/cirruslabs/cirrus-cli/internal/executor/instance/abstract"
711
"github.com/cirruslabs/cirrus-cli/internal/executor/instance/container"
812
"github.com/cirruslabs/cirrus-cli/internal/executor/instance/persistentworker"
@@ -16,9 +20,6 @@ import (
1620
"golang.org/x/text/language"
1721
"google.golang.org/protobuf/proto"
1822
"google.golang.org/protobuf/types/known/anypb"
19-
"path"
20-
"runtime"
21-
"strings"
2223
)
2324

2425
var (
@@ -96,7 +97,7 @@ func NewFromProto(
9697
Arguments: instance.Arguments,
9798
}, nil
9899
case *api.PersistentWorkerInstance:
99-
return persistentworker.New(instance.Isolation, security.NoSecurityAllowAllVolumes(), nil, logger)
100+
return persistentworker.New(instance.Isolation, security.NoSecurityAllowAllVolumes(), nil, nil, logger)
100101
case *api.DockerBuilder:
101102
// Ensures that we're not trying to run e.g. Windows-specific scripts on macOS
102103
instanceOS := strings.ToLower(instance.Platform.String())
@@ -112,7 +113,7 @@ func NewFromProto(
112113
Type: &api.Isolation_None_{
113114
None: &api.Isolation_None{},
114115
},
115-
}, security.NoSecurity(), nil, logger)
116+
}, security.NoSecurity(), nil, nil, logger)
116117
case *api.MacOSInstance:
117118
return tart.New(instance.Image, instance.User, instance.Password, 22,
118119
instance.Cpu, instance.Memory, tart.WithLogger(logger))

internal/executor/instance/persistentworker/isolation/vetu/vetu.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"github.com/cirruslabs/cirrus-cli/internal/executor/platform"
1515
"github.com/cirruslabs/cirrus-cli/internal/logger"
1616
"github.com/cirruslabs/cirrus-cli/internal/worker/resourcemodifier"
17+
"github.com/cirruslabs/cirrus-cli/internal/worker/tuning"
1718
"github.com/cirruslabs/cirrus-cli/pkg/api"
1819
"github.com/cirruslabs/echelon"
1920
"github.com/getsentry/sentry-go"
@@ -44,6 +45,7 @@ type Vetu struct {
4445
bridgedInterface string
4546
hostNetworking bool
4647
resourceModifier *resourcemodifier.Modifier
48+
tuning *tuning.Tuning
4749
syncTimeOverSSH bool
4850
standardOutputToLogs bool
4951

@@ -58,6 +60,7 @@ func New(
5860
cpu uint32,
5961
memory uint32,
6062
resourceModifier *resourcemodifier.Modifier,
63+
tuning *tuning.Tuning,
6164
opts ...Option,
6265
) (*Vetu, error) {
6366
vetu := &Vetu{
@@ -68,6 +71,7 @@ func New(
6871
cpu: cpu,
6972
memory: memory,
7073
resourceModifier: resourceModifier,
74+
tuning: tuning,
7175
}
7276

7377
// Apply options
@@ -125,7 +129,7 @@ func (vetu *Vetu) bootVM(
125129
tmpVMName := vmNamePrefix + identToBeInjected + uuid.NewString()
126130

127131
vm, err := NewVMClonedFrom(ctx, vetu.vmName, tmpVMName, lazyPull, env, vetu.standardOutputToLogs,
128-
vetu.resourceModifier, logger)
132+
vetu.resourceModifier, vetu.tuning, logger)
129133
if err != nil {
130134
return fmt.Errorf("%w: failed to create VM cloned from %q: %v", ErrFailed, vetu.vmName, err)
131135
}

internal/executor/instance/persistentworker/isolation/vetu/vm.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"sync"
88

99
"github.com/cirruslabs/cirrus-cli/internal/worker/resourcemodifier"
10+
"github.com/cirruslabs/cirrus-cli/internal/worker/tuning"
1011
"github.com/cirruslabs/echelon"
1112
"github.com/getsentry/sentry-go"
1213
"go.opentelemetry.io/otel/trace"
@@ -17,6 +18,7 @@ type VM struct {
1718
env map[string]string
1819
standardOutputToLogs bool
1920
resourceModifier *resourcemodifier.Modifier
21+
tuning *tuning.Tuning
2022
runningVMCtx context.Context
2123
runningVMCtxCancel context.CancelFunc
2224
wg sync.WaitGroup
@@ -31,6 +33,7 @@ func NewVMClonedFrom(
3133
env map[string]string,
3234
standardOutputToLogs bool,
3335
resourceModifier *resourcemodifier.Modifier,
36+
tuning *tuning.Tuning,
3437
logger *echelon.Logger,
3538
) (*VM, error) {
3639
runningVMCtx, runningVMCtxCancel := context.WithCancel(
@@ -42,6 +45,7 @@ func NewVMClonedFrom(
4245
env: env,
4346
standardOutputToLogs: standardOutputToLogs,
4447
resourceModifier: resourceModifier,
48+
tuning: tuning,
4549
runningVMCtx: runningVMCtx,
4650
runningVMCtxCancel: runningVMCtxCancel,
4751
errChan: make(chan error, 1),
@@ -140,6 +144,10 @@ func (vm *VM) Start(
140144
args = append(args, "--net-host")
141145
}
142146

147+
if mtu := vm.tuning.GetVetu().MTU; mtu != 0 {
148+
args = append(args, "--net-host-mtu", strconv.Itoa(mtu))
149+
}
150+
143151
// Apply "run" resource modifier
144152
if vm.resourceModifier != nil {
145153
args = append(args, vm.resourceModifier.Append.Run...)

internal/executor/instance/persistentworker/persistentworker.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
"github.com/cirruslabs/cirrus-cli/internal/logger"
1616
"github.com/cirruslabs/cirrus-cli/internal/worker/resourcemodifier"
1717
"github.com/cirruslabs/cirrus-cli/internal/worker/security"
18+
"github.com/cirruslabs/cirrus-cli/internal/worker/tuning"
1819
"github.com/cirruslabs/cirrus-cli/pkg/api"
1920
)
2021

@@ -24,6 +25,7 @@ func New(
2425
isolation *api.Isolation,
2526
security *security.Security,
2627
resourceModifier *resourcemodifier.Modifier,
28+
tuning *tuning.Tuning,
2729
logger logger.Lightweight,
2830
) (abstract.Instance, error) {
2931
if isolation == nil {
@@ -74,7 +76,7 @@ func New(
7476
case *api.Isolation_Tart_:
7577
return newTart(iso, security, logger)
7678
case *api.Isolation_Vetu_:
77-
return newVetu(iso, security, resourceModifier, logger)
79+
return newVetu(iso, security, resourceModifier, tuning, logger)
7880
default:
7981
return nil, fmt.Errorf("%w: unsupported isolation type %T", ErrInvalidIsolation, iso)
8082
}
@@ -137,6 +139,7 @@ func newVetu(
137139
iso *api.Isolation_Vetu_,
138140
security *security.Security,
139141
resourceModifier *resourcemodifier.Modifier,
142+
tuning *tuning.Tuning,
140143
logger logger.Lightweight,
141144
) (*vetu.Vetu, error) {
142145
vetuPolicy := security.VetuPolicy()
@@ -174,5 +177,5 @@ func newVetu(
174177
}
175178

176179
return vetu.New(iso.Vetu.Image, iso.Vetu.User, iso.Vetu.Password, uint16(iso.Vetu.Port),
177-
iso.Vetu.Cpu, iso.Vetu.Memory, resourceModifier, opts...)
180+
iso.Vetu.Cpu, iso.Vetu.Memory, resourceModifier, tuning, opts...)
178181
}

internal/worker/options.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"github.com/cirruslabs/cirrus-cli/internal/worker/chacha"
66
"github.com/cirruslabs/cirrus-cli/internal/worker/resourcemodifier"
77
"github.com/cirruslabs/cirrus-cli/internal/worker/security"
8+
"github.com/cirruslabs/cirrus-cli/internal/worker/tuning"
89
"github.com/cirruslabs/cirrus-cli/internal/worker/upstream"
910
"github.com/cirruslabs/cirrus-cli/pkg/api"
1011
"github.com/sirupsen/logrus"
@@ -54,6 +55,12 @@ func WithResourceModifiersManager(resourceModifiersManager *resourcemodifier.Man
5455
}
5556
}
5657

58+
func WithTuning(tuning *tuning.Tuning) Option {
59+
return func(e *Worker) {
60+
e.tuning = tuning
61+
}
62+
}
63+
5764
func WithTartPrePull(tartPrePull *TartPrePull) Option {
5865
return func(e *Worker) {
5966
e.tartPrePull = tartPrePull

internal/worker/task.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ func (worker *Worker) getInstance(
119119

120120
// Otherwise proceed with creating a new instance
121121
return persistentworker.New(isolation, worker.security,
122-
worker.resourceModifierManager.Acquire(resourcesToUse), worker.logger)
122+
worker.resourceModifierManager.Acquire(resourcesToUse), worker.tuning, worker.logger)
123123
}
124124

125125
func (worker *Worker) runTask(

internal/worker/tuning/tuning.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package tuning
2+
3+
type Tuning struct {
4+
Vetu Vetu `yaml:"vetu"`
5+
}
6+
7+
type Vetu struct {
8+
MTU int `yaml:"mtu"`
9+
}
10+
11+
func (t *Tuning) GetVetu() Vetu {
12+
if t == nil {
13+
return Vetu{}
14+
}
15+
16+
return t.Vetu
17+
}

internal/worker/worker.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919
"github.com/cirruslabs/cirrus-cli/internal/worker/chacha"
2020
"github.com/cirruslabs/cirrus-cli/internal/worker/resourcemodifier"
2121
"github.com/cirruslabs/cirrus-cli/internal/worker/security"
22+
"github.com/cirruslabs/cirrus-cli/internal/worker/tuning"
2223
upstreampkg "github.com/cirruslabs/cirrus-cli/internal/worker/upstream"
2324
"github.com/cirruslabs/cirrus-cli/pkg/api"
2425
"github.com/cirruslabs/echelon"
@@ -44,6 +45,7 @@ type Worker struct {
4445

4546
security *security.Security
4647
resourceModifierManager *resourcemodifier.Manager
48+
tuning *tuning.Tuning
4749

4850
userSpecifiedLabels map[string]string
4951
userSpecifiedResources map[string]float64
@@ -257,7 +259,7 @@ func (worker *Worker) tryCreateStandby(ctx context.Context) error {
257259
worker.logger.Debugf("creating a new standby instance with isolation %s", worker.standbyParameters.Isolation)
258260

259261
standbyInstance, err := persistentworker.New(worker.standbyParameters.Isolation, worker.security,
260-
worker.resourceModifierManager.Acquire(worker.standbyParameters.Resources), worker.logger)
262+
worker.resourceModifierManager.Acquire(worker.standbyParameters.Resources), worker.tuning, worker.logger)
261263
if err != nil {
262264
worker.logger.Errorf("failed to create a standby instance: %v", err)
263265

0 commit comments

Comments
 (0)