diff --git a/services/qbittorrent.nix b/services/qbittorrent.nix index 4ea5c57..1064651 100644 --- a/services/qbittorrent.nix +++ b/services/qbittorrent.nix @@ -54,11 +54,11 @@ serverConfig.BitTorrent = { Session = { MaxConnectionsPerTorrent = 100; - MaxUploadsPerTorrent = 15; + MaxUploadsPerTorrent = 50; MaxConnections = -1; MaxUploads = -1; - MaxActiveCheckingTorrents = 2; # reduce disk pressure from concurrent hash checks + MaxActiveCheckingTorrents = 2; # queueing QueueingSystemEnabled = true; @@ -89,7 +89,7 @@ inherit (config.services.qbittorrent.serverConfig.Preferences.Downloads) TempPath; TempPathEnabled = true; - ConnectionSpeed = 100; + ConnectionSpeed = 200; # half-open connections/s; faster peer discovery SaveResumeDataInterval = 300; # save resume data every 5 min (default 60s) ResumeDataStorageType = "SQLite"; # SQLite is more efficient than legacy per-file .fastresume storage @@ -100,29 +100,20 @@ DisableAutoTMMTriggers.DefaultSavePathChanged = false; ChokingAlgorithm = "RateBased"; + SeedChokingAlgorithm = "FastestUpload"; # unchoke peers we upload to fastest PieceExtentAffinity = true; SuggestMode = true; - # max_queued_disk_bytes: the max bytes waiting in the disk I/O queue. - # When this limit is reached, peer connections stop reading from their - # sockets until the disk thread catches up -- causing the spike-then-zero - # pattern. Default is 1MB; high_performance_seed() uses 7MB. - # 64MB is above the preset but justified for slow raidz1 HDD random writes - # where ZFS txg commits cause periodic I/O stalls. - DiskQueueSize = 67108864; # 64MB - # POSIX-compliant disk I/O: uses pread/pwrite instead of mmap. # On ZFS, mmap forces data into BOTH ARC and Linux page cache (double-caching), # wasting RAM. pread/pwrite goes only through ARC, maximizing its effectiveness. - # Saved 26 gb of memory!! DiskIOType = "Posix"; - # === Network buffer tuning (from libtorrent high_performance_seed preset) === - # "always stuff at least 1 MiB down each peer pipe, to quickly ramp up send rates" - SendBufferLowWatermark = 1024; # 1MB (KiB) -- matches high_performance_seed - # "of 500 ms, and a send rate of 4 MB/s, the upper limit should be 2 MB" - SendBufferWatermark = 3072; # 3MB (KiB) -- matches high_performance_seed - # "put 1.5 seconds worth of data in the send buffer" + FilePoolSize = 500; # keep more files open to reduce open/close overhead + AioThreads = 24; # 6 cores * 4; better disk I/O parallelism + + SendBufferLowWatermark = 512; # 512 KiB -- trigger reads sooner to prevent upload stalls + SendBufferWatermark = 3072; # 3 MiB -- matches high_performance_seed SendBufferWatermarkFactor = 150; # percent -- matches high_performance_seed };