update upload rate

This commit is contained in:
2022-07-05 00:54:34 +02:00
parent eee1141dd3
commit e77e8a3966

27
main.go
View File

@@ -61,7 +61,7 @@ func (m UploadManager) Upload() (int, error) {
}
}
func (m UploadManager) SetUpload(upload int) error {
func (m UploadManager) SetUpload(upload int) (int, error) {
m.clearTC()
args := []string{"qdisc", "add", "dev", conf.UploadInterface, "root", "cake", "bandwidth", fmt.Sprintf("%dMbit", upload)}
args = append(args, strings.Split(conf.CakeOptions, " ")...)
@@ -70,9 +70,9 @@ func (m UploadManager) SetUpload(upload int) error {
out, err := tcCmd.CombinedOutput()
if err != nil {
log.Debugf("[TC] executing %s failed with: %v (%s)", tcCmd.String(), err, out)
return err
return 0, err
}
return nil
return upload, nil
}
func (m UploadManager) clearTC() {
@@ -132,7 +132,7 @@ func (m UploadManager) pingWorker() error {
if stats.AvgRtt.Milliseconds() >= conf.ThrottlePingThreshold {
log.Infof("extended ping %s, adjusting upload TC %d->%d", stats.AvgRtt, up, up-conf.Bandwidth.Step)
err = m.SetUpload(up - conf.Bandwidth.Step)
up, err = m.SetUpload(up - conf.Bandwidth.Step)
if err != nil {
return err
}
@@ -147,11 +147,28 @@ func (m UploadManager) pingWorker() error {
}
if m.isBWInRange(up + conf.Bandwidth.Step) {
log.Infof("Short ping %s, trying to increase upload TC %d->%d", stats.AvgRtt, up, up+conf.Bandwidth.Step)
err = m.SetUpload(up + conf.Bandwidth.Step)
up, err = m.SetUpload(up + conf.Bandwidth.Step)
if err != nil {
return err
}
m.LastOver = time.Now()
stats, err = doPing(conf.Host, conf.ConformationPPP, time.Second)
if err != nil {
log.Warningf("ping to %s failed: %v", conf.Host, err)
time.Sleep(time.Duration(conf.Interval) * time.Minute)
continue
}
if stats.AvgRtt.Milliseconds() >= conf.ThrottlePingThreshold {
log.Infof("increase failed with %s ping, reverting to %d", stats.AvgRtt, up-conf.Bandwidth.Step)
_, err = m.SetUpload(up - conf.Bandwidth.Step)
if err != nil {
return err
}
} else {
log.Infof("Extended ping %s seems stable", stats.AvgRtt)
}
}
}
time.Sleep(time.Duration(conf.Interval) * time.Minute)