wip: migrate to mono-repo. SPN has already been moved to spn/
This commit is contained in:
80
spn/terminal/module.go
Normal file
80
spn/terminal/module.go
Normal file
@@ -0,0 +1,80 @@
|
||||
package terminal
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"time"
|
||||
|
||||
"github.com/safing/portbase/modules"
|
||||
"github.com/safing/portbase/rng"
|
||||
"github.com/safing/portmaster/spn/conf"
|
||||
"github.com/safing/portmaster/spn/unit"
|
||||
)
|
||||
|
||||
var (
|
||||
module *modules.Module
|
||||
rngFeeder *rng.Feeder = rng.NewFeeder()
|
||||
|
||||
scheduler *unit.Scheduler
|
||||
|
||||
debugUnitScheduling bool
|
||||
)
|
||||
|
||||
func init() {
|
||||
flag.BoolVar(&debugUnitScheduling, "debug-unit-scheduling", false, "enable debug logs of the SPN unit scheduler")
|
||||
|
||||
module = modules.Register("terminal", nil, start, nil, "base")
|
||||
}
|
||||
|
||||
func start() error {
|
||||
rngFeeder = rng.NewFeeder()
|
||||
|
||||
scheduler = unit.NewScheduler(getSchedulerConfig())
|
||||
if debugUnitScheduling {
|
||||
// Debug unit leaks.
|
||||
scheduler.StartDebugLog()
|
||||
}
|
||||
module.StartServiceWorker("msg unit scheduler", 0, scheduler.SlotScheduler)
|
||||
|
||||
lockOpRegistry()
|
||||
|
||||
return registerMetrics()
|
||||
}
|
||||
|
||||
var waitForever chan time.Time
|
||||
|
||||
// TimedOut returns a channel that triggers when the timeout is reached.
|
||||
func TimedOut(timeout time.Duration) <-chan time.Time {
|
||||
if timeout == 0 {
|
||||
return waitForever
|
||||
}
|
||||
return time.After(timeout)
|
||||
}
|
||||
|
||||
// StopScheduler stops the unit scheduler.
|
||||
func StopScheduler() {
|
||||
if scheduler != nil {
|
||||
scheduler.Stop()
|
||||
}
|
||||
}
|
||||
|
||||
func getSchedulerConfig() *unit.SchedulerConfig {
|
||||
// Client Scheduler Config.
|
||||
if conf.Client() {
|
||||
return &unit.SchedulerConfig{
|
||||
SlotDuration: 10 * time.Millisecond, // 100 slots per second
|
||||
MinSlotPace: 10, // 1000pps - Small starting pace for low end devices.
|
||||
WorkSlotPercentage: 0.9, // 90%
|
||||
SlotChangeRatePerStreak: 0.1, // 10% - Increase/Decrease quickly.
|
||||
StatCycleDuration: 1 * time.Minute, // Match metrics report cycle.
|
||||
}
|
||||
}
|
||||
|
||||
// Server Scheduler Config.
|
||||
return &unit.SchedulerConfig{
|
||||
SlotDuration: 10 * time.Millisecond, // 100 slots per second
|
||||
MinSlotPace: 100, // 10000pps - Every server should be able to handle this.
|
||||
WorkSlotPercentage: 0.7, // 70%
|
||||
SlotChangeRatePerStreak: 0.05, // 5%
|
||||
StatCycleDuration: 1 * time.Minute, // Match metrics report cycle.
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user