When stuck in eviction, re-check if a thread should be in "busy" mode.  Be consistent about the eviction target: when on an API boundary, wait until there is 5% cache available.
Tweak eviction: wait longer if not busy, but not for a specific cache target: some threads may get stuck doing eviction while other threads keep reading pages.  Also spin a few times before waiting on a condition variable: the latter is slow.
Back out the change to spin in eviction before waiting: it doesn't seem to help in automated tests.
Graph average, minimum and maximum latencies.
Switch to storing op counts as uint32_t, save 4B per bucket.