1. 22 Jul, 2024 4 commits
  2. 21 Jul, 2024 9 commits
    • Nils Goroll's avatar
      fellow_cache: Rewrite body layout planning · 9ae6ed10
      Nils Goroll authored
      I believe the actual issue reported in #22 is that, with the old disk region
      allocation scheme, we could need one more disk segment list, such that
      FCO_REGIONS_RESERVE was too small.
      
      But pondering this issue, I went back to square one and re-thought the
      allocation plan. I now think that there were some fundamental flaws in the
      previous allocation code:
      
      - we did not plan for how many segment lists we would actually need
      - we would cram the segment allocation, which could lead to the number of
        segment lists growing
      - for growing allocations, we would switch from "assume we have enough regions"
        to "assume we have no regions at all any more" when FCO_REGIONS_RESERVE was
        reached.
      
      Hopefully, this new allocation plan code now takes a more sensible, holistic
      approach:
      
      Whenever we need more disk space (= another disk region), we calculate how many
      regions we are sensibly going to need in total. For no cram, this is just one,
      and for abs(cram) >=1 it is going to be the number of one-bits (popcount) of the
      size. Then we calculate the chunk size which we need to go to in order to fit
      all segments into segment lists. Based on this outcome, we calculate a maximum
      cam which we can allow for region allocations.
      
      This approach is fundamentally different to before in that we no longer cram
      segment sizes - which was wrong, because we do not have an infinite number of
      segment lists.
      
      Fixes #22 for real now, I hope
      9ae6ed10
    • Nils Goroll's avatar
      fellow_storage: in disk LRU, get the disk reserve upfront · 9208117e
      Nils Goroll authored
      an unintended side effect of the last rework was that the main LRU loop would
      only run once the disk buddy had waiting requests, such that the reserve would
      not be built up unless it was needed at least once. Which, to some extent,
      defeats the purpose for freshly loaded caches.
      9208117e
    • Nils Goroll's avatar
      df98c718
    • Nils Goroll's avatar
      a294a4da
    • Nils Goroll's avatar
      fellow_cache_test: wake up logwatcher when disk buddy is waiting · 8a6ab47f
      Nils Goroll authored
      because for fellow_cache_test there is no disk LRU, there is no instance to
      trigger a log flush besides the periodic wake up of the logwatcher thread.
      
      So when the disk buddy ran out of space, but the log buffer still had regions to
      free, those would only be freed after two seconds, drastically slowing down
      fellow_cache_test execution.
      
      To avoid special casing just for tests, we now run a thread to care about this
      issue specifically, to some extent emulating what otherwise the lru thread would
      do.
      8a6ab47f
    • Nils Goroll's avatar
      a07fbf19
    • Nils Goroll's avatar
      fellow_log: logwatcher flush is also needed when dsk needs to be freed · d0c6d754
      Nils Goroll authored
      the periodic flush via FLW_MAYFLUSH (which writes a new header) also needs to be
      active when there are disk blocks to be freed, otherwise we might deadlock.
      d0c6d754
    • Nils Goroll's avatar
      fellow_inject: only trace for DEBUG · c6016408
      Nils Goroll authored
      c6016408
    • Nils Goroll's avatar
      fellow_io_uring: make use of registered files dynamic · ca9fb3ed
      Nils Goroll authored
      It seems some OSes fail the call despite having it in the header file.
      
      Fixes #68
      ca9fb3ed
  3. 17 Jul, 2024 2 commits
  4. 12 Jul, 2024 1 commit
  5. 06 Jul, 2024 2 commits
  6. 05 Jul, 2024 9 commits
  7. 04 Jun, 2024 3 commits
  8. 02 Jun, 2024 3 commits
  9. 28 May, 2024 1 commit
  10. 27 May, 2024 3 commits
  11. 22 May, 2024 3 commits