microsoft/FASTER · error · FasterException
Memory size ( ) must be configured to be either 1 (i.e., 0…
Error message
Memory size ({LogTotalSizeBytes}) must be configured to be either 1 (i.e., 0 bits) or at least page size ({PageSize}) What it means
The in-memory portion of the hybrid log (LogTotalSizeBytes = 1 << MemorySizeBits) must be either exactly 1 (MemorySizeBits = 0, meaning an unbounded/disk-only log) or at least one page size. Any other value below PageSize cannot hold even one page buffer, so the allocator rejects it. This guards against misconfigured memory limits.
Solutions
- Increase LogSettings.MemorySizeBits so it is >= LogSettings.PageSizeBits.
- Set MemorySizeBits = 0 if you want an unbounded log backed entirely by the log device (use Epically-sized setups / on-disk only).
- Reduce PageSizeBits first, then choose MemorySizeBits >= PageSizeBits.
Example fix
// before
var settings = new LogSettings {
LogDevice = Devices.CreateLogDevice("./faster.log"),
PageSizeBits = 24, // 16MB pages
MemorySizeBits = 20 // 1MB - below one page
};
// after
var settings = new LogSettings {
LogDevice = Devices.CreateLogDevice("./faster.log"),
PageSizeBits = 24,
MemorySizeBits = 24 // at least one page (or 0 for unbounded)
}; Defensive patterns
Strategy: validation
Validate before calling
if (settings.MemorySizeBits != 0 && (1L << settings.MemorySizeBits) < (1L << settings.PageSizeBits))
throw new ArgumentException("MemorySizeBits must be 0 or >= PageSizeBits"); Type guard
bool MemorySizeValid(LogSettings s) => s.MemorySizeBits == 0 || (1L << s.MemorySizeBits) >= (1L << s.PageSizeBits);
Try / catch
try { var fht = new FasterKV<K, V>(size, settings); }
catch (FasterException ex) when (ex.Message.Contains("Memory size")) { /* raise MemorySizeBits or set to 0 */ } Prevention
- Set MemorySizeBits >= PageSizeBits, or 0 for unbounded/disk-only logs.
- Account for container memory limits when sizing the in-memory log.
- Validate PageSizeBits <= MemorySizeBits in your settings builder.
When it happens
Trigger: Setting LogSettings.MemorySizeBits to a small non-zero value such that 1 << MemorySizeBits < 1 << PageSizeBits, e.g. MemorySizeBits=20 with PageSizeBits=25.
Common situations: Trying to minimize memory footprint on small devices; container/CI environments with limited RAM where users shrink MemorySizeBits below the page size.
Understand the failure class
Background: "Invalid value" and "allowed values are" config errors: what your library rejected and how to fix it — this error's family across 41 libraries.
Related errors
- LogSettings.LogDevice needs to be specified (e.g., use…
- Segment ( ) must be at least of page size ( )
- Page size must be at least of device sector size
- Local memory device must have a capacity!
- Size is not 32-bit
AI-assisted analysis of microsoft/FASTER@321d872eab (2026-09-15).
Data as JSON: /api/errors/41a41471ee6017d8.
Report an issue: GitHub.
Appendix: source
Thrown at cs/src/core/Allocator/AllocatorBase.cs:1014
LogTotalSizeBits = settings.MemorySizeBits;
LogTotalSizeBytes = 1L << LogTotalSizeBits;
BufferSize = (int)(LogTotalSizeBytes / (1L << LogPageSizeBits));
BufferSizeMask = BufferSize - 1;
LogMutableFraction = settings.MutableFraction;
EmptyPageCount = 0;
// Segment size
LogSegmentSizeBits = settings.SegmentSizeBits;
SegmentSize = 1L << LogSegmentSizeBits;
SegmentBufferSize = 1 + (LogTotalSizeBytes / SegmentSize < 1 ? 1 : (int)(LogTotalSizeBytes / SegmentSize));
if (SegmentSize < PageSize)
throw new FasterException($"Segment ({SegmentSize}) must be at least of page size ({PageSize})");
if ((LogTotalSizeBits != 0) && (LogTotalSizeBytes < PageSize))
throw new FasterException($"Memory size ({LogTotalSizeBytes}) must be configured to be either 1 (i.e., 0 bits) or at least page size ({PageSize})");
PageStatusIndicator = new FullPageStatus[BufferSize];
if (!IsNullDevice)
{
PendingFlush = new PendingFlushList[BufferSize];
for (int i = 0; i < BufferSize; i++)
PendingFlush[i] = new PendingFlushList();
}
device = settings.LogDevice;
sectorSize = (int)device.SectorSize;
if (PageSize < sectorSize)
throw new FasterException($"Page size must be at least of device sector size ({sectorSize} bytes). Set PageSizeBits accordingly.");
AlignedPageSizeBytes = (PageSize + (sectorSize - 1)) & ~(sectorSize - 1);
}
View on GitHub (pinned to 321d872eab)