summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
23 hoursGeneralize the worker setup/runloop/teardown logic by adding a smol ot_worker helperDirk Engling
28 hoursMake the dynamic accesslist readers release their line buffer and properly exitDirk Engling
29 hoursRefactor ot_workqueue out of ot_mutex, no behaviour changeDirk Engling
31 hoursMake the mainloop behave like every worker by claiming and releasing a socket being worked onDirk Engling
32 hoursMake tcp worker multithreaded, tooDirk Engling
This shamelessly steals the model established in the UDP workers, i.e. if the kernel is able to bind multiple listening sockets to the same endpoint, we will share them across threads. If it can't, all threads will accept on the same socket. The fast path handles most of the connections, only the rare case of no data yet on the socket is offloaded to the slow path (which used to be the mainloop) for completion. This scales nicely, as the higher the load is, the higher chances are that an accept happens only after the network roundtrip to the peer completes, leading to more connections that already have data waiting for us. We also consolidate the workstruct init and deinit code, preparation for later unifying all thread state structs for all protocols (mca, udc and tcp). The config file gains a per tcp connection worker count and some docs explaining what this knob buys and costs, nudging the user to either keep it 0 or dial it up to at least 2.
47 hoursRefactor all tcp specific code into the ot_tcp module to prepare for multiple concurrent workersDirk Engling
47 hoursAdd test for new config paramsDirk Engling
47 hoursAdd config parsers for multiple tcp socket readers and a helper to see if we can offer it on the platformDirk Engling
2 daysIntroduce a fast path assuming that a tcp connection's payload already has arrived at accept timeDirk Engling
2 daysStart documenting design decisions and measurmentsDirk Engling
2 daysRemove references that you need libowfat to build opentrackerDirk Engling
2 daysgit ignore the poll flavor of the runner, tooDirk Engling
2 daysFix idle tests in presence of an accept filterDirk Engling
2 daysRemove stale xcode build fileDirk Engling
2 daysFix expiry tests under the new accept filtersDirk Engling
2 daysUse accept filter dataready instead of httpready on FreeBSDDirk Engling
2 daysDefer accepts until some data actually is thereDirk Engling
2 daysEnforce the invariant that each socket is only ever expected to be read from or written to, never bothDirk Engling
2 daysDon't treat a full send buffer as an error when sending http. Retry laterDirk Engling
3 daysReduce syscalls and add helper to count themDirk Engling
3 daysAdd an http load generatorDirk Engling
3 daysReduce number of per connection sys callsDirk Engling
3 daysCheck for free port in the udp integration test, also speed it up by a bitDirk Engling
3 daysConsolidate all tcp/http tear down into a single http_close function to prevent a rare UAF for expiring connectionsDirk Engling
4 daysBuild everything in one sweep, without intermediate object filesDirk Engling
4 daysadd wake-up tester that helped figuring out how to tickle hanging udp readersDirk Engling
4 daysRevert last wake-up experiment. Having each udp worker wake up once a second to check if the tracker stops is wastefulDirk Engling
4 daysFix a test that would over-report success rate when losing the race for cycles to the test targetDirk Engling
4 daysLivesync now also gets proper deinit codeDirk Engling
4 daysWith more workers blockingly waiting on udp sockets, we need to keep track of all sockets to shut them down on exitDirk Engling
4 daysDefault udp workers to 1, as it is the most sane choice everywhere, also reflect the new udp parallelism in the man pagesDirk Engling
4 daysLet the load tester log losses to better gauge performanceDirk Engling
4 daysAdd load tests to sanitize check the trackerlogic, based on udp requestsDirk Engling
4 daysPerformance improvement, where it works: Let different udp worker threads have their own socketDirk Engling
5 daysThe main event loop(s) now also catch an EINTR and return instead of blockingDirk Engling
5 daysAdd concurrency testDirk Engling
5 daysMake global torrent counter atomic and fix the setter and getterDirk Engling
5 daysPlug in the new per-thread stats counter, also make sure that the ot_clean sleep does not stall tracker exitDirk Engling
5 daysSecond half of moving the stat enum defines to trackerlogicDirk Engling
5 daysPrepare having each thread keep their own stats to avoid data racesDirk Engling
5 daysTurn malloc+memset into callocDirk Engling
5 daysSome more g_now_seconds occurrencesDirk Engling
5 daysForgot some g_now_seconds occurencesDirk Engling
5 daysAll OSes now do have a cheap monotonic clock, so no caching thread is needed. Also add some relative time helpersDirk Engling
5 daysWhile we're at it with the dynamic analyzers, add a tsanDirk Engling
6 daysAdd test for the revived keep aliveDirk Engling
6 daysFix some tests to match retired stats modes and wrong config file orderingDirk Engling
6 daysAdd test for the correct order of partial scrapesDirk Engling
6 daysAdd test for the error packet when a hash is blacklisted (the part I forgot in last commit)Dirk Engling
6 daysAdd test for the error packet when a hash is blacklistedDirk Engling