# TODO * Benchmarks * Run multiple threads to test performance when contested? * Iterate over whole returned buffer and run e.g. xor on it (.iter().fold()) * Generic bench function since current functions are almost identical * Show percentile stats for peers per torrent * Configuration, cli * Tests of aquatic * bittorrent_udp * quickcheck request byte conversion * other test cases * Check if announce response to bytes code changed caused slowdown * thiserror errors instead of InvalidRequest ## Not important * extract_response_peers * Cleaner code * Stack-allocated vector? * Benchmarks * num_rounds command line argument * Send in connect reponse ids to other functions as integration test * Save last results, check if difference is significant? * ProgressBar: `[{elapsed_precise}]` and eta_precise? * Test server over udp socket instead? * Performance * cpu-target=native good? * mialloc good? * Use less bytes from PeerId for hashing? Would need to implement "faulty" PartialEq too (on PeerMapKey, which would be OK) * bittorrent_udp * ParseError enum maybe, with `Option` * Avoid heap allocation in general if it can be avoided? * request from bytes for scrape: use arrayvec with some max size for torrents? With Vec, allocation takes quite a bit of CPU time * Optimize bytes to scrape request: Vec::with_capacity or other solution (SmallVec?) # Don't do ## aquatic * Other HashMap hashers (such as SeaHash): seemingly not worthwhile (might be with AVX though) * `sendmmsg`: can't send to multiple socket addresses, so doesn't help * Config behind Arc in state: it is likely better to be able to pass it around without state ## bittorrent_udp * Use `bytes` crate for bittorrent_udp: seems to worsen performance somewhat * Zerocopy (https://docs.rs/zerocopy/0.3.0/zerocopy/index.html) for requests and responses? Doesn't work on Vec etc * New array buffer each time in response_to_bytes: doesn't help performance