Skip to content

Commit

Permalink
Merge pull request containernetworking#169 from hustcat/bandwidth-bur…
Browse files Browse the repository at this point in the history
…st-fix

Fix tc-tbf burst value in bytes
  • Loading branch information
matthewdupre committed Jul 11, 2018
2 parents 696b1f9 + 7571169 commit 9201a5a
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 14 deletions.
22 changes: 11 additions & 11 deletions plugins/meta/bandwidth/bandwidth_linux_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ var _ = Describe("bandwidth test", func() {
"ingressRate": 8,
"ingressBurst": 8,
"egressRate": 16,
"egressBurst": 9,
"egressBurst": 8,
"prevResult": {
"interfaces": [
{
Expand Down Expand Up @@ -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())
Expand Down Expand Up @@ -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())

Expand All @@ -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": [
{
Expand Down Expand Up @@ -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": [
{
Expand Down Expand Up @@ -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())

Expand Down Expand Up @@ -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())
Expand Down Expand Up @@ -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())

Expand Down
7 changes: 4 additions & 3 deletions plugins/meta/bandwidth/ifb_creator.go
Original file line number Diff line number Diff line change
Expand Up @@ -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{
Expand Down Expand Up @@ -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 {
Expand Down

0 comments on commit 9201a5a

Please sign in to comment.