summaryrefslogtreecommitdiff
path: root/DESIGN
diff options
context:
space:
mode:
Diffstat (limited to 'DESIGN')
-rw-r--r--DESIGN19
1 files changed, 19 insertions, 0 deletions
diff --git a/DESIGN b/DESIGN
index 39d0107..a32eeb8 100644
--- a/DESIGN
+++ b/DESIGN
@@ -84,6 +84,25 @@ finish a sweep in OT_CLEAN_INTERVAL_MINUTES. At the default bucket count that
84is one bucket every 117 ms. 84is one bucket every 117 ms.
85 85
86 86
87A torrent carries its hash, two peer-list pointers, a base and a down count,
8848 bytes on a 64-bit host, and the down count sits in what would otherwise be
89alignment padding. Each family's peer list, 32 bytes plus its peer vector, is
90allocated on that family's first peer and freed when its last peer goes. The
91base and the down count live on the torrent rather than on a list, which is
92what lets a list come and go: a torrent kept only for its download count holds
93no list at all, and a single-family torrent holds one rather than two.
94
95This is paid for in the common shape of a large table. A tracker carrying
96millions of torrents averages close to two peers each, a few crowded swarms
97over a long tail of near-empty ones, so fixed per-torrent cost, not peer
98payload, is most of resident memory. Allocating both lists for every torrent
99and keeping an idle torrent alive for a day to preserve one counter cost, on
100glibc, 168 bytes per torrent before a peer; the layout above costs 48 for an
101empty torrent and 96 for a single-family one. The per-torrent counts are
102uint32: no single torrent holds 2^32 peers, and the four bytes saved against a
103size_t are multiplied by the torrent count. Global totals stay 64-bit.
104
105
87A refused announce is answered over UDP with a well formed announce for an 106A refused announce is answered over UDP with a well formed announce for an
88empty swarm rather than with the error action. BEP 15 binds a client to the 107empty swarm rather than with the error action. BEP 15 binds a client to the
89interval it is handed and says nothing about what a client should do with an 108interval it is handed and says nothing about what a client should do with an