@@ -263,7 +263,10 @@ func runTCPBandwidthTestHandler(test *ethrTest, conn net.Conn, wg *sync.WaitGrou
263263 for i := uint32 (0 ); i < size ; i ++ {
264264 buff [i ] = byte (i )
265265 }
266- start , waitTime , sendRate := beginThrottle ()
266+ bufferLen := len (buff )
267+ totalBytesToSend := test .clientParam .BwRate
268+ sentBytes := uint64 (0 )
269+ start , waitTime , bytesToSend := beginThrottle (totalBytesToSend , bufferLen )
267270ExitForLoop:
268271 for {
269272 select {
@@ -273,19 +276,19 @@ ExitForLoop:
273276 n := 0
274277 var err error = nil
275278 if test .clientParam .Reverse {
276- n , err = io . ReadFull ( conn , buff )
279+ n , err = conn . Read ( buff )
277280 } else {
278- n , err = conn .Write (buff )
281+ n , err = conn .Write (buff [: bytesToSend ] )
279282 }
280- if err != nil || n < int ( size ) {
283+ if err != nil {
281284 ui .printDbg ("Error sending/receiving data on a connection for bandwidth test: %v" , err )
282285 break ExitForLoop
283286 }
284- atomic .AddUint64 (& ec .bw , uint64 (size ))
285- atomic .AddUint64 (& test .testResult .bw , uint64 (size ))
286- sendRate += uint64 ( size )
287- if test . clientParam . BwRate > 0 && ! test . clientParam . Reverse && sendRate >= test . clientParam . BwRate {
288- start , waitTime , sendRate = enforceThrottle (start , waitTime )
287+ atomic .AddUint64 (& ec .bw , uint64 (n ))
288+ atomic .AddUint64 (& test .testResult .bw , uint64 (n ))
289+ if ! test . clientParam . Reverse {
290+ sentBytes += uint64 ( n )
291+ start , waitTime , sentBytes , bytesToSend = enforceThrottle (start , waitTime , totalBytesToSend , sentBytes , bufferLen )
289292 }
290293 }
291294 }
@@ -968,30 +971,32 @@ func runUDPBandwidthAndPpsTest(test *ethrTest) {
968971 lserver , lport , _ := net .SplitHostPort (conn .LocalAddr ().String ())
969972 ui .printMsg ("[%3d] local %s port %s connected to %s port %s" ,
970973 ec .fd , lserver , lport , rserver , rport )
971- blen := len (buff )
972- start , waitTime , sendRate := beginThrottle ()
974+ bufferLen := len (buff )
975+ totalBytesToSend := test .clientParam .BwRate
976+ sentBytes := uint64 (0 )
977+ start , waitTime , bytesToSend := beginThrottle (totalBytesToSend , bufferLen )
973978 ExitForLoop:
974979 for {
975980 select {
976981 case <- test .done :
977982 break ExitForLoop
978983 default :
979- n , err := conn .Write (buff )
984+ n , err := conn .Write (buff [: bytesToSend ] )
980985 if err != nil {
981986 ui .printDbg ("%v" , err )
982987 continue
983988 }
984- if n < blen {
989+ if n < bytesToSend {
985990 ui .printDbg ("Partial write: %d" , n )
986991 continue
987992 }
988993 atomic .AddUint64 (& ec .bw , uint64 (n ))
989994 atomic .AddUint64 (& ec .pps , 1 )
990995 atomic .AddUint64 (& test .testResult .bw , uint64 (n ))
991996 atomic .AddUint64 (& test .testResult .pps , 1 )
992- sendRate += uint64 ( size )
993- if test . clientParam . BwRate > 0 && ! test . clientParam . Reverse && sendRate >= test . clientParam . BwRate {
994- start , waitTime , sendRate = enforceThrottle (start , waitTime )
997+ if ! test . clientParam . Reverse {
998+ sentBytes += uint64 ( n )
999+ start , waitTime , sentBytes , bytesToSend = enforceThrottle (start , waitTime , totalBytesToSend , sentBytes , bufferLen )
9951000 }
9961001 }
9971002 }
0 commit comments