mirror of
https://github.com/versity/scoutfs.git
synced 2026-01-08 21:03:12 +00:00
auke/alloc_swapping
We increase the reserve from 2x to 3x the minimum number of blocks needed for our reserve, and change the algorithm that determines when to swap them. The old algorithm swaps them if _avail is just larger than _freed. While the simplest algorithm, it suffers from the problem that in practice, when we hit ENOSPC conditions, it will almost always swap on every iteration when we hit our low water mark. In our testing, we regularly see failures because what is effectively happening is that we starve both allocators by slowly draining them block by block, trying to do work. The work of course requires us to drain more blocks to commit changes. This cycle doesn't end until both allocators are almost completely drained and not enough blocks remain to do any real work anymore. The new algorithm will not swap allocators unless _freed is 50% larger than _avail. The outcome is that, during meta space pressure, we're allowing _avail to slowly drain down to the same levels as before, effectively. However, we then swap to _freed which is now 1.5x larger. This results in us being able to do a whole chunk of work without needing to swap. While draining _avail for longer, we allow work to commit and recycle blocks back into _freed muich more effectively. Signed-off-by: Auke Kok <auke.kok@versity.com>
Introduction
scoutfs is a clustered in-kernel Linux filesystem designed to support large archival systems. It features additional interfaces and metadata so that archive agents can perform their maintenance workflows without walking all the files in the namespace. Its cluster support lets deployments add nodes to satisfy archival tier bandwidth targets.
The design goal is to reach file populations in the trillions, with the archival bandwidth to match, while remaining operational and responsive.
Highlights of the design and implementation include:
- Fully consistent POSIX semantics between nodes
- Atomic transactions to maintain consistent persistent structures
- Integrated archival metadata replaces syncing to external databases
- Dynamic seperation of resources lets nodes write in parallel
- 64bit throughout; no limits on file or directory sizes or counts
- Open GPLv2 implementation
Community Mailing List
Please join us on the open scoutfs-devel@scoutfs.org mailing list hosted on Google Groups
Description
Languages
C
87.1%
Shell
9.2%
Roff
2.5%
TeX
0.9%
Makefile
0.3%