From 75711691604db2f6642476868dae074cf52cc2d5 Mon Sep 17 00:00:00 2001 From: Ye Yin Date: Tue, 3 Jul 2018 18:36:49 +0800 Subject: [PATCH] Fix tc-tbf burst value in bytes. --- .../meta/bandwidth/bandwidth_linux_test.go | 22 +++++++++---------- plugins/meta/bandwidth/ifb_creator.go | 7 +++--- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/plugins/meta/bandwidth/bandwidth_linux_test.go b/plugins/meta/bandwidth/bandwidth_linux_test.go index 2af10d29..d877b740 100644 --- a/plugins/meta/bandwidth/bandwidth_linux_test.go +++ b/plugins/meta/bandwidth/bandwidth_linux_test.go @@ -80,7 +80,7 @@ var _ = Describe("bandwidth test", func() { "ingressRate": 8, "ingressBurst": 8, "egressRate": 16, - "egressBurst": 9, + "egressBurst": 8, "prevResult": { "interfaces": [ { @@ -135,7 +135,7 @@ var _ = Describe("bandwidth test", func() { Expect(qdiscs[0]).To(BeAssignableToTypeOf(&netlink.Tbf{})) 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) Expect(err).NotTo(HaveOccurred()) @@ -163,7 +163,7 @@ var _ = Describe("bandwidth test", func() { Expect(qdiscs[0]).To(BeAssignableToTypeOf(&netlink.Tbf{})) 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 })).To(Succeed()) @@ -176,8 +176,8 @@ var _ = Describe("bandwidth test", func() { "type": "bandwidth", "ingressRate": 0, "ingressBurst": 0, - "egressRate": 8, - "egressBurst": 1, + "egressRate": 8000, + "egressBurst": 80, "prevResult": { "interfaces": [ { @@ -245,8 +245,8 @@ var _ = Describe("bandwidth test", func() { "type": "bandwidth", "egressRate": 0, "egressBurst": 0, - "ingressRate": 8, - "ingressBurst": 1, + "ingressRate": 8000, + "ingressBurst": 80, "prevResult": { "interfaces": [ { @@ -302,8 +302,8 @@ var _ = Describe("bandwidth test", func() { Expect(qdiscs[0].Attrs().LinkIndex).To(Equal(containerIfLink.Attrs().Index)) Expect(qdiscs[0]).To(BeAssignableToTypeOf(&netlink.Tbf{})) - Expect(qdiscs[0].(*netlink.Tbf).Rate).To(Equal(uint64(1))) - Expect(qdiscs[0].(*netlink.Tbf).Limit).To(Equal(uint32(1))) + Expect(qdiscs[0].(*netlink.Tbf).Rate).To(Equal(uint64(1000))) + Expect(qdiscs[0].(*netlink.Tbf).Limit).To(Equal(uint32(35))) return nil })).To(Succeed()) @@ -426,7 +426,7 @@ var _ = Describe("bandwidth test", func() { Expect(qdiscs[0]).To(BeAssignableToTypeOf(&netlink.Tbf{})) 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) Expect(err).NotTo(HaveOccurred()) @@ -454,7 +454,7 @@ var _ = Describe("bandwidth test", func() { Expect(qdiscs[0]).To(BeAssignableToTypeOf(&netlink.Tbf{})) 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 })).To(Succeed()) diff --git a/plugins/meta/bandwidth/ifb_creator.go b/plugins/meta/bandwidth/ifb_creator.go index a7032c0e..c7f90cd0 100644 --- a/plugins/meta/bandwidth/ifb_creator.go +++ b/plugins/meta/bandwidth/ifb_creator.go @@ -125,9 +125,10 @@ func createTBF(rateInBits, burstInBits, linkIndex int) error { return fmt.Errorf("invalid burst: %d", burstInBits) } rateInBytes := rateInBits / 8 - bufferInBytes := buffer(uint64(rateInBytes), uint32(burstInBits)) + burstInBytes := burstInBits / 8 + bufferInBytes := buffer(uint64(rateInBytes), uint32(burstInBytes)) latency := latencyInUsec(latencyInMillis) - limitInBytes := limit(uint64(rateInBytes), latency, uint32(bufferInBytes)) + limitInBytes := limit(uint64(rateInBytes), latency, uint32(burstInBytes)) qdisc := &netlink.Tbf{ QdiscAttrs: netlink.QdiscAttrs{ @@ -159,7 +160,7 @@ func buffer(rate uint64, burst 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 {