change preload

This commit is contained in:
YouROK
2020-12-18 10:31:09 +03:00
parent 06e8cf833d
commit 8e97922613
4 changed files with 28 additions and 18 deletions

View File

@@ -9,10 +9,8 @@ import (
type BTSets struct {
// Cache
CacheSize int64 // in byte, def 200 mb
PreloadBufferSize int64 // in byte, buffer for preload
// Reader
ReaderPreload int // in percent, 5%-100%, [...S__X__E...] [S-E] not clean
PreloadBuffer bool
ReaderReadAHead int // in percent, 5%-100%, [...S__X__E...] [S-E] not clean
// Storage
SaveOnDisk bool // save on disk?
@@ -52,11 +50,11 @@ func SetBTSets(sets *BTSets) {
return
}
if sets.ReaderPreload < 5 {
sets.ReaderPreload = 5
if sets.ReaderReadAHead < 5 {
sets.ReaderReadAHead = 5
}
if sets.ReaderPreload > 100 {
sets.ReaderPreload = 100
if sets.ReaderReadAHead > 100 {
sets.ReaderReadAHead = 100
}
BTsets = sets
buf, err := json.Marshal(BTsets)
@@ -72,8 +70,8 @@ func loadBTSets() {
if len(buf) > 0 {
err := json.Unmarshal(buf, &BTsets)
if err == nil {
if BTsets.ReaderPreload < 5 {
BTsets.ReaderPreload = 5
if BTsets.ReaderReadAHead < 5 {
BTsets.ReaderReadAHead = 5
}
return
}
@@ -84,11 +82,11 @@ func loadBTSets() {
sets.EnableDebug = false
sets.DisableUTP = true
sets.CacheSize = 200 * 1024 * 1024 // 200mb
sets.PreloadBufferSize = 20 * 1024 * 1024
sets.PreloadBuffer = true
sets.ConnectionsLimit = 20
sets.DhtConnectionLimit = 500
sets.RetrackersMode = 1
sets.TorrentDisconnectTimeout = 30
sets.ReaderPreload = 70 // 70% preload
sets.ReaderReadAHead = 70 // 70% preload
BTsets = sets
}

View File

@@ -6,11 +6,10 @@ import (
"sort"
"time"
"server/log"
sets "server/settings"
"github.com/anacrolix/torrent"
"github.com/anacrolix/torrent/metainfo"
"server/log"
sets "server/settings"
)
var (
@@ -128,3 +127,16 @@ func Shutdown() {
func WriteStatus(w io.Writer) {
bts.client.WriteStatus(w)
}
func Preload(torr *Torrent, index int) {
if !sets.BTsets.PreloadBuffer {
size := int64(20 * 1024 * 1024)
if size > sets.BTsets.CacheSize {
size = sets.BTsets.CacheSize
}
torr.Preload(index, size)
} else {
size := int64(float32(sets.BTsets.ReaderReadAHead) / 100.0 * float32(sets.BTsets.CacheSize))
torr.Preload(index, size)
}
}

View File

@@ -20,7 +20,7 @@ func (r *Reader) getPieceNum(offset int64) int {
}
func (r *Reader) getReaderRange() (int64, int64) {
prc := int64(settings.BTsets.ReaderPreload)
prc := int64(settings.BTsets.ReaderReadAHead)
beginOffset := r.offset - r.cache.capacity*(100-prc)/100
endOffset := r.offset + r.cache.capacity*prc/100

View File

@@ -92,7 +92,7 @@ func stream(c *gin.Context) {
}
// preload torrent
if preload {
tor.Preload(index, 0)
torr.Preload(tor, index)
}
// return stat if query
if stat {