From 6cdd121d65c51c688cb6fc70bc883752f031b907 Mon Sep 17 00:00:00 2001 From: nikk gitanes Date: Tue, 31 Oct 2023 08:15:47 +0300 Subject: [PATCH] use fixed RA and change load limit according to connections MatriX.127 --- server/torr/storage/torrstor/cache.go | 29 +++++++++++++++++---------- server/torr/torrent.go | 24 ++++++++++++++-------- 2 files changed, 34 insertions(+), 19 deletions(-) diff --git a/server/torr/storage/torrstor/cache.go b/server/torr/storage/torrstor/cache.go index efe861d..e128ef2 100644 --- a/server/torr/storage/torrstor/cache.go +++ b/server/torr/storage/torrstor/cache.go @@ -241,7 +241,17 @@ func (c *Cache) getRemPieces() []*Piece { } c.clearPriority() + c.setLoadPriority(ranges) + sort.Slice(piecesRemove, func(i, j int) bool { + return piecesRemove[i].Accessed < piecesRemove[j].Accessed + }) + + c.filled = fill + return piecesRemove +} + +func (c *Cache) setLoadPriority(ranges []Range) { c.muReaders.Lock() for r := range c.readers { if !r.isUse { @@ -253,10 +263,7 @@ func (c *Cache) getRemPieces() []*Piece { readerPos := r.getReaderPiece() readerRAHPos := r.getReaderRAHPiece() end := r.getPiecesRange().End - count := int(64 << 20 / c.pieceLength) // 64 MB window - if count > 64 { - count = 64 - } + count := settings.BTsets.ConnectionsLimit / c.Readers() // max concurrent loading blocks limit := 0 for i := readerPos; i < end && limit < count; i++ { if !c.pieces[i].Complete { @@ -276,13 +283,6 @@ func (c *Cache) getRemPieces() []*Piece { } } c.muReaders.Unlock() - - sort.Slice(piecesRemove, func(i, j int) bool { - return piecesRemove[i].Accessed < piecesRemove[j].Accessed - }) - - c.filled = fill - return piecesRemove } func (c *Cache) isIdInFileBE(ranges []Range, id int) bool { @@ -361,3 +361,10 @@ func (c *Cache) clearPriority() { } } } + +func (c *Cache) GetCapacity() int64 { + if c == nil { + return 0 + } + return c.capacity +} diff --git a/server/torr/torrent.go b/server/torr/torrent.go index 548b16d..2f5ea04 100644 --- a/server/torr/torrent.go +++ b/server/torr/torrent.go @@ -195,15 +195,23 @@ func (t *Torrent) progressEvent() { func (t *Torrent) updateRA() { t.muTorrent.Lock() defer t.muTorrent.Unlock() - if t.Torrent != nil && t.Torrent.Info() != nil { - pieceLen := t.Torrent.Info().PieceLength - adj := pieceLen * int64(t.Torrent.Stats().ActivePeers) / int64(1+t.cache.Readers()) - if adj < pieceLen { - adj = pieceLen - //} else if adj > pieceLen*4 { - // adj = pieceLen * 4 + // if t.Torrent != nil && t.Torrent.Info() != nil { + // pieceLen := t.Torrent.Info().PieceLength + // adj := pieceLen * int64(t.Torrent.Stats().ActivePeers) / int64(1+t.cache.Readers()) + // switch { + // case adj < pieceLen: + // adj = pieceLen + // case adj > pieceLen*4: + // adj = pieceLen * 4 + // } + // go t.cache.AdjustRA(adj) + // } + if t.cache != nil { + readers := t.cache.Readers() + if readers > 0 { // actually it's 0 in preload + adj := int64(16 << 20) // 16 MB fixed RA + go t.cache.AdjustRA(adj) } - go t.cache.AdjustRA(adj) } }