update upload rate
This commit is contained in:
27
main.go
27
main.go
@@ -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()
|
m.clearTC()
|
||||||
args := []string{"qdisc", "add", "dev", conf.UploadInterface, "root", "cake", "bandwidth", fmt.Sprintf("%dMbit", upload)}
|
args := []string{"qdisc", "add", "dev", conf.UploadInterface, "root", "cake", "bandwidth", fmt.Sprintf("%dMbit", upload)}
|
||||||
args = append(args, strings.Split(conf.CakeOptions, " ")...)
|
args = append(args, strings.Split(conf.CakeOptions, " ")...)
|
||||||
@@ -70,9 +70,9 @@ func (m UploadManager) SetUpload(upload int) error {
|
|||||||
out, err := tcCmd.CombinedOutput()
|
out, err := tcCmd.CombinedOutput()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Debugf("[TC] executing %s failed with: %v (%s)", tcCmd.String(), err, out)
|
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() {
|
func (m UploadManager) clearTC() {
|
||||||
@@ -132,7 +132,7 @@ func (m UploadManager) pingWorker() error {
|
|||||||
|
|
||||||
if stats.AvgRtt.Milliseconds() >= conf.ThrottlePingThreshold {
|
if stats.AvgRtt.Milliseconds() >= conf.ThrottlePingThreshold {
|
||||||
log.Infof("extended ping %s, adjusting upload TC %d->%d", stats.AvgRtt, up, up-conf.Bandwidth.Step)
|
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 {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -147,11 +147,28 @@ func (m UploadManager) pingWorker() error {
|
|||||||
}
|
}
|
||||||
if m.isBWInRange(up + conf.Bandwidth.Step) {
|
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)
|
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 {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
m.LastOver = time.Now()
|
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)
|
time.Sleep(time.Duration(conf.Interval) * time.Minute)
|
||||||
|
Reference in New Issue
Block a user