Avoid initialization of every calloc'd int in fd_map#161
Merged
arr2036 merged 1 commit intomheily:masterfrom Sep 1, 2025
Merged
Avoid initialization of every calloc'd int in fd_map#161arr2036 merged 1 commit intomheily:masterfrom
arr2036 merged 1 commit intomheily:masterfrom
Conversation
libkqueue allocates the the number of available file descriptors for the fd_map array in linux/platform.c to. That limit is vast in Docker, for complicated reasons: 1073741816 The library allocates arrays of that size in several places, but in only one does it then also _initialize_ every member of the array (to -1). Since calloc/mmap are optimized to allocate lazily, this means that only that instance winds up immediately actually using ~4GB in memory. The initialization of the int array uses -1 to indicate that a field isn't in use. The patch changes this to use 0 as unused, simply bumping the stored fds by one upon insert and decrementing by one on access, via helpers.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
libkqueue allocates the the number of available file descriptors for the fd_map array in linux/platform.c to. That limit is vast in Docker, for complicated reasons:
1073741816
The library allocates arrays of that size in several places, but in only one does it then also initialize every member of the array (to -1). Since calloc/mmap are optimized to allocate lazily, this means that only that instance winds up immediately actually using ~4GB in memory.
The initialization of the int array uses -1 to indicate that a field isn't in use. The patch changes this to use 0 as unused, simply bumping the stored fds by one upon insert and decrementing by one on access, via helpers.
Fixes #153