general-tasks.md
Note: Some of these items may be out of date.
What needs to be done is to transform the &mut StreamingPeekableIter into a child future, and when exhausted, it must be transformed back into the &mut _ that created it. That way, only a single mutable reference to said Iter is present at any time. Unfortunately the generated futures (using async) don't support that as we would have to keep both the future and the parent that created it inside of our own struct. Instead of hiding this using pointers, one could implement the magical part by hand, a custom future, which happily dissolves into its mutable parent iter ref. That would be quite some work though.
locate(…) code in (compound|linked)::Db() respectively.
Currently these first have to obtain an index, and when found, access the data to avoid having the borrowchecker fail to understand our buffer
usage within a loop correctly. Performance itself it probably not reasonably affected.sha-1 crate is capped at about 550MB/s, half the speed of what I saw on Intel and about 50% slower than what's implemented in libcorecrypto.dylib. Get that fast and the decoding stage will be able
to beat git on fewer cores. See this comment for more. Right now we only do when scaling beyond what git can do due to lock contention.
asm feature can be enabled in the sha-1 crate, which currently fails but is tracked in this issue.
pack::cache::lru::Memory all copy input data in individual allocations. Could a pre-allocated arena or slab be faster?less-memory algorithm of pack-verify to increase cache hit rate at the cost of memory.
Note that depending on this setting, it might not be needed anymore to iterated over sorted offsets, freeing 150MB of memory in the process
that could be used for the improved cache. With the current cache and no sorted offsets, the time nearly triples.pack-verify and pack-index-from-data to allow tuning sizes for large amounts of cores
lookup pack traversal by using partial DAGs build with help of the index