mirror of https://github.com/ehang-io/nps
				
				
				
			change some bandwidth calculation
							parent
							
								
									9bb8230fc1
								
							
						
					
					
						commit
						405f41f87f
					
				| 
						 | 
				
			
			@ -10,7 +10,7 @@ const PoolSizeSmall = 100
 | 
			
		|||
const PoolSizeUdp = 1472
 | 
			
		||||
const PoolSizeCopy = 32 << 10
 | 
			
		||||
const PoolSizeBuffer = 4096
 | 
			
		||||
const PoolSizeWindow = PoolSizeBuffer - 16 - 32 - 32 - 8
 | 
			
		||||
const PoolSizeWindow = PoolSizeBuffer - 2 - 4 - 4 - 1
 | 
			
		||||
 | 
			
		||||
var BufPool = sync.Pool{
 | 
			
		||||
	New: func() interface{} {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -190,7 +190,7 @@ func (Self *ReceiveWindow) New(mux *Mux) {
 | 
			
		|||
	// initial a window for receive
 | 
			
		||||
	Self.bufQueue.New()
 | 
			
		||||
	Self.element = common.ListElementPool.Get()
 | 
			
		||||
	Self.maxSize = 4096
 | 
			
		||||
	Self.maxSize = common.MAXIMUM_SEGMENT_SIZE
 | 
			
		||||
	Self.mux = mux
 | 
			
		||||
	Self.window.New()
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -209,21 +209,25 @@ func (Self *ReceiveWindow) calcSize() {
 | 
			
		|||
	// calculating maximum receive window size
 | 
			
		||||
	if Self.count == 0 {
 | 
			
		||||
		//logs.Warn("ping, bw", Self.mux.latency, Self.bw.Get())
 | 
			
		||||
		n := uint32(2 * math.Float64frombits(atomic.LoadUint64(&Self.mux.latency)) *
 | 
			
		||||
			Self.mux.bw.Get() / float64(Self.mux.connMap.Size()))
 | 
			
		||||
		if n < 8192 {
 | 
			
		||||
			n = 8192
 | 
			
		||||
		conns := Self.mux.connMap.Size()
 | 
			
		||||
		n := uint32(math.Float64frombits(atomic.LoadUint64(&Self.mux.latency)) *
 | 
			
		||||
			Self.mux.bw.Get() / float64(conns))
 | 
			
		||||
		if n < common.MAXIMUM_SEGMENT_SIZE*2 {
 | 
			
		||||
			n = common.MAXIMUM_SEGMENT_SIZE * 2
 | 
			
		||||
		}
 | 
			
		||||
		bufLen := Self.bufQueue.Len()
 | 
			
		||||
		if n < bufLen {
 | 
			
		||||
			n = bufLen
 | 
			
		||||
		}
 | 
			
		||||
		if n < Self.maxSize/2 {
 | 
			
		||||
			n = Self.maxSize / 2
 | 
			
		||||
		}
 | 
			
		||||
		// set the minimal size
 | 
			
		||||
		if n > 2*Self.maxSize {
 | 
			
		||||
			n = 2 * Self.maxSize
 | 
			
		||||
		}
 | 
			
		||||
		if n > common.MAXIMUM_WINDOW_SIZE {
 | 
			
		||||
			n = common.MAXIMUM_WINDOW_SIZE
 | 
			
		||||
		if n > (common.MAXIMUM_WINDOW_SIZE / uint32(conns)) {
 | 
			
		||||
			n = common.MAXIMUM_WINDOW_SIZE / uint32(conns)
 | 
			
		||||
		}
 | 
			
		||||
		// set the maximum size
 | 
			
		||||
		//logs.Warn("n", n)
 | 
			
		||||
| 
						 | 
				
			
			@ -377,8 +381,8 @@ type SendWindow struct {
 | 
			
		|||
 | 
			
		||||
func (Self *SendWindow) New(mux *Mux) {
 | 
			
		||||
	Self.setSizeCh = make(chan struct{})
 | 
			
		||||
	Self.maxSize = 4096
 | 
			
		||||
	atomic.AddUint64(&Self.remainingWait, uint64(4096)<<dequeueBits)
 | 
			
		||||
	Self.maxSize = common.MAXIMUM_SEGMENT_SIZE
 | 
			
		||||
	atomic.AddUint64(&Self.remainingWait, uint64(common.MAXIMUM_SEGMENT_SIZE)<<dequeueBits)
 | 
			
		||||
	Self.mux = mux
 | 
			
		||||
	Self.window.New()
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -115,34 +115,35 @@ func (s *Mux) writeSession() {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
func (s *Mux) packBuf() {
 | 
			
		||||
	buffer := common.BuffPool.Get()
 | 
			
		||||
	//buffer := common.BuffPool.Get()
 | 
			
		||||
	for {
 | 
			
		||||
		if s.IsClose {
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
		buffer.Reset()
 | 
			
		||||
		//buffer.Reset()
 | 
			
		||||
		pack := s.writeQueue.Pop()
 | 
			
		||||
		if s.IsClose {
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
		//buffer := common.BuffPool.Get()
 | 
			
		||||
		err := pack.Pack(buffer)
 | 
			
		||||
		err := pack.Pack(s.conn)
 | 
			
		||||
		common.MuxPack.Put(pack)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			logs.Error("mux: pack err", err)
 | 
			
		||||
			common.BuffPool.Put(buffer)
 | 
			
		||||
			//common.BuffPool.Put(buffer)
 | 
			
		||||
			s.Close()
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
		//logs.Warn(buffer.String())
 | 
			
		||||
		//s.bufQueue.Push(buffer)
 | 
			
		||||
		l := buffer.Len()
 | 
			
		||||
		n, err := buffer.WriteTo(s.conn)
 | 
			
		||||
		//l := buffer.Len()
 | 
			
		||||
		//n, err := buffer.WriteTo(s.conn)
 | 
			
		||||
		//common.BuffPool.Put(buffer)
 | 
			
		||||
		if err != nil || int(n) != l {
 | 
			
		||||
			logs.Error("mux: close from write session fail ", err, n, l)
 | 
			
		||||
			s.Close()
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
		//if err != nil || int(n) != l {
 | 
			
		||||
		//	logs.Error("mux: close from write session fail ", err, n, l)
 | 
			
		||||
		//	s.Close()
 | 
			
		||||
		//	break
 | 
			
		||||
		//}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -385,24 +386,24 @@ func (s *Mux) getId() (id int32) {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
type bandwidth struct {
 | 
			
		||||
	readBandwidth uint64 // store in bits, but it's float64
 | 
			
		||||
	readStart     time.Time
 | 
			
		||||
	lastReadStart time.Time
 | 
			
		||||
	bufLength     uint16
 | 
			
		||||
	readBandwidth uint64 // store in bits, but it's float64
 | 
			
		||||
	bufLength     uint32
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (Self *bandwidth) StartRead() {
 | 
			
		||||
	if Self.readStart.IsZero() {
 | 
			
		||||
		Self.readStart = time.Now()
 | 
			
		||||
	}
 | 
			
		||||
	if Self.bufLength >= 16384 {
 | 
			
		||||
	if Self.bufLength >= 3072000 {
 | 
			
		||||
		Self.lastReadStart, Self.readStart = Self.readStart, time.Now()
 | 
			
		||||
		Self.calcBandWidth()
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (Self *bandwidth) SetCopySize(n uint16) {
 | 
			
		||||
	Self.bufLength += n
 | 
			
		||||
	Self.bufLength += uint32(n)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (Self *bandwidth) calcBandWidth() {
 | 
			
		||||
| 
						 | 
				
			
			@ -417,6 +418,7 @@ func (Self *bandwidth) Get() (bw float64) {
 | 
			
		|||
	if bw <= 0 {
 | 
			
		||||
		bw = 100
 | 
			
		||||
	}
 | 
			
		||||
	//logs.Warn(bw)
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue