Merge pull request #169 from hustcat/bandwidth-burst-fix

Fix tc-tbf burst value in bytes
This commit is contained in:
Matt Dupre 2018-07-11 16:31:53 +01:00 committed by GitHub
commit 9201a5a433
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 15 additions and 14 deletions

View File

@ -80,7 +80,7 @@ var _ = Describe("bandwidth test", func() {
"ingressRate": 8, "ingressRate": 8,
"ingressBurst": 8, "ingressBurst": 8,
"egressRate": 16, "egressRate": 16,
"egressBurst": 9, "egressBurst": 8,
"prevResult": { "prevResult": {
"interfaces": [ "interfaces": [
{ {
@ -135,7 +135,7 @@ var _ = Describe("bandwidth test", func() {
Expect(qdiscs[0]).To(BeAssignableToTypeOf(&netlink.Tbf{})) Expect(qdiscs[0]).To(BeAssignableToTypeOf(&netlink.Tbf{}))
Expect(qdiscs[0].(*netlink.Tbf).Rate).To(Equal(uint64(2))) Expect(qdiscs[0].(*netlink.Tbf).Rate).To(Equal(uint64(2)))
Expect(qdiscs[0].(*netlink.Tbf).Limit).To(Equal(uint32(9))) Expect(qdiscs[0].(*netlink.Tbf).Limit).To(Equal(uint32(1)))
hostVethLink, err := netlink.LinkByName(hostIfname) hostVethLink, err := netlink.LinkByName(hostIfname)
Expect(err).NotTo(HaveOccurred()) Expect(err).NotTo(HaveOccurred())
@ -163,7 +163,7 @@ var _ = Describe("bandwidth test", func() {
Expect(qdiscs[0]).To(BeAssignableToTypeOf(&netlink.Tbf{})) Expect(qdiscs[0]).To(BeAssignableToTypeOf(&netlink.Tbf{}))
Expect(qdiscs[0].(*netlink.Tbf).Rate).To(Equal(uint64(1))) Expect(qdiscs[0].(*netlink.Tbf).Rate).To(Equal(uint64(1)))
Expect(qdiscs[0].(*netlink.Tbf).Limit).To(Equal(uint32(8))) Expect(qdiscs[0].(*netlink.Tbf).Limit).To(Equal(uint32(1)))
return nil return nil
})).To(Succeed()) })).To(Succeed())
@ -176,8 +176,8 @@ var _ = Describe("bandwidth test", func() {
"type": "bandwidth", "type": "bandwidth",
"ingressRate": 0, "ingressRate": 0,
"ingressBurst": 0, "ingressBurst": 0,
"egressRate": 8, "egressRate": 8000,
"egressBurst": 1, "egressBurst": 80,
"prevResult": { "prevResult": {
"interfaces": [ "interfaces": [
{ {
@ -245,8 +245,8 @@ var _ = Describe("bandwidth test", func() {
"type": "bandwidth", "type": "bandwidth",
"egressRate": 0, "egressRate": 0,
"egressBurst": 0, "egressBurst": 0,
"ingressRate": 8, "ingressRate": 8000,
"ingressBurst": 1, "ingressBurst": 80,
"prevResult": { "prevResult": {
"interfaces": [ "interfaces": [
{ {
@ -302,8 +302,8 @@ var _ = Describe("bandwidth test", func() {
Expect(qdiscs[0].Attrs().LinkIndex).To(Equal(containerIfLink.Attrs().Index)) Expect(qdiscs[0].Attrs().LinkIndex).To(Equal(containerIfLink.Attrs().Index))
Expect(qdiscs[0]).To(BeAssignableToTypeOf(&netlink.Tbf{})) Expect(qdiscs[0]).To(BeAssignableToTypeOf(&netlink.Tbf{}))
Expect(qdiscs[0].(*netlink.Tbf).Rate).To(Equal(uint64(1))) Expect(qdiscs[0].(*netlink.Tbf).Rate).To(Equal(uint64(1000)))
Expect(qdiscs[0].(*netlink.Tbf).Limit).To(Equal(uint32(1))) Expect(qdiscs[0].(*netlink.Tbf).Limit).To(Equal(uint32(35)))
return nil return nil
})).To(Succeed()) })).To(Succeed())
@ -426,7 +426,7 @@ var _ = Describe("bandwidth test", func() {
Expect(qdiscs[0]).To(BeAssignableToTypeOf(&netlink.Tbf{})) Expect(qdiscs[0]).To(BeAssignableToTypeOf(&netlink.Tbf{}))
Expect(qdiscs[0].(*netlink.Tbf).Rate).To(Equal(uint64(2))) Expect(qdiscs[0].(*netlink.Tbf).Rate).To(Equal(uint64(2)))
Expect(qdiscs[0].(*netlink.Tbf).Limit).To(Equal(uint32(9))) Expect(qdiscs[0].(*netlink.Tbf).Limit).To(Equal(uint32(1)))
hostVethLink, err := netlink.LinkByName(hostIfname) hostVethLink, err := netlink.LinkByName(hostIfname)
Expect(err).NotTo(HaveOccurred()) Expect(err).NotTo(HaveOccurred())
@ -454,7 +454,7 @@ var _ = Describe("bandwidth test", func() {
Expect(qdiscs[0]).To(BeAssignableToTypeOf(&netlink.Tbf{})) Expect(qdiscs[0]).To(BeAssignableToTypeOf(&netlink.Tbf{}))
Expect(qdiscs[0].(*netlink.Tbf).Rate).To(Equal(uint64(1))) Expect(qdiscs[0].(*netlink.Tbf).Rate).To(Equal(uint64(1)))
Expect(qdiscs[0].(*netlink.Tbf).Limit).To(Equal(uint32(8))) Expect(qdiscs[0].(*netlink.Tbf).Limit).To(Equal(uint32(1)))
return nil return nil
})).To(Succeed()) })).To(Succeed())

View File

@ -125,9 +125,10 @@ func createTBF(rateInBits, burstInBits, linkIndex int) error {
return fmt.Errorf("invalid burst: %d", burstInBits) return fmt.Errorf("invalid burst: %d", burstInBits)
} }
rateInBytes := rateInBits / 8 rateInBytes := rateInBits / 8
bufferInBytes := buffer(uint64(rateInBytes), uint32(burstInBits)) burstInBytes := burstInBits / 8
bufferInBytes := buffer(uint64(rateInBytes), uint32(burstInBytes))
latency := latencyInUsec(latencyInMillis) latency := latencyInUsec(latencyInMillis)
limitInBytes := limit(uint64(rateInBytes), latency, uint32(bufferInBytes)) limitInBytes := limit(uint64(rateInBytes), latency, uint32(burstInBytes))
qdisc := &netlink.Tbf{ qdisc := &netlink.Tbf{
QdiscAttrs: netlink.QdiscAttrs{ QdiscAttrs: netlink.QdiscAttrs{
@ -159,7 +160,7 @@ func buffer(rate uint64, burst uint32) uint32 {
} }
func limit(rate uint64, latency float64, buffer uint32) uint32 { func limit(rate uint64, latency float64, buffer uint32) uint32 {
return uint32(float64(rate) / float64(netlink.TIME_UNITS_PER_SEC) * (latency + float64(tick2Time(buffer)))) return uint32(float64(rate)*latency/float64(netlink.TIME_UNITS_PER_SEC)) + buffer
} }
func latencyInUsec(latencyInMillis float64) float64 { func latencyInUsec(latencyInMillis float64) float64 {