1. 28 Nov, 2023 7 commits
  2. 26 Nov, 2023 7 commits
  3. 13 Nov, 2023 15 commits
  4. 12 Nov, 2023 2 commits
  5. 10 Nov, 2023 9 commits
    • Nils Goroll's avatar
      Rework the disk LRU · 268e51e9
      Nils Goroll authored
      It was too complicated and limited by waiting for flushes to finish.
      
      Now that we can issue multiple flushes, we can simplify it
      substantially.
      
      As a result from intermediate efforts, there is now also a facility to
      base nuking on the amount of data currently in the process of freeing.
      Leaving it in #ifdef'ed out in case we'll need it again.
      268e51e9
    • Nils Goroll's avatar
      Store new active block offsets to be updated at just the right time · 9e7fc536
      Nils Goroll authored
      with more than once flush finish, writing a header from an
      old flush could race the logbuffer_ref() from a more recent one,
      leading to an inconsistent log where a logblock with next_off == 0
      became reachable.
      9e7fc536
    • Nils Goroll's avatar
      Rework logbuffer flushing · e23a2bc2
      Nils Goroll authored
      To avoid having to wait for a previous flush to finish (in most cases),
      we now allocate the flush finish state dynamically (and asynchronously).
      
      For ordinary flushes, we can now start the next flush while a previous
      one is still in flight, ordering the flush finish in a list to preserve
      log consistency.
      e23a2bc2
    • Nils Goroll's avatar
      Async allocation for logbuffer flush finish · 3f795484
      Nils Goroll authored
      3f795484
    • Nils Goroll's avatar
      logwatcher: Use cond_signal instead of cond_broadcast on watcher_cond · 32ad79de
      Nils Goroll authored
      as there is only one thread waiting
      32ad79de
    • Nils Goroll's avatar
      logwatcher: gc superfluous broadcasts on watcher_cond · c9c26b50
      Nils Goroll authored
      the logwatcher has now been, for a long time, the only thread
      waiting on it
      c9c26b50
    • Nils Goroll's avatar
      New flush policy from getblks · c665c0a9
      Nils Goroll authored
      c665c0a9
    • Nils Goroll's avatar
      Finish logbuffer mem request when relocating · 2fdef88f
      Nils Goroll authored
      buddy_reqs are not relocatable, so we need to finish them when
      moving logbuffers.
      2fdef88f
    • Nils Goroll's avatar
      Regionlist overhaul: Allocate regionlists asynchronously · 39c2568e
      Nils Goroll authored
      regionlists are updated during DLE submit under the logmtx. Thus, we
      should avoid synchronous memory allocations.
      
      We change the strategy as follows:
      
      * Memory for the top regionlist (which has one regl embedded) _is_
        allocated synchronously, but with maximum cram to reduce latencies
        at the expense of memory efficiency.
      
        The case where the allocation does block will not hit us for the
        most critical path in fellow_log_dle_submit(), because we
        pre-allocate there outside the logmtx.
      
      * When we create the top regionlist, we make two asynchronous memory
        allocation requests for our hard-coded size (16KB for prod), one
        crammed and one not. The crammed request is made such that we get
        _any_ memory rather than waiting.
      
      * When we need to extend the regionlist, we should already have an
        allocation available (if not, we need to wait, bad luck). The next
        allocation available is either [1] (uncrammed) left over after the
        previous extension, or [0], which is potentially crammed. If it is
        and we have an uncrammed [1], then we use that and return the
        crammed allocation. If there are no allocations left, we issue the
        next asynchronous request.
      39c2568e